Remove connection option "RVCM" after ietf quic connection migration launch.
Protected by FLAGS_quic_reloadable_flag_quic_remove_connection_migration_connection_option.
PiperOrigin-RevId: 398530976
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h
index 15f66e2..13ec7fd 100644
--- a/quic/core/crypto/crypto_protocol.h
+++ b/quic/core/crypto/crypto_protocol.h
@@ -258,6 +258,8 @@
const QuicTag kELDT = TAG('E', 'L', 'D', 'T'); // Enable Loss Detection Tuning
+// TODO(haoyuewang) Remove RVCM option once
+// --quic_remove_connection_migration_connection_option is deprecated.
const QuicTag kRVCM = TAG('R', 'V', 'C', 'M'); // Validate the new address
// upon client address change.
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 6a1c4a8..3e94bf9 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -378,7 +378,10 @@
copt.push_back(kILD0);
}
copt.push_back(kPLE1);
- copt.push_back(kRVCM);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ copt.push_back(kRVCM);
+ }
client_config_.SetConnectionOptionsToSend(copt);
// Start the server first, because CreateQuicClient() attempts
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 431382f..b52d4d1 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -638,10 +638,17 @@
if (config.HasClientSentConnectionOption(kDFER, perspective_)) {
defer_send_in_response_to_packets_ = false;
}
+ const bool remove_connection_migration_connection_option =
+ GetQuicReloadableFlag(quic_remove_connection_migration_connection_option);
+ if (remove_connection_migration_connection_option) {
+ QUIC_RELOADABLE_FLAG_COUNT(
+ quic_remove_connection_migration_connection_option);
+ }
if (framer_.version().HasIetfQuicFrames() && use_path_validator_ &&
count_bytes_on_alternative_path_separately_ &&
GetQuicReloadableFlag(quic_server_reverse_validate_new_path3) &&
- config.HasClientSentConnectionOption(kRVCM, perspective_)) {
+ (remove_connection_migration_connection_option ||
+ config.HasClientSentConnectionOption(kRVCM, perspective_))) {
QUIC_CODE_COUNT_N(quic_server_reverse_validate_new_path3, 6, 6);
validate_client_addresses_ = true;
}
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index cc94971..789baaf 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -1320,12 +1320,15 @@
void set_perspective(Perspective perspective) {
connection_.set_perspective(perspective);
if (perspective == Perspective::IS_SERVER) {
- QuicConfig config;
- QuicTagVector connection_options;
- connection_options.push_back(kRVCM);
- config.SetInitialReceivedConnectionOptions(connection_options);
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ QuicTagVector connection_options;
+ connection_options.push_back(kRVCM);
+ config.SetInitialReceivedConnectionOptions(connection_options);
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
connection_.set_can_truncate_connection_ids(true);
QuicConnectionPeer::SetNegotiatedVersion(&connection_);
@@ -14366,10 +14369,13 @@
TEST_P(QuicConnectionTest,
PathValidationFailedOnClientDueToLackOfServerConnectionId) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ config.SetConnectionOptionsToSend({kRVCM});
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -14391,10 +14397,13 @@
TEST_P(QuicConnectionTest,
PathValidationFailedOnClientDueToLackOfClientConnectionIdTheSecondTime) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -14480,10 +14489,13 @@
}
TEST_P(QuicConnectionTest, ServerConnectionIdRetiredUponPathValidationFailure) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -14527,10 +14539,13 @@
TEST_P(QuicConnectionTest,
MigratePathDirectlyFailedDueToLackOfServerConnectionId) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -14547,10 +14562,13 @@
TEST_P(QuicConnectionTest,
MigratePathDirectlyFailedDueToLackOfClientConnectionIdTheSecondTime) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -14872,10 +14890,13 @@
}
TEST_P(QuicConnectionTest, ServerRetireSelfIssuedConnectionId) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!connection_.connection_migration_use_new_cid()) {
return;
}
@@ -15329,10 +15350,13 @@
}
TEST_P(QuicConnectionTest, AckElicitingFrames) {
- QuicConfig config;
- config.SetConnectionOptionsToSend({kRVCM});
- EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
- connection_.SetFromConfig(config);
+ if (!GetQuicReloadableFlag(
+ quic_remove_connection_migration_connection_option)) {
+ QuicConfig config;
+ config.SetConnectionOptionsToSend({kRVCM});
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+ connection_.SetFromConfig(config);
+ }
if (!version().HasIetfQuicFrames() ||
!connection_.connection_migration_use_new_cid() ||
!GetQuicReloadableFlag(quic_add_missing_update_ack_timeout)) {
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 125cbc0..dfee754 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -73,6 +73,8 @@
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_drop_unsent_path_response, true)
// If true, enable server retransmittable on wire PING.
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, true)
+// If true, ietf connection migration is no longer conditioned on connection option RVCM.
+QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_remove_connection_migration_connection_option, true)
// If true, ignore peer_max_ack_delay during handshake.
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_ignore_peer_max_ack_delay_during_handshake, true)
// If true, include stream information in idle timeout connection close detail.