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)) {