-
Notifications
You must be signed in to change notification settings - Fork 151
fix(s2n-quic-core): MtuProbingCompleteSupport transport parameter encoding #2931
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
Conversation
.../parameters/snapshots/s2n_quic_core__transport__parameters__tests__client_snapshot_test.snap
Show resolved
Hide resolved
.../parameters/snapshots/s2n_quic_core__transport__parameters__tests__server_snapshot_test.snap
Show resolved
Hide resolved
| if self.dc.mtu_probing_complete_support() { | ||
| MtuProbingCompleteSupport::Enabled.append_to_buffer(server_params); | ||
| } |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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
Release Summary:
Fix MtuProbingCompleteSupport transport parameter encoding.
Resolved issues:
resolves #2927. related to #2919.
Description of changes:
MtuProbingCompleteSupporttransport 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 theMtuProbingCompleteSupporttransport 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_supportas false, because dc is not enabled for the endpoint: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
MtuProbingCompleteSupporttransport parameter. The test would verify ifMtuProbingCompleteSupportis 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_testandmtu_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.