Background
When Config::discover_pmtu(true) is enabled, the initial path receives a
Pmtud instance because it is created with Some(config). Paths created after
the handshake do not: both the client probe_path() path and a server path
created for a newly observed 4-tuple call Path::new(..., None).
As a result, a connection that migrates to a new local or peer address cannot
run PMTU discovery or revalidate_pmtu() on that replacement path. This is
independent from #2565, which concerns selecting the wrong existing path's
PMTUD state while sending.
Goal
Make runtime-created client and server paths inherit the connection's effective
PMTUD enablement and probe-attempt configuration, while keeping PMTU probes off
an unvalidated path until QUIC path validation succeeds.
Non-goals
Code Changes Tree
quiche/
└── src/
├── lib.rs # retain effective PMTUD settings and apply them to runtime-created paths
├── path.rs # defer PMTU probes until a path has completed validation
└── tests.rs # cover PMTUD inheritance on client- and server-created runtime paths
Design
The connection retains the effective discover_pmtu and
pmtud_max_probes values, including values applied by the TLS configuration
callback. Each later client or server path receives a fresh path-scoped
Pmtud instance with those settings.
An unvalidated path still sends the normal bounded PATH_CHALLENGE/
PATH_RESPONSE traffic. PMTUD probing starts only after that path becomes
validated, so an oversized candidate probe cannot interfere with path
validation.
Test And Acceptance Criteria
Acceptance Criteria
- A client path created by
probe_path() has PMTUD state when the connection
enables PMTUD.
- The corresponding server runtime path also has independent PMTUD state.
- A runtime path does not send a PMTU probe before validation.
- Existing initial-path PMTUD behavior is unchanged.
Validation
cargo +nightly fmt --all -- --check
cargo test -p quiche runtime_paths_inherit_pmtud_configuration --lib
Background
When
Config::discover_pmtu(true)is enabled, the initial path receives aPmtudinstance because it is created withSome(config). Paths created afterthe handshake do not: both the client
probe_path()path and a server pathcreated for a newly observed 4-tuple call
Path::new(..., None).As a result, a connection that migrates to a new local or peer address cannot
run PMTU discovery or
revalidate_pmtu()on that replacement path. This isindependent from #2565, which concerns selecting the wrong existing path's
PMTUD state while sending.
Goal
Make runtime-created client and server paths inherit the connection's effective
PMTUD enablement and probe-attempt configuration, while keeping PMTU probes off
an unvalidated path until QUIC path validation succeeds.
Non-goals
Code Changes Tree
Design
The connection retains the effective
discover_pmtuandpmtud_max_probesvalues, including values applied by the TLS configurationcallback. Each later client or server path receives a fresh path-scoped
Pmtudinstance with those settings.An unvalidated path still sends the normal bounded PATH_CHALLENGE/
PATH_RESPONSE traffic. PMTUD probing starts only after that path becomes
validated, so an oversized candidate probe cannot interfere with path
validation.
Test And Acceptance Criteria
Acceptance Criteria
probe_path()has PMTUD state when the connectionenables PMTUD.
Validation
cargo +nightly fmt --all -- --checkcargo test -p quiche runtime_paths_inherit_pmtud_configuration --lib