gfe-relnote: Allow client to enable QUIC bbr2 congestion control on server. Protected by --gfe2_reloadable_flag_quic_allow_client_enabled_bbr_v2. PiperOrigin-RevId: 258653066 Change-Id: I921df5333a16224f118b2d4d2e423d7e3f2deaf4
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h index 1534c97..f2033e1 100644 --- a/quic/core/crypto/crypto_protocol.h +++ b/quic/core/crypto/crypto_protocol.h
@@ -125,6 +125,7 @@ const QuicTag kIW10 = TAG('I', 'W', '1', '0'); // Force ICWND to 10 const QuicTag kIW20 = TAG('I', 'W', '2', '0'); // Force ICWND to 20 const QuicTag kIW50 = TAG('I', 'W', '5', '0'); // Force ICWND to 50 +const QuicTag kB2ON = TAG('B', '2', 'O', 'N'); // Enable BBRv2 const QuicTag kNTLP = TAG('N', 'T', 'L', 'P'); // No tail loss probe const QuicTag k1TLP = TAG('1', 'T', 'L', 'P'); // 1 tail loss probe const QuicTag k1RTO = TAG('1', 'R', 'T', 'O'); // Send 1 packet upon RTO
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc index 5b9468f..d2b133d 100644 --- a/quic/core/http/end_to_end_test.cc +++ b/quic/core/http/end_to_end_test.cc
@@ -143,7 +143,12 @@ } std::vector<TestParams> params; - for (const QuicTag congestion_control_tag : {kRENO, kTBBR, kQBIC, kTPCC}) { + for (const QuicTag congestion_control_tag : + {kRENO, kTBBR, kQBIC, kTPCC, kB2ON}) { + if (!GetQuicReloadableFlag(quic_allow_client_enabled_bbr_v2) && + congestion_control_tag == kB2ON) { + continue; + } for (const ParsedQuicVersionVector& client_versions : version_buckets) { if (FilterSupportedVersions(client_versions).empty()) { continue; @@ -1697,6 +1702,9 @@ case kQBIC: expected_congestion_control_type = kCubicBytes; break; + case kB2ON: + expected_congestion_control_type = kBBRv2; + break; default: QUIC_DLOG(FATAL) << "Unexpected congestion control tag"; }
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index e7cd1a5..5762333 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -174,6 +174,12 @@ if (config.HasClientRequestedIndependentOption(kTBBR, perspective)) { SetSendAlgorithm(kBBR); } + if (GetQuicReloadableFlag(quic_allow_client_enabled_bbr_v2) && + config.HasClientRequestedIndependentOption(kB2ON, perspective)) { + QUIC_RELOADABLE_FLAG_COUNT(quic_allow_client_enabled_bbr_v2); + SetSendAlgorithm(kBBRv2); + } + if (config.HasClientRequestedIndependentOption(kRENO, perspective)) { SetSendAlgorithm(kRenoBytes); } else if (config.HasClientRequestedIndependentOption(kBYTE, perspective) || @@ -184,6 +190,7 @@ config.HasClientRequestedIndependentOption(kTPCC, perspective)) { SetSendAlgorithm(kPCC); } + // Initial window. if (GetQuicReloadableFlag(quic_unified_iw_options)) { if (config.HasClientRequestedIndependentOption(kIW03, perspective)) {