Skip to content

Support Client Migration (Client Side) #1946

@nibanks

Description

@nibanks

Describe the feature you'd like supported

Support for QUIC clients to change their/add/remove local addresses (IP or port) should be added to MsQuic. More info at the protocol level can be found at https://datatracker.ietf.org/doc/html/rfc9000#section-9.

This feature allows the client to seamlessly switch between different networks, such as Wi-Fi and cellular, and keep the existing connection alive.

Proposed solution

Starting at the API, probably the best way to tackle this would be to add a way for the app layer to add and remove addresses. New addresses won't be used as the primary by default. But QUIC can start probing them immediately to see if they work. The app will have to "set" the current local address to make it a primary. The app shouldn't need to add it and then set it; it can just add it if it wants to immediately switch it a new one.

Internally, these different addresses would map to separate Paths. All the client side logic for probing and switching paths would need to be completed.

Additional thoughts

  • Should MsQuic automatically forget addresses ever?
  • Eventually, if the client doesn't explicitly set (bind) any local address, MsQuic should support automatically switching when the current address doesn't work. This would require a number of additional platform abstractions: querying addresses, getting notification of address changes, etc.
    • This is not in scope for this task though. That would be future work.
  • The work should include as full test coverage as possible, using the existing datapath hooks to spoof anything necessary. Most of the work can be tested just by changing the local port of the client though.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status

    Should be written

    Status

    Planned

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions