mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-09 10:00:57 +03:00
Iterate QuicVersion::MVFST
Summary: This iterates the mvfst version to be semantically equivalent to draft-27, and leaves support for the old mvfst version. The client will not yet be moved to draft-27 by default. Reviewed By: lnicco Differential Revision: D20182452 fbshipit-source-id: 1e11ad7296a6cd8d15ca5ed359d9ed82af79bb17
This commit is contained in:
committed by
Facebook Github Bot
parent
ef92376cb0
commit
d1a3652a4c
@@ -67,6 +67,7 @@ std::vector<QuicVersion> filterSupportedVersions(
|
|||||||
std::back_inserter(filteredVersions),
|
std::back_inserter(filteredVersions),
|
||||||
[](auto version) {
|
[](auto version) {
|
||||||
return version == QuicVersion::MVFST ||
|
return version == QuicVersion::MVFST ||
|
||||||
|
version == QuicVersion::MVFST_D24 ||
|
||||||
version == QuicVersion::QUIC_DRAFT ||
|
version == QuicVersion::QUIC_DRAFT ||
|
||||||
version == QuicVersion::MVFST_INVALID;
|
version == QuicVersion::MVFST_INVALID;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -183,7 +183,8 @@ enum class QuicNodeType : bool {
|
|||||||
|
|
||||||
enum class QuicVersion : uint32_t {
|
enum class QuicVersion : uint32_t {
|
||||||
VERSION_NEGOTIATION = 0x00000000,
|
VERSION_NEGOTIATION = 0x00000000,
|
||||||
MVFST = 0xfaceb001,
|
MVFST_D24 = 0xfaceb001,
|
||||||
|
MVFST = 0xfaceb002,
|
||||||
QUIC_DRAFT = 0xFF00001b, // Draft-27
|
QUIC_DRAFT = 0xFF00001b, // Draft-27
|
||||||
MVFST_INVALID = 0xfaceb00f,
|
MVFST_INVALID = 0xfaceb00f,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1072,6 +1072,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
QuicClientTransportIntegrationTest,
|
QuicClientTransportIntegrationTest,
|
||||||
::testing::Values(
|
::testing::Values(
|
||||||
TestingParams(QuicVersion::MVFST),
|
TestingParams(QuicVersion::MVFST),
|
||||||
|
TestingParams(QuicVersion::MVFST_D24),
|
||||||
TestingParams(QuicVersion::QUIC_DRAFT),
|
TestingParams(QuicVersion::QUIC_DRAFT),
|
||||||
TestingParams(QuicVersion::QUIC_DRAFT, 0)));
|
TestingParams(QuicVersion::QUIC_DRAFT, 0)));
|
||||||
|
|
||||||
|
|||||||
@@ -407,6 +407,8 @@ std::string toString(QuicVersion version) {
|
|||||||
switch (version) {
|
switch (version) {
|
||||||
case QuicVersion::VERSION_NEGOTIATION:
|
case QuicVersion::VERSION_NEGOTIATION:
|
||||||
return "VERSION_NEGOTIATION";
|
return "VERSION_NEGOTIATION";
|
||||||
|
case QuicVersion::MVFST_D24:
|
||||||
|
return "MVFST_D24";
|
||||||
case QuicVersion::MVFST:
|
case QuicVersion::MVFST:
|
||||||
return "MVFST";
|
return "MVFST";
|
||||||
case QuicVersion::QUIC_DRAFT:
|
case QuicVersion::QUIC_DRAFT:
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ class MockClock {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr QuicVersion MVFST1 = static_cast<QuicVersion>(0xfaceb002);
|
constexpr QuicVersion MVFST1 = static_cast<QuicVersion>(0xfaceb00d);
|
||||||
constexpr QuicVersion MVFST2 = static_cast<QuicVersion>(0xfaceb003);
|
constexpr QuicVersion MVFST2 = static_cast<QuicVersion>(0xfaceb00e);
|
||||||
|
|
||||||
constexpr folly::StringPiece kTestHost = "host";
|
constexpr folly::StringPiece kTestHost = "host";
|
||||||
|
|
||||||
|
|||||||
@@ -23,10 +23,14 @@ Buf FizzCryptoFactory::makeInitialTrafficSecret(
|
|||||||
auto connIdRange = folly::range(clientDestinationConnId);
|
auto connIdRange = folly::range(clientDestinationConnId);
|
||||||
folly::StringPiece salt;
|
folly::StringPiece salt;
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case QuicVersion::MVFST:
|
// Our transport version is equivalent to d-24 mostly, but we never
|
||||||
|
// updated the salt to avoid a version transition.
|
||||||
|
case QuicVersion::MVFST_D24:
|
||||||
salt = kQuicDraft22Salt;
|
salt = kQuicDraft22Salt;
|
||||||
break;
|
break;
|
||||||
|
// The salt has not changed since d-23.
|
||||||
case QuicVersion::QUIC_DRAFT:
|
case QuicVersion::QUIC_DRAFT:
|
||||||
|
case QuicVersion::MVFST:
|
||||||
salt = kQuicDraft23Salt;
|
salt = kQuicDraft23Salt;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ inline fizz::Extension encodeExtension(
|
|||||||
fizz::Extension ext;
|
fizz::Extension ext;
|
||||||
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
||||||
ext.extension_data = folly::IOBuf::create(0);
|
ext.extension_data = folly::IOBuf::create(0);
|
||||||
if (encodingVersion != QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == QuicVersion::MVFST_D24) {
|
||||||
folly::io::Appender appender(ext.extension_data.get(), 40);
|
folly::io::Appender appender(ext.extension_data.get(), 40);
|
||||||
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
||||||
} else {
|
} else {
|
||||||
@@ -69,7 +69,7 @@ inline fizz::Extension encodeExtension(
|
|||||||
fizz::Extension ext;
|
fizz::Extension ext;
|
||||||
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
||||||
ext.extension_data = folly::IOBuf::create(0);
|
ext.extension_data = folly::IOBuf::create(0);
|
||||||
if (encodingVersion != QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == QuicVersion::MVFST_D24) {
|
||||||
folly::io::Appender appender(ext.extension_data.get(), 40);
|
folly::io::Appender appender(ext.extension_data.get(), 40);
|
||||||
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
||||||
} else {
|
} else {
|
||||||
@@ -85,7 +85,7 @@ inline fizz::Extension encodeExtension(
|
|||||||
fizz::Extension ext;
|
fizz::Extension ext;
|
||||||
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
ext.extension_type = fizz::ExtensionType::quic_transport_parameters;
|
||||||
ext.extension_data = folly::IOBuf::create(0);
|
ext.extension_data = folly::IOBuf::create(0);
|
||||||
if (encodingVersion != QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == QuicVersion::MVFST_D24) {
|
||||||
folly::io::Appender appender(ext.extension_data.get(), 40);
|
folly::io::Appender appender(ext.extension_data.get(), 40);
|
||||||
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
fizz::detail::writeVector<uint16_t>(params.parameters, appender);
|
||||||
} else {
|
} else {
|
||||||
@@ -108,7 +108,7 @@ inline folly::Optional<quic::ClientTransportParameters> getClientExtension(
|
|||||||
}
|
}
|
||||||
quic::ClientTransportParameters parameters;
|
quic::ClientTransportParameters parameters;
|
||||||
folly::io::Cursor cursor(it->extension_data.get());
|
folly::io::Cursor cursor(it->extension_data.get());
|
||||||
if (encodingVersion != quic::QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == quic::QuicVersion::MVFST_D24) {
|
||||||
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
||||||
} else {
|
} else {
|
||||||
decodeVarintParams(parameters.parameters, cursor);
|
decodeVarintParams(parameters.parameters, cursor);
|
||||||
@@ -125,7 +125,7 @@ inline folly::Optional<quic::ServerTransportParameters> getServerExtension(
|
|||||||
}
|
}
|
||||||
quic::ServerTransportParameters parameters;
|
quic::ServerTransportParameters parameters;
|
||||||
folly::io::Cursor cursor(it->extension_data.get());
|
folly::io::Cursor cursor(it->extension_data.get());
|
||||||
if (encodingVersion != quic::QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == quic::QuicVersion::MVFST_D24) {
|
||||||
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
||||||
} else {
|
} else {
|
||||||
decodeVarintParams(parameters.parameters, cursor);
|
decodeVarintParams(parameters.parameters, cursor);
|
||||||
@@ -142,7 +142,7 @@ inline folly::Optional<quic::TicketTransportParameters> getTicketExtension(
|
|||||||
}
|
}
|
||||||
quic::TicketTransportParameters parameters;
|
quic::TicketTransportParameters parameters;
|
||||||
folly::io::Cursor cursor(it->extension_data.get());
|
folly::io::Cursor cursor(it->extension_data.get());
|
||||||
if (encodingVersion != quic::QuicVersion::QUIC_DRAFT) {
|
if (encodingVersion == quic::QuicVersion::MVFST_D24) {
|
||||||
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
detail::readVector<uint16_t>(parameters.parameters, cursor);
|
||||||
} else {
|
} else {
|
||||||
decodeVarintParams(parameters.parameters, cursor);
|
decodeVarintParams(parameters.parameters, cursor);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ StringPiece ticketParamsD27{"ffa5000604049d7f3e7d"};
|
|||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestClientParamsD24) {
|
TEST_F(QuicExtensionsTest, TestClientParamsD24) {
|
||||||
auto exts = getExtensions(clientParamsD24);
|
auto exts = getExtensions(clientParamsD24);
|
||||||
auto ext = getClientExtension(exts, QuicVersion::MVFST);
|
auto ext = getClientExtension(exts, QuicVersion::MVFST_D24);
|
||||||
EXPECT_EQ(ext->parameters.size(), 1);
|
EXPECT_EQ(ext->parameters.size(), 1);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
|
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
|
||||||
@@ -68,7 +68,7 @@ TEST_F(QuicExtensionsTest, TestClientParamsD24) {
|
|||||||
*getIntegerParameter(
|
*getIntegerParameter(
|
||||||
TransportParameterId::initial_max_data, ext->parameters),
|
TransportParameterId::initial_max_data, ext->parameters),
|
||||||
494878333ULL);
|
494878333ULL);
|
||||||
checkEncode(std::move(*ext), clientParamsD24, QuicVersion::MVFST);
|
checkEncode(std::move(*ext), clientParamsD24, QuicVersion::MVFST_D24);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestClientParamsD27) {
|
TEST_F(QuicExtensionsTest, TestClientParamsD27) {
|
||||||
@@ -86,7 +86,7 @@ TEST_F(QuicExtensionsTest, TestClientParamsD27) {
|
|||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestServerParamsD24) {
|
TEST_F(QuicExtensionsTest, TestServerParamsD24) {
|
||||||
auto exts = getExtensions(serverParamsD24);
|
auto exts = getExtensions(serverParamsD24);
|
||||||
auto ext = getServerExtension(exts, QuicVersion::MVFST);
|
auto ext = getServerExtension(exts, QuicVersion::MVFST_D24);
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
|
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
|
||||||
@@ -94,7 +94,7 @@ TEST_F(QuicExtensionsTest, TestServerParamsD24) {
|
|||||||
*getIntegerParameter(
|
*getIntegerParameter(
|
||||||
TransportParameterId::initial_max_data, ext->parameters),
|
TransportParameterId::initial_max_data, ext->parameters),
|
||||||
494878333ULL);
|
494878333ULL);
|
||||||
checkEncode(std::move(*ext), serverParamsD24, QuicVersion::MVFST);
|
checkEncode(std::move(*ext), serverParamsD24, QuicVersion::MVFST_D24);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestServerParamsD27) {
|
TEST_F(QuicExtensionsTest, TestServerParamsD27) {
|
||||||
@@ -112,7 +112,7 @@ TEST_F(QuicExtensionsTest, TestServerParamsD27) {
|
|||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestTicketParamsD24) {
|
TEST_F(QuicExtensionsTest, TestTicketParamsD24) {
|
||||||
auto exts = getExtensions(ticketParamsD24);
|
auto exts = getExtensions(ticketParamsD24);
|
||||||
auto ext = getTicketExtension(exts, QuicVersion::MVFST);
|
auto ext = getTicketExtension(exts, QuicVersion::MVFST_D24);
|
||||||
|
|
||||||
EXPECT_EQ(ext->parameters.size(), 1);
|
EXPECT_EQ(ext->parameters.size(), 1);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
@@ -121,7 +121,7 @@ TEST_F(QuicExtensionsTest, TestTicketParamsD24) {
|
|||||||
*getIntegerParameter(
|
*getIntegerParameter(
|
||||||
TransportParameterId::initial_max_data, ext->parameters),
|
TransportParameterId::initial_max_data, ext->parameters),
|
||||||
494878333ULL);
|
494878333ULL);
|
||||||
checkEncode(std::move(*ext), ticketParamsD24, QuicVersion::MVFST);
|
checkEncode(std::move(*ext), ticketParamsD24, QuicVersion::MVFST_D24);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicExtensionsTest, TestTicketParamsD27) {
|
TEST_F(QuicExtensionsTest, TestTicketParamsD27) {
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ class QuicServer : public QuicServerWorker::WorkerCallback,
|
|||||||
const std::vector<folly::EventBase*>& evbs);
|
const std::vector<folly::EventBase*>& evbs);
|
||||||
|
|
||||||
std::vector<QuicVersion> supportedVersions_{
|
std::vector<QuicVersion> supportedVersions_{
|
||||||
{QuicVersion::MVFST, QuicVersion::QUIC_DRAFT}};
|
{QuicVersion::MVFST, QuicVersion::MVFST_D24, QuicVersion::QUIC_DRAFT}};
|
||||||
std::atomic<bool> shutdown_{true};
|
std::atomic<bool> shutdown_{true};
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx_;
|
std::shared_ptr<const fizz::server::FizzServerContext> ctx_;
|
||||||
TransportSettings transportSettings_;
|
TransportSettings transportSettings_;
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ void updateHandshakeState(QuicServerConnectionState& conn) {
|
|||||||
auto doneTime = conn.readCodec->getHandshakeDoneTime();
|
auto doneTime = conn.readCodec->getHandshakeDoneTime();
|
||||||
if (!doneTime) {
|
if (!doneTime) {
|
||||||
conn.readCodec->onHandshakeDone(Clock::now());
|
conn.readCodec->onHandshakeDone(Clock::now());
|
||||||
if (conn.version == QuicVersion::QUIC_DRAFT) {
|
if (conn.version != QuicVersion::MVFST_D24) {
|
||||||
sendSimpleFrame(conn, HandshakeDoneFrame());
|
sendSimpleFrame(conn, HandshakeDoneFrame());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ struct QuicServerConnectionState : public QuicConnectionStateBase {
|
|||||||
// TODO: this is wrong, it should be the handshake finish time. But i need
|
// TODO: this is wrong, it should be the handshake finish time. But i need
|
||||||
// a relatively sane time now to make the timestamps all sane.
|
// a relatively sane time now to make the timestamps all sane.
|
||||||
connectionTime = Clock::now();
|
connectionTime = Clock::now();
|
||||||
supportedVersions =
|
supportedVersions = std::vector<QuicVersion>{
|
||||||
std::vector<QuicVersion>{{QuicVersion::MVFST, QuicVersion::QUIC_DRAFT}};
|
{QuicVersion::MVFST, QuicVersion::MVFST_D24, QuicVersion::QUIC_DRAFT}};
|
||||||
originalVersion = QuicVersion::MVFST;
|
originalVersion = QuicVersion::MVFST;
|
||||||
serverHandshakeLayer = new ServerHandshake(this);
|
serverHandshakeLayer = new ServerHandshake(this);
|
||||||
handshakeLayer.reset(serverHandshakeLayer);
|
handshakeLayer.reset(serverHandshakeLayer);
|
||||||
|
|||||||
@@ -833,6 +833,7 @@ TEST_F(QuicServerTransportTest, IdleTimerNotResetWhenDataOutstanding) {
|
|||||||
// Clear the receivedNewPacketBeforeWrite flag, since we may reveice from
|
// Clear the receivedNewPacketBeforeWrite flag, since we may reveice from
|
||||||
// client during the SetUp of the test case.
|
// client during the SetUp of the test case.
|
||||||
server->getNonConstConn().receivedNewPacketBeforeWrite = false;
|
server->getNonConstConn().receivedNewPacketBeforeWrite = false;
|
||||||
|
server->getNonConstConn().outstandingPackets.clear();
|
||||||
StreamId streamId = server->createBidirectionalStream().value();
|
StreamId streamId = server->createBidirectionalStream().value();
|
||||||
|
|
||||||
server->idleTimeout().cancelTimeout();
|
server->idleTimeout().cancelTimeout();
|
||||||
|
|||||||
Reference in New Issue
Block a user