From 8dd16259287f58f9273002717ec4d27e97127719 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:43:14 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- .../libwebrtc/net/dcsctp/socket/capabilities.h | 2 +- .../libwebrtc/net/dcsctp/socket/dcsctp_socket.cc | 25 ++++++++++----- .../net/dcsctp/socket/dcsctp_socket_test.cc | 36 +++++++++++++++++----- .../net/dcsctp/socket/heartbeat_handler_test.cc | 3 +- 4 files changed, 49 insertions(+), 17 deletions(-) (limited to 'third_party/libwebrtc/net/dcsctp/socket') diff --git a/third_party/libwebrtc/net/dcsctp/socket/capabilities.h b/third_party/libwebrtc/net/dcsctp/socket/capabilities.h index 286509a40a..9b1bff0a90 100644 --- a/third_party/libwebrtc/net/dcsctp/socket/capabilities.h +++ b/third_party/libwebrtc/net/dcsctp/socket/capabilities.h @@ -21,7 +21,7 @@ struct Capabilities { bool message_interleaving = false; // RFC6525 Stream Reconfiguration bool reconfig = false; - // https://datatracker.ietf.org/doc/draft-tuexen-tsvwg-sctp-zero-checksum/ + // https://datatracker.ietf.org/doc/draft-ietf-tsvwg-sctp-zero-checksum/ bool zero_checksum = false; // Negotiated maximum incoming and outgoing stream count. uint16_t negotiated_maximum_incoming_streams = 0; diff --git a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc index 98cd34a111..0667e6f899 100644 --- a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc +++ b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc @@ -22,7 +22,6 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/array_view.h" -#include "api/task_queue/task_queue_base.h" #include "net/dcsctp/packet/chunk/abort_chunk.h" #include "net/dcsctp/packet/chunk/chunk.h" #include "net/dcsctp/packet/chunk/cookie_ack_chunk.h" @@ -120,8 +119,12 @@ Capabilities ComputeCapabilities(const DcSctpOptions& options, capabilities.reconfig = true; } - if (options.enable_zero_checksum && - parameters.get().has_value()) { + if (options.zero_checksum_alternate_error_detection_method != + ZeroChecksumAlternateErrorDetectionMethod::None() && + parameters.get().has_value() && + parameters.get() + ->error_detection_method() == + options.zero_checksum_alternate_error_detection_method) { capabilities.zero_checksum = true; } @@ -134,6 +137,7 @@ Capabilities ComputeCapabilities(const DcSctpOptions& options, } void AddCapabilityParameters(const DcSctpOptions& options, + bool support_zero_checksum, Parameters::Builder& builder) { std::vector chunk_types = {ReConfigChunk::kType}; @@ -145,8 +149,11 @@ void AddCapabilityParameters(const DcSctpOptions& options, chunk_types.push_back(IDataChunk::kType); chunk_types.push_back(IForwardTsnChunk::kType); } - if (options.enable_zero_checksum) { - builder.Add(ZeroChecksumAcceptableChunkParameter()); + if (support_zero_checksum) { + RTC_DCHECK(options.zero_checksum_alternate_error_detection_method != + ZeroChecksumAlternateErrorDetectionMethod::None()); + builder.Add(ZeroChecksumAcceptableChunkParameter( + options.zero_checksum_alternate_error_detection_method)); } builder.Add(SupportedExtensionsParameter(std::move(chunk_types))); } @@ -282,7 +289,11 @@ void DcSctpSocket::SetState(State state, absl::string_view reason) { void DcSctpSocket::SendInit() { Parameters::Builder params_builder; - AddCapabilityParameters(options_, params_builder); + AddCapabilityParameters( + options_, /*support_zero_checksum=*/ + options_.zero_checksum_alternate_error_detection_method != + ZeroChecksumAlternateErrorDetectionMethod::None(), + params_builder); InitChunk init(/*initiate_tag=*/connect_params_.verification_tag, /*a_rwnd=*/options_.max_receiver_window_buffer_size, options_.announced_maximum_outgoing_streams, @@ -1227,7 +1238,7 @@ void DcSctpSocket::HandleInit(const CommonHeader& header, chunk->initial_tsn(), my_initial_tsn, chunk->a_rwnd(), tie_tag, capabilities) .Serialize())); - AddCapabilityParameters(options_, params_builder); + AddCapabilityParameters(options_, capabilities.zero_checksum, params_builder); InitAckChunk init_ack(/*initiate_tag=*/my_verification_tag, options_.max_receiver_window_buffer_size, diff --git a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc index 413516bae0..dfe8ba60fe 100644 --- a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc +++ b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc @@ -2887,8 +2887,16 @@ TEST_P(DcSctpSocketParametrizedTest, ZeroChecksumMetricsAreSet) { std::vector> combinations = { {false, false}, {false, true}, {true, false}, {true, true}}; for (const auto& [a_enable, z_enable] : combinations) { - DcSctpOptions a_options = {.enable_zero_checksum = a_enable}; - DcSctpOptions z_options = {.enable_zero_checksum = z_enable}; + DcSctpOptions a_options = { + .zero_checksum_alternate_error_detection_method = + a_enable + ? ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls() + : ZeroChecksumAlternateErrorDetectionMethod::None()}; + DcSctpOptions z_options = { + .zero_checksum_alternate_error_detection_method = + z_enable + ? ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls() + : ZeroChecksumAlternateErrorDetectionMethod::None()}; SocketUnderTest a("A", a_options); auto z = std::make_unique("Z", z_options); @@ -2902,7 +2910,9 @@ TEST_P(DcSctpSocketParametrizedTest, ZeroChecksumMetricsAreSet) { } TEST(DcSctpSocketTest, AlwaysSendsInitWithNonZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); a.socket.Connect(); @@ -2916,7 +2926,9 @@ TEST(DcSctpSocketTest, AlwaysSendsInitWithNonZeroChecksum) { } TEST(DcSctpSocketTest, MaySendInitAckWithZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); SocketUnderTest z("Z", options); @@ -2933,7 +2945,9 @@ TEST(DcSctpSocketTest, MaySendInitAckWithZeroChecksum) { } TEST(DcSctpSocketTest, AlwaysSendsCookieEchoWithNonZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); SocketUnderTest z("Z", options); @@ -2951,7 +2965,9 @@ TEST(DcSctpSocketTest, AlwaysSendsCookieEchoWithNonZeroChecksum) { } TEST(DcSctpSocketTest, SendsCookieAckWithZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); SocketUnderTest z("Z", options); @@ -2970,7 +2986,9 @@ TEST(DcSctpSocketTest, SendsCookieAckWithZeroChecksum) { } TEST_P(DcSctpSocketParametrizedTest, SendsDataWithZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); auto z = std::make_unique("Z", options); @@ -2993,7 +3011,9 @@ TEST_P(DcSctpSocketParametrizedTest, SendsDataWithZeroChecksum) { } TEST_P(DcSctpSocketParametrizedTest, AllPacketsAfterConnectHaveZeroChecksum) { - DcSctpOptions options = {.enable_zero_checksum = true}; + DcSctpOptions options = { + .zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()}; SocketUnderTest a("A", options); auto z = std::make_unique("Z", options); diff --git a/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc b/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc index 4475527322..b7f3a60d39 100644 --- a/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc +++ b/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc @@ -38,7 +38,8 @@ DcSctpOptions MakeOptions(DurationMs heartbeat_interval) { DcSctpOptions options; options.heartbeat_interval_include_rtt = false; options.heartbeat_interval = heartbeat_interval; - options.enable_zero_checksum = false; + options.zero_checksum_alternate_error_detection_method = + ZeroChecksumAlternateErrorDetectionMethod::None(); return options; } -- cgit v1.2.3