cloudflare / cloudflare/quiche
quiche: Runtime-created paths do not inherit PMTUD configuration
- Dominant language
- Rust
- Stars
- 11.8k
- Forks
- 1.1k
- Avg merge
- 21h 9m
- Merged PRs (30d)
- 6
Description
## 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
- Do not change the PMTUD search algorithm.
- Do not change path selection or active-path switching.
- Do not duplicate the send-path state correction proposed in #2566.
## Code Changes Tree
```text
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`
Contributor guide
Research direction
Start in quiche/src/lib.rs to trace how effective discover_pmtu and pmtud_max_probes values are retained and how probe_path() and server runtime paths are created. Read quiche/src/path.rs for validation and PMTU probe behavior, then use quiche/src/tests.rs and run the specified nightly fmt check and runtime_paths_inherit_pmtud_configuration test. Done means both runtime path types inherit independent PMTUD state, probes wait for validation, and initial-path behavior remains unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- networking
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100