Skip to content
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

Clarify use of MAX_PATHS and client created new paths #298

Closed
mirjak opened this issue Mar 12, 2024 · 2 comments
Closed

Clarify use of MAX_PATHS and client created new paths #298

mirjak opened this issue Mar 12, 2024 · 2 comments
Labels
design duplicate This issue or pull request already exists explicit path ID has PR

Comments

@mirjak
Copy link
Collaborator

mirjak commented Mar 12, 2024

Issue raised in PR #292:

huitema 3 weeks ago

I think we should be a bit more prescriptive here. I would like MAX_PATHS to follow the same logic as MAX_STREAMS, and describe the number of paths that MAY be created by the peer. I would also like to exploit the asymmetry of clients and servers, in which only the clients create new paths. Something like:

1. The server send MAX_PATHS to raise the maximum path number that it is willing to accept.
2. The client sends MAX_PATHS to raise the maximum path number that it is willing to create.
3. The server sends MP_NEW_CONNECTION_ID up to the min of client and server MAX_PATHS
4. The client sends MP_NEW_CONNECTION_ID up to the min of client and server MAX_PATHS
5. The client picks a server provided connection ID to create a new path, send a PATH CHALLENGE
6. If the server receives the challenge, it picks a connection ID with the same path ID for sending the PATH RESPONSE

We have a set of error conditions:

- Server sends MP_NEW_CONNECTION_ID with path ID larger than client limit -- protocol error
- Client sends MP_NEW_CONNECTION_ID with path ID larger than server limit -- protocol error
- Server receives a PATH CHALLENGE before receiving MP_NEW_CONNECTION_ID for the path -- not an error, but the PATH 

CHALLENGE is ignored, no response. Or, response is delayed until MP_NEW_CONNECTION_ID arrives.
But we also achieve path_id symmetry, I guess. Although there is probably some additional complexity with NAT Rebinding.

** @michael-eriksson michael-eriksson 3 weeks ago

I agree, and this is more or less exactly how it is implemented in the Rask stack.

@huitema huitema 2 weeks ago

There is another issue regarding probing for new paths. When a client wants to create a new path, it is supposed to use a "new" path_id, select CID that match the path ID, send a Path Challenge, and wait for the Path Response. The Path Response may well never arrive. That means that the Path ID is "burned" for the client, but also for the server. But the server does not know, will not know until the client sends a Path Abandon. We should be clear that the client should do that. We should also clarify how the Path Abandon causes all the CID allocated for the path ID to be retired.
@mirjak
Copy link
Collaborator Author

mirjak commented May 28, 2024

There is a new PR now: #354

@mirjak
Copy link
Collaborator Author

mirjak commented May 29, 2024

As #354 is merged, that clarifies the use of MAX_PATHS, I will close this issue now.

There are two new related issues for further discussion:

@mirjak mirjak closed this as completed May 29, 2024
@mirjak mirjak added the duplicate This issue or pull request already exists label May 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design duplicate This issue or pull request already exists explicit path ID has PR
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants