Reorder QUIC TLS versions before QUIC_CRYPTO
This CL reorders QUIC versions that use TLS versions ahead of QUIC_CRYPTO versions. This means that when multiple versions are available, we will use the more recent TLS ones.
This CL does not have its own flag protection, as it isn't possible since SupportedVersions() is constexpr. Instead, this CL deprecates the T050 version flags and replaces them with a new _v2 flag.
gfe-relnote: reorder versions, protected by QUIC TLS version flags
PiperOrigin-RevId: 305336064
Change-Id: Icf63224dd24f9a793ec1e4d65b3577937ac9d590
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc
index e35915f..25fcccd 100644
--- a/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -918,7 +918,7 @@
// Wait for entering a quiescence of 15 seconds.
ASSERT_TRUE(simulator_.RunUntilOrTimeout(
[this]() { return sender_unacked_map()->bytes_in_flight() == 0; },
- params.RTT()));
+ params.RTT() + timeout));
simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 60d97c9..105d23d 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -20,7 +20,7 @@
enable_version_draft_25_(
GetQuicReloadableFlag(quic_enable_version_draft_25_v3)),
disable_version_q050_(GetQuicReloadableFlag(quic_disable_version_q050)),
- enable_version_t050_(GetQuicReloadableFlag(quic_enable_version_t050)),
+ enable_version_t050_(GetQuicReloadableFlag(quic_enable_version_t050_v2)),
disable_version_q049_(GetQuicReloadableFlag(quic_disable_version_q049)),
disable_version_q048_(GetQuicReloadableFlag(quic_disable_version_q048)),
disable_version_q046_(GetQuicReloadableFlag(quic_disable_version_q046)),
@@ -59,7 +59,8 @@
GetQuicReloadableFlag(quic_enable_version_draft_25_v3) ||
disable_version_q050_ !=
GetQuicReloadableFlag(quic_disable_version_q050) ||
- enable_version_t050_ != GetQuicReloadableFlag(quic_enable_version_t050) ||
+ enable_version_t050_ !=
+ GetQuicReloadableFlag(quic_enable_version_t050_v2) ||
disable_version_q049_ !=
GetQuicReloadableFlag(quic_disable_version_q049) ||
disable_version_q048_ !=
@@ -73,7 +74,7 @@
enable_version_draft_25_ =
GetQuicReloadableFlag(quic_enable_version_draft_25_v3);
disable_version_q050_ = GetQuicReloadableFlag(quic_disable_version_q050);
- enable_version_t050_ = GetQuicReloadableFlag(quic_enable_version_t050);
+ enable_version_t050_ = GetQuicReloadableFlag(quic_enable_version_t050_v2);
disable_version_q049_ = GetQuicReloadableFlag(quic_disable_version_q049);
disable_version_q048_ = GetQuicReloadableFlag(quic_disable_version_q048);
disable_version_q046_ = GetQuicReloadableFlag(quic_disable_version_q046);
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h
index 1673c16..381cef4 100644
--- a/quic/core/quic_version_manager.h
+++ b/quic/core/quic_version_manager.h
@@ -50,7 +50,7 @@
bool enable_version_draft_25_;
// quic_disable_version_q050 flag
bool disable_version_q050_;
- // quic_enable_version_t050 flag
+ // quic_enable_version_t050_v2 flag
bool enable_version_t050_;
// quic_disable_version_q049 flag
bool disable_version_q049_;
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index b8415b3..9ecad57 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -20,7 +20,7 @@
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_draft_27, false);
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, false);
- SetQuicReloadableFlag(quic_enable_version_t050, false);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, false);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
SetQuicReloadableFlag(quic_disable_version_q048, false);
@@ -50,7 +50,8 @@
manager.GetSupportedVersionsWithQuicCrypto());
SetQuicReloadableFlag(quic_enable_version_draft_27, true);
- expected_parsed_versions.push_back(
+ expected_parsed_versions.insert(
+ expected_parsed_versions.begin(),
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27));
EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
EXPECT_EQ(expected_parsed_versions.size() - 1,
@@ -61,7 +62,8 @@
manager.GetSupportedVersionsWithQuicCrypto());
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, true);
- expected_parsed_versions.push_back(
+ expected_parsed_versions.insert(
+ expected_parsed_versions.begin() + 1,
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
EXPECT_EQ(expected_parsed_versions.size() - 2,
@@ -69,8 +71,9 @@
EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
manager.GetSupportedVersionsWithQuicCrypto());
- SetQuicReloadableFlag(quic_enable_version_t050, true);
- expected_parsed_versions.push_back(
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, true);
+ expected_parsed_versions.insert(
+ expected_parsed_versions.begin() + 2,
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
EXPECT_EQ(expected_parsed_versions.size() - 3,
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index a0e3ad7..5be7334 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -387,7 +387,7 @@
filtered_versions.push_back(version);
}
} else {
- if (GetQuicReloadableFlag(quic_enable_version_t050)) {
+ if (GetQuicReloadableFlag(quic_enable_version_t050_v2)) {
filtered_versions.push_back(version);
}
}
@@ -637,7 +637,7 @@
if (parsed_version.handshake_protocol == PROTOCOL_QUIC_CRYPTO) {
SetQuicReloadableFlag(quic_disable_version_q050, false);
} else {
- SetQuicReloadableFlag(quic_enable_version_t050, true);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, true);
}
} else if (parsed_version.transport_version == QUIC_VERSION_49) {
SetQuicReloadableFlag(quic_disable_version_q049, false);
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index b037f8a..8843d58 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -356,19 +356,19 @@
// This vector contains all crypto handshake protocols that are supported.
constexpr std::array<HandshakeProtocol, 2> SupportedHandshakeProtocols() {
- return {PROTOCOL_QUIC_CRYPTO, PROTOCOL_TLS1_3};
+ return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO};
}
constexpr std::array<ParsedQuicVersion, 8> SupportedVersions() {
return {
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27),
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25),
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50),
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49),
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48),
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43),
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27),
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25),
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),
};
}
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index 8723a28..30a7f28 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -387,7 +387,7 @@
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_draft_27, true);
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, true);
- SetQuicReloadableFlag(quic_enable_version_t050, true);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, true);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
SetQuicReloadableFlag(quic_disable_version_q048, false);
@@ -396,6 +396,12 @@
ParsedQuicVersionVector expected_parsed_versions;
expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27));
+ expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
+ expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
+ expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50));
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49));
@@ -405,12 +411,6 @@
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46));
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43));
- expected_parsed_versions.push_back(
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27));
- expected_parsed_versions.push_back(
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
- expected_parsed_versions.push_back(
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
ASSERT_EQ(expected_parsed_versions,
FilterSupportedVersions(AllSupportedVersions()));
@@ -422,7 +422,7 @@
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_draft_27, false);
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, true);
- SetQuicReloadableFlag(quic_enable_version_t050, true);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, true);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
SetQuicReloadableFlag(quic_disable_version_q048, false);
@@ -431,6 +431,10 @@
ParsedQuicVersionVector expected_parsed_versions;
expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
+ expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
+ expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50));
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49));
@@ -440,10 +444,6 @@
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46));
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43));
- expected_parsed_versions.push_back(
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
- expected_parsed_versions.push_back(
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
ASSERT_EQ(expected_parsed_versions,
FilterSupportedVersions(AllSupportedVersions()));
@@ -454,7 +454,7 @@
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_draft_27, false);
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, false);
- SetQuicReloadableFlag(quic_enable_version_t050, false);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, false);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
SetQuicReloadableFlag(quic_disable_version_q048, false);
@@ -586,9 +586,9 @@
{
QuicFlagSaver flag_saver;
- SetQuicReloadableFlag(quic_enable_version_t050, false);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, false);
QuicEnableVersion(parsed_version_t050);
- EXPECT_TRUE(GetQuicReloadableFlag(quic_enable_version_t050));
+ EXPECT_TRUE(GetQuicReloadableFlag(quic_enable_version_t050_v2));
}
{
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc
index 82afd3c..b534635 100644
--- a/quic/test_tools/quic_test_utils.cc
+++ b/quic/test_tools/quic_test_utils.cc
@@ -820,7 +820,7 @@
void DisableQuicVersionsWithTls() {
SetQuicReloadableFlag(quic_enable_version_draft_27, false);
SetQuicReloadableFlag(quic_enable_version_draft_25_v3, false);
- SetQuicReloadableFlag(quic_enable_version_t050, false);
+ SetQuicReloadableFlag(quic_enable_version_t050_v2, false);
}
QuicEncryptedPacket* ConstructEncryptedPacket(