Skip to content

Conversation

@boquan-fang
Copy link
Contributor

@boquan-fang boquan-fang commented Jan 6, 2026

Release Summary:

Fix MtuProbingCompleteSupport transport parameter encoding.

Resolved issues:

resolves #2927. related to #2919.

Description of changes:

MtuProbingCompleteSupport transport parameter should be disabled by default and can only be enabled if an endpoint has dc enabled. The logic for encoding was inverted with its current code. dcQUIC should encode the MtuProbingCompleteSupport transport parameter if it is enabled so that it can be sent on the wire.

In addition to that, I noticed that the server won't send this transport parameter currently, so I add such logic in quic/s2n-quic-transport/src/space/session_context.rs.

Call-outs:

Review the snapshot changes now. All endpoints that doesn't have dc enabled should have the MtuprobingCompleteSupport transport parameter disabled.

In addition to snapshots, the QUIC Interop tests in the CI also show that mtu_probing_complete_support as false, because dc is not enabled for the endpoint:

1.549555187s s2n_quic:server:conn: transport_parameters_received: transport_parameters=TransportParameters { original_destination_connection_id: None, initial_source_connection_id: Some(0x), retry_source_connection_id: None,
 stateless_reset_token: None, preferred_address: None, migration_support: true, max_idle_timeout: 30s, 
ack_delay_exponent: 3, max_ack_delay: 25ms, max_udp_payload_size: 1472, active_connection_id_limit: 2, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103,
 max_datagram_frame_size: 65536, dc_supported_versions: [], mtu_probing_complete_support: false } �[3mid�[0m�[2m=�[0m0

To avoid potential problem with the previous release for s2n-quic v1.71.0, we decided to abandon dcQUIC frame ID number 0xdc0001 and use 0xdc0002 instead. Refer to #2931 (comment) for more details.

Testing:

I add a unit test for the MtuProbingCompleteSupport transport parameter. The test would verify if MtuProbingCompleteSupport is enabled, then the parameter will be encoded, and otherwise, it would not.

Additional verifications are also added to two integration tests for this feature: mtu_probing_complete_frame_exchange_test and mtu_probing_complete_server_only_test. Those two tests would verify that if the transport parameters are properly received from its peer.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@boquan-fang boquan-fang requested a review from a team as a code owner January 6, 2026 20:36
Mark-Simulacrum
Mark-Simulacrum previously approved these changes Jan 6, 2026
Comment on lines 752 to 754
if self.dc.mtu_probing_complete_support() {
MtuProbingCompleteSupport::Enabled.append_to_buffer(server_params);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this have to happen here? For DcSupportedVersions, we need to wait for the client transport parameters to select a version, but do we need to wait for the client transport parameter to set MTU probing Complete support on the server?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If putting this logic here will introduce slight delay, then I would argue it should be put someplace else. Another place I can think of is to put it in handle_intial_packet() method. When the Server transport parameter got created, we can just check if the mtu probing complete is supported or not, and update the parameter there.

* move adding MtuProbingCompleteSupport transport parameter to intial
  packet handling to avoid delay
* fix a comment in test
@boquan-fang boquan-fang merged commit 0a8b0ac into main Jan 7, 2026
134 checks passed
@boquan-fang boquan-fang deleted the fix-mtu-probing-complete branch January 7, 2026 18:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New MTU probing complete transport parameter incorrectly encoded

3 participants