QUIC v2 has been published as RFC 9369. Rename all identifiers from "v2 draft 08" to "rfc v2". No behavior change. Also renames the not-enabled flag gfe2_reloadable_flag_quic_enable_version_2_draft_08 to gfe2_reloadable_flag_quic_enable_version_rfcv2.
Protected by FLAGS_gfe_reloadable_flag_enable_version_rfcv2.
PiperOrigin-RevId: 537351342
diff --git a/quiche/quic/core/crypto/crypto_utils.cc b/quiche/quic/core/crypto/crypto_utils.cc
index 9ce176e..1ac33da 100644
--- a/quiche/quic/core/crypto/crypto_utils.cc
+++ b/quiche/quic/core/crypto/crypto_utils.cc
@@ -96,7 +96,7 @@
const absl::string_view& predicate) {
static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync with HKDF labels");
- if (version == ParsedQuicVersion::V2Draft08()) {
+ if (version == ParsedQuicVersion::RFCv2()) {
return absl::StrCat("quicv2 ", predicate);
} else {
return absl::StrCat("quic ", predicate);
@@ -152,7 +152,7 @@
const uint8_t kRFCv1InitialSalt[] = {0x38, 0x76, 0x2c, 0xf7, 0xf5, 0x59, 0x34,
0xb3, 0x4d, 0x17, 0x9a, 0xe6, 0xa4, 0xc8,
0x0c, 0xad, 0xcc, 0xbb, 0x7f, 0x0a};
-const uint8_t kV2Draft08InitialSalt[] = {
+const uint8_t kRFCv2InitialSalt[] = {
0x0d, 0xed, 0xe3, 0xde, 0xf7, 0x00, 0xa6, 0xdb, 0x81, 0x93,
0x81, 0xbe, 0x6e, 0x26, 0x9d, 0xcb, 0xf9, 0xbd, 0x2e, 0xd9,
};
@@ -174,9 +174,9 @@
size_t* out_len) {
static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync with initial encryption salts");
- if (version == ParsedQuicVersion::V2Draft08()) {
- *out_len = ABSL_ARRAYSIZE(kV2Draft08InitialSalt);
- return kV2Draft08InitialSalt;
+ if (version == ParsedQuicVersion::RFCv2()) {
+ *out_len = ABSL_ARRAYSIZE(kRFCv2InitialSalt);
+ return kRFCv2InitialSalt;
} else if (version == ParsedQuicVersion::RFCv1()) {
*out_len = ABSL_ARRAYSIZE(kRFCv1InitialSalt);
return kRFCv1InitialSalt;
@@ -212,10 +212,10 @@
0xe3, 0x68, 0xc8, 0x4e};
const uint8_t kRFCv1RetryIntegrityNonce[] = {
0x46, 0x15, 0x99, 0xd3, 0x5d, 0x63, 0x2b, 0xf2, 0x23, 0x98, 0x25, 0xbb};
-const uint8_t kV2Draft08RetryIntegrityKey[] = {
- 0x8f, 0xb4, 0xb0, 0x1b, 0x56, 0xac, 0x48, 0xe2,
- 0x60, 0xfb, 0xcb, 0xce, 0xad, 0x7c, 0xcc, 0x92};
-const uint8_t kV2Draft08RetryIntegrityNonce[] = {
+const uint8_t kRFCv2RetryIntegrityKey[] = {0x8f, 0xb4, 0xb0, 0x1b, 0x56, 0xac,
+ 0x48, 0xe2, 0x60, 0xfb, 0xcb, 0xce,
+ 0xad, 0x7c, 0xcc, 0x92};
+const uint8_t kRFCv2RetryIntegrityNonce[] = {
0xd8, 0x69, 0x69, 0xbc, 0x2d, 0x7c, 0x6d, 0x99, 0x90, 0xef, 0xb0, 0x4a};
// Retry integrity key used by ParsedQuicVersion::ReservedForNegotiation().
const uint8_t kReservedForNegotiationRetryIntegrityKey[] = {
@@ -237,13 +237,13 @@
<< "Attempted to get retry integrity keys for invalid version "
<< version;
return false;
- } else if (version == ParsedQuicVersion::V2Draft08()) {
+ } else if (version == ParsedQuicVersion::RFCv2()) {
*key = absl::string_view(
- reinterpret_cast<const char*>(kV2Draft08RetryIntegrityKey),
- ABSL_ARRAYSIZE(kV2Draft08RetryIntegrityKey));
+ reinterpret_cast<const char*>(kRFCv2RetryIntegrityKey),
+ ABSL_ARRAYSIZE(kRFCv2RetryIntegrityKey));
*nonce = absl::string_view(
- reinterpret_cast<const char*>(kV2Draft08RetryIntegrityNonce),
- ABSL_ARRAYSIZE(kV2Draft08RetryIntegrityNonce));
+ reinterpret_cast<const char*>(kRFCv2RetryIntegrityNonce),
+ ABSL_ARRAYSIZE(kRFCv2RetryIntegrityNonce));
return true;
} else if (version == ParsedQuicVersion::RFCv1()) {
*key = absl::string_view(
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index 46f1615..54b671a 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -10117,7 +10117,7 @@
uint8_t* retry_packet;
size_t retry_packet_length;
- if (version() == ParsedQuicVersion::V2Draft08()) {
+ if (version() == ParsedQuicVersion::RFCv2()) {
retry_packet = retry_packet_rfcv2;
retry_packet_length = ABSL_ARRAYSIZE(retry_packet_rfcv2);
} else if (version() == ParsedQuicVersion::RFCv1()) {
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index 591e87c..9b8813e 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -91,8 +91,8 @@
QUIC_FLAG(quic_restart_flag_quic_receive_ecn, true)
// When true, sends QUIC packets marked ECT(1).
QUIC_FLAG(quic_reloadable_flag_quic_send_ect1, false)
-// When true, support draft-ietf-quic-v2-08
-QUIC_FLAG(quic_reloadable_flag_quic_enable_version_2_draft_08, false)
+// When true, support RFC9369.
+QUIC_FLAG(quic_reloadable_flag_quic_enable_version_rfcv2, false)
// When true, the BB2U copt causes BBR2 to wait two rounds with out draining the queue before exiting PROBE_UP and BB2S has the same effect in STARTUP.
QUIC_FLAG(quic_reloadable_flag_quic_bbr2_probe_two_rounds, true)
// When true, the BBHI copt causes QUIC BBRv2 to use a simpler algorithm for raising inflight_hi in PROBE_UP.
diff --git a/quiche/quic/core/quic_version_manager.cc b/quiche/quic/core/quic_version_manager.cc
index 91404ed..77755b4 100644
--- a/quiche/quic/core/quic_version_manager.cc
+++ b/quiche/quic/core/quic_version_manager.cc
@@ -39,7 +39,7 @@
static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
if (enable_version_2_draft_08_ !=
- GetQuicReloadableFlag(quic_enable_version_2_draft_08) ||
+ GetQuicReloadableFlag(quic_enable_version_rfcv2) ||
disable_version_rfcv1_ !=
GetQuicReloadableFlag(quic_disable_version_rfcv1) ||
disable_version_draft_29_ !=
@@ -49,7 +49,7 @@
disable_version_q046_ !=
GetQuicReloadableFlag(quic_disable_version_q046)) {
enable_version_2_draft_08_ =
- GetQuicReloadableFlag(quic_enable_version_2_draft_08);
+ GetQuicReloadableFlag(quic_enable_version_rfcv2);
disable_version_rfcv1_ = GetQuicReloadableFlag(quic_disable_version_rfcv1);
disable_version_draft_29_ =
GetQuicReloadableFlag(quic_disable_version_draft_29);
diff --git a/quiche/quic/core/quic_version_manager_test.cc b/quiche/quic/core/quic_version_manager_test.cc
index d9ae2b6..5ff2781 100644
--- a/quiche/quic/core/quic_version_manager_test.cc
+++ b/quiche/quic/core/quic_version_manager_test.cc
@@ -23,7 +23,7 @@
for (const ParsedQuicVersion& version : AllSupportedVersions()) {
QuicEnableVersion(version);
}
- QuicDisableVersion(ParsedQuicVersion::V2Draft08());
+ QuicDisableVersion(ParsedQuicVersion::RFCv2());
QuicDisableVersion(ParsedQuicVersion::RFCv1());
QuicDisableVersion(ParsedQuicVersion::Draft29());
QuicVersionManager manager(AllSupportedVersions());
@@ -63,9 +63,9 @@
EXPECT_THAT(manager.GetSupportedAlpns(),
ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046"));
- QuicEnableVersion(ParsedQuicVersion::V2Draft08());
+ QuicEnableVersion(ParsedQuicVersion::RFCv2());
expected_parsed_versions.insert(expected_parsed_versions.begin(),
- ParsedQuicVersion::V2Draft08());
+ ParsedQuicVersion::RFCv2());
EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
manager.GetSupportedVersions());
diff --git a/quiche/quic/core/quic_versions.cc b/quiche/quic/core/quic_versions.cc
index fd3f6af..e14f06e 100644
--- a/quiche/quic/core/quic_versions.cc
+++ b/quiche/quic/core/quic_versions.cc
@@ -40,8 +40,8 @@
"Supported versions out of sync");
const bool enable = should_enable;
const bool disable = !should_enable;
- if (version == ParsedQuicVersion::V2Draft08()) {
- SetQuicReloadableFlag(quic_enable_version_2_draft_08, enable);
+ if (version == ParsedQuicVersion::RFCv2()) {
+ SetQuicReloadableFlag(quic_enable_version_rfcv2, enable);
} else if (version == ParsedQuicVersion::RFCv1()) {
SetQuicReloadableFlag(quic_disable_version_rfcv1, disable);
} else if (version == ParsedQuicVersion::Draft29()) {
@@ -168,12 +168,12 @@
bool ParsedQuicVersion::UsesV2PacketTypes() const {
QUICHE_DCHECK(IsKnown());
- return transport_version == QUIC_VERSION_IETF_2_DRAFT_08;
+ return transport_version == QUIC_VERSION_IETF_RFC_V2;
}
bool ParsedQuicVersion::AlpnDeferToRFCv1() const {
QUICHE_DCHECK(IsKnown());
- return transport_version == QUIC_VERSION_IETF_2_DRAFT_08;
+ return transport_version == QUIC_VERSION_IETF_RFC_V2;
}
bool VersionHasLengthPrefixedConnectionIds(
@@ -213,7 +213,7 @@
QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) {
static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- if (parsed_version == ParsedQuicVersion::V2Draft08()) {
+ if (parsed_version == ParsedQuicVersion::RFCv2()) {
return MakeVersionLabel(0x6b, 0x33, 0x43, 0xcf);
} else if (parsed_version == ParsedQuicVersion::RFCv1()) {
return MakeVersionLabel(0x00, 0x00, 0x00, 0x01);
@@ -415,8 +415,8 @@
ParsedQuicVersionVector filtered_versions;
filtered_versions.reserve(versions.size());
for (const ParsedQuicVersion& version : versions) {
- if (version == ParsedQuicVersion::V2Draft08()) {
- if (GetQuicReloadableFlag(quic_enable_version_2_draft_08)) {
+ if (version == ParsedQuicVersion::RFCv2()) {
+ if (GetQuicReloadableFlag(quic_enable_version_rfcv2)) {
filtered_versions.push_back(version);
}
} else if (version == ParsedQuicVersion::RFCv1()) {
@@ -500,7 +500,7 @@
RETURN_STRING_LITERAL(QUIC_VERSION_50);
RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_29);
RETURN_STRING_LITERAL(QUIC_VERSION_IETF_RFC_V1);
- RETURN_STRING_LITERAL(QUIC_VERSION_IETF_2_DRAFT_08);
+ RETURN_STRING_LITERAL(QUIC_VERSION_IETF_RFC_V2);
RETURN_STRING_LITERAL(QUIC_VERSION_UNSUPPORTED);
RETURN_STRING_LITERAL(QUIC_VERSION_RESERVED_FOR_NEGOTIATION);
}
@@ -523,9 +523,9 @@
"Supported versions out of sync");
if (version == UnsupportedQuicVersion()) {
return "0";
- } else if (version == ParsedQuicVersion::V2Draft08()) {
+ } else if (version == ParsedQuicVersion::RFCv2()) {
QUICHE_DCHECK(version.UsesHttp3());
- return "V2Draft08";
+ return "RFCv2";
} else if (version == ParsedQuicVersion::RFCv1()) {
QUICHE_DCHECK(version.UsesHttp3());
return "RFCv1";
@@ -613,7 +613,7 @@
}
std::string AlpnForVersion(ParsedQuicVersion parsed_version) {
- if (parsed_version == ParsedQuicVersion::V2Draft08()) {
+ if (parsed_version == ParsedQuicVersion::RFCv2()) {
return "h3";
} else if (parsed_version == ParsedQuicVersion::RFCv1()) {
return "h3";
diff --git a/quiche/quic/core/quic_versions.h b/quiche/quic/core/quic_versions.h
index 8129d9a..7cd31be 100644
--- a/quiche/quic/core/quic_versions.h
+++ b/quiche/quic/core/quic_versions.h
@@ -125,7 +125,7 @@
QUIC_VERSION_IETF_DRAFT_29 = 73, // draft-ietf-quic-transport-29.
QUIC_VERSION_IETF_RFC_V1 = 80, // RFC 9000.
// Number 81 used to represent draft-ietf-quic-v2-01.
- QUIC_VERSION_IETF_2_DRAFT_08 = 82, // draft-ietf-quic-v2-08.
+ QUIC_VERSION_IETF_RFC_V2 = 82, // RFC 9369.
// Version 99 was a dumping ground for IETF QUIC changes which were not yet
// ready for production between 2018-02 and 2020-02.
@@ -173,7 +173,7 @@
QuicTransportVersion transport_version) {
bool transport_version_is_valid = false;
constexpr QuicTransportVersion valid_transport_versions[] = {
- QUIC_VERSION_IETF_2_DRAFT_08,
+ QUIC_VERSION_IETF_RFC_V2,
QUIC_VERSION_IETF_RFC_V1,
QUIC_VERSION_IETF_DRAFT_29,
QUIC_VERSION_50,
@@ -198,7 +198,7 @@
transport_version != QUIC_VERSION_RESERVED_FOR_NEGOTIATION &&
transport_version != QUIC_VERSION_IETF_DRAFT_29 &&
transport_version != QUIC_VERSION_IETF_RFC_V1 &&
- transport_version != QUIC_VERSION_IETF_2_DRAFT_08;
+ transport_version != QUIC_VERSION_IETF_RFC_V2;
case PROTOCOL_TLS1_3:
return transport_version != QUIC_VERSION_UNSUPPORTED &&
transport_version != QUIC_VERSION_50 &&
@@ -248,8 +248,8 @@
transport_version != other.transport_version;
}
- static constexpr ParsedQuicVersion V2Draft08() {
- return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_2_DRAFT_08);
+ static constexpr ParsedQuicVersion RFCv2() {
+ return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_RFC_V2);
}
static constexpr ParsedQuicVersion RFCv1() {
@@ -400,8 +400,8 @@
constexpr std::array<ParsedQuicVersion, 5> SupportedVersions() {
return {
- ParsedQuicVersion::V2Draft08(), ParsedQuicVersion::RFCv1(),
- ParsedQuicVersion::Draft29(), ParsedQuicVersion::Q050(),
+ ParsedQuicVersion::RFCv2(), ParsedQuicVersion::RFCv1(),
+ ParsedQuicVersion::Draft29(), ParsedQuicVersion::Q050(),
ParsedQuicVersion::Q046(),
};
}
diff --git a/quiche/quic/core/quic_versions_test.cc b/quiche/quic/core/quic_versions_test.cc
index 49335e3..bf0078c 100644
--- a/quiche/quic/core/quic_versions_test.cc
+++ b/quiche/quic/core/quic_versions_test.cc
@@ -108,9 +108,9 @@
ParseQuicVersionLabel(MakeVersionLabel(0xff, 0x00, 0x00, 0x1d)));
EXPECT_EQ(ParsedQuicVersion::RFCv1(),
ParseQuicVersionLabel(MakeVersionLabel(0x00, 0x00, 0x00, 0x01)));
- EXPECT_EQ(ParsedQuicVersion::V2Draft08(),
+ EXPECT_EQ(ParsedQuicVersion::RFCv2(),
ParseQuicVersionLabel(MakeVersionLabel(0x6b, 0x33, 0x43, 0xcf)));
- EXPECT_EQ((ParsedQuicVersionVector{ParsedQuicVersion::V2Draft08(),
+ EXPECT_EQ((ParsedQuicVersionVector{ParsedQuicVersion::RFCv2(),
ParsedQuicVersion::RFCv1(),
ParsedQuicVersion::Draft29()}),
ParseQuicVersionLabelVector(QuicVersionLabelVector{
@@ -223,8 +223,7 @@
EXPECT_EQ(0x51303530u, CreateQuicVersionLabel(ParsedQuicVersion::Q050()));
EXPECT_EQ(0xff00001du, CreateQuicVersionLabel(ParsedQuicVersion::Draft29()));
EXPECT_EQ(0x00000001u, CreateQuicVersionLabel(ParsedQuicVersion::RFCv1()));
- EXPECT_EQ(0x6b3343cfu,
- CreateQuicVersionLabel(ParsedQuicVersion::V2Draft08()));
+ EXPECT_EQ(0x6b3343cfu, CreateQuicVersionLabel(ParsedQuicVersion::RFCv2()));
// Make sure the negotiation reserved version is in the IETF reserved space.
EXPECT_EQ(
@@ -250,7 +249,7 @@
EXPECT_EQ("00000001", QuicVersionLabelToString(CreateQuicVersionLabel(
ParsedQuicVersion::RFCv1())));
EXPECT_EQ("6b3343cf", QuicVersionLabelToString(CreateQuicVersionLabel(
- ParsedQuicVersion::V2Draft08())));
+ ParsedQuicVersion::RFCv2())));
QuicVersionLabelVector version_labels = {
MakeVersionLabel('Q', '0', '3', '5'),
@@ -284,7 +283,7 @@
ParseQuicVersionLabelString("ff00001d"));
EXPECT_EQ(ParsedQuicVersion::RFCv1(),
ParseQuicVersionLabelString("00000001"));
- EXPECT_EQ(ParsedQuicVersion::V2Draft08(),
+ EXPECT_EQ(ParsedQuicVersion::RFCv2(),
ParseQuicVersionLabelString("6b3343cf"));
// Sanity check that a variety of other serialization formats are ignored.
@@ -341,8 +340,7 @@
EXPECT_EQ("Q050", ParsedQuicVersionToString(ParsedQuicVersion::Q050()));
EXPECT_EQ("draft29", ParsedQuicVersionToString(ParsedQuicVersion::Draft29()));
EXPECT_EQ("RFCv1", ParsedQuicVersionToString(ParsedQuicVersion::RFCv1()));
- EXPECT_EQ("V2Draft08",
- ParsedQuicVersionToString(ParsedQuicVersion::V2Draft08()));
+ EXPECT_EQ("RFCv2", ParsedQuicVersionToString(ParsedQuicVersion::RFCv2()));
ParsedQuicVersionVector versions_vector = {ParsedQuicVersion::Q046()};
EXPECT_EQ("Q046", ParsedQuicVersionVectorToString(versions_vector));
@@ -415,7 +413,7 @@
EXPECT_EQ(QUIC_VERSION_50, 50);
EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_29, 73);
EXPECT_EQ(QUIC_VERSION_IETF_RFC_V1, 80);
- EXPECT_EQ(QUIC_VERSION_IETF_2_DRAFT_08, 82);
+ EXPECT_EQ(QUIC_VERSION_IETF_RFC_V2, 82);
}
TEST(QuicVersionsTest, AlpnForVersion) {
@@ -425,7 +423,7 @@
EXPECT_EQ("h3-Q050", AlpnForVersion(ParsedQuicVersion::Q050()));
EXPECT_EQ("h3-29", AlpnForVersion(ParsedQuicVersion::Draft29()));
EXPECT_EQ("h3", AlpnForVersion(ParsedQuicVersion::RFCv1()));
- EXPECT_EQ("h3", AlpnForVersion(ParsedQuicVersion::V2Draft08()));
+ EXPECT_EQ("h3", AlpnForVersion(ParsedQuicVersion::RFCv2()));
}
TEST(QuicVersionsTest, QuicVersionEnabling) {
@@ -476,7 +474,7 @@
CreateQuicVersionLabel(version2))
<< version1 << " " << version2;
// The one pair where ALPNs are the same.
- if ((version1 != ParsedQuicVersion::V2Draft08()) &&
+ if ((version1 != ParsedQuicVersion::RFCv2()) &&
(version2 != ParsedQuicVersion::RFCv1())) {
EXPECT_NE(AlpnForVersion(version1), AlpnForVersion(version2))
<< version1 << " " << version2;