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;