Skip to content

Add multipath #28

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 375 commits into
base: iroh-0.11.x
Choose a base branch
from
Draft

Add multipath #28

wants to merge 375 commits into from

Conversation

flub
Copy link
Collaborator

@flub flub commented Jan 15, 2025

No description provided.

@flub flub changed the title Add multipath to Quinn Add multipath Jan 15, 2025
@MikeRomaniuk
Copy link

Hi there!
Can you please say how much of the work is done already (just a ballpark figure will be enough)?
I would like to use quinn and the multipath feature feature is very important to me.
If this would be possible (I would need to ask the stakeholders) I may contribute to the development of the feature.

@flub
Copy link
Collaborator Author

flub commented Feb 21, 2025

@MikeRomaniuk This is still very early right now, maybe like the first 5% if that. We are still in the process of restructuring things for the basic building blocks for multipath to be there.

If you want to help you can take a look at the code so far, but it is currently still rather difficult to point at anything. It will probably be easier to jump in once we have the most basic 2-path connection working. But if you're keen to really help, right now it is mostly a case of trying to understand what would be a useful next step based on the specs and code. And then try and implement some of it. With just two of us this seems to move us forwards so far.

@flub
Copy link
Collaborator Author

flub commented Feb 21, 2025

@MikeRomaniuk Can I inquire as to what your usecase is?

flub and others added 19 commits February 26, 2025 18:45

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
This makes sure that the sequence numbers of the CIDs are sequential
per path.  Which is what it needs to be.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
This makes sure that the sequence numbers of the CIDs are sequential
per path.  Which is what it needs to be.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
It probably is never missing, but still nice to write like this

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
fmt

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
@MikeRomaniuk
Copy link

@flub, thanks for answering.
Sorry for the long time without an answer.
Unfortunately, I can't answer for the use case.
I would like to join you. I think I may answer whether I could help you in a few days or so.

@flub
Copy link
Collaborator Author

flub commented Feb 28, 2025

@MikeRomaniuk The usecase does kind of matter, because we have a very specific usecase in mind (documented in my fosdem talk, though the recording is terrible - i should re-record that sometime). We want to do the absolute minimum we can do for our usecase, and this keeps the number of public APIs that will be needed small as well.

The multipath spec does give you enough to make a largely interoperable protocol, but also still leaves a lot of things as essentially further research topics. The largest one is probably packet scheduling, also things like how to interoperate with the ack-frequency spec and probably a bunch more that escape me right now. So what you want to get out of this does matter in that regard.

@MikeRomaniuk
Copy link

@flub, I might have understood your speech in the video wrong, so feel free to correct me.
You want to implement multipath, so after a NAT traversal, you could be able to connect a second direct path to get around any firewalls. After the connection, the first path will serve as a backing and/or will be used to increase bandwidth.
Did I get this right?

flub and others added 9 commits July 2, 2025 15:12

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
This is already set to the right value.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
fun times

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
It fixes up the state of the paths kept on the connection and attempts
to document them a bit.

The MAX_PATH_ID and any possible PATH_NEW_CONNECTION_ID frames are
unfortunately not sent in the same datagram, because the endpoint dirver
issues CIDs asynchronously.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
This is way to easy to get wrong, but I also checked with main.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
dignifiedquire and others added 20 commits July 7, 2025 13:11

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
WIP

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Sends and receives PATH_CIDS_BLOCKED and PATHS_BLOCKED correctly

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
* ensure path status is only queued one, and only when changed

* schedule sending the path status frame at a more appropriate instant

* fix clippy, save a line

* keep within the multipath world

* register the sent frame with retransmits

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe
- Allows accessing the Path struct if you have a PathId

- Adds a Connection::path_events broadcast channel for the application
  to consume path events.

Verified

This commit was signed with the committer’s verified signature.
flub Floris Bruynooghe

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
- Allows accessing the Path struct if you have a PathId

- Adds a Connection::path_events broadcast channel for the application
to consume path events.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Abandons a path, issues new MAX_PATH_ID and CIDs, closes connection if last path is abandoned.  Removes accepted reset tokens when a path is abandoned.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: 🏗 In progress
Development

Successfully merging this pull request may close these issues.

None yet