diff --git a/quic/QuicConstants.h b/quic/QuicConstants.h index 374faa788..1f77a22a8 100644 --- a/quic/QuicConstants.h +++ b/quic/QuicConstants.h @@ -341,6 +341,7 @@ enum class QuicVersion : uint32_t { MVFST = 0xfaceb002, QUIC_V1 = 0x00000001, QUIC_V1_ALIAS = 0xfaceb003, + // MVFST_EXPERIMENTAL used to set initial congestion window MVFST_EXPERIMENTAL = 0xfaceb00e, // Experimental alias for MVFST MVFST_ALIAS = 0xfaceb010, MVFST_INVALID = 0xfaceb00f, diff --git a/quic/server/QuicServerWorker.cpp b/quic/server/QuicServerWorker.cpp index 58194b586..2e2e5fe56 100644 --- a/quic/server/QuicServerWorker.cpp +++ b/quic/server/QuicServerWorker.cpp @@ -650,6 +650,9 @@ QuicServerTransport::Ptr QuicServerWorker::makeTransport( } trans->setCongestionControllerFactory(ccFactory_); trans->setTransportStatsCallback(statsCallback_.get()); // ok if nullptr + if (quicVersion == QuicVersion::MVFST_EXPERIMENTAL) { + transportSettings_.initCwndInMss = 35; + } auto transportSettings = transportSettingsOverrideFn_ ? transportSettingsOverrideFn_( diff --git a/quic/server/state/ServerStateMachine.cpp b/quic/server/state/ServerStateMachine.cpp index 169bb5ed5..d7f08f4d0 100644 --- a/quic/server/state/ServerStateMachine.cpp +++ b/quic/server/state/ServerStateMachine.cpp @@ -93,6 +93,8 @@ void recoverOrResetCongestionAndRttState( void maybeSetExperimentalSettings(QuicServerConnectionState& conn) { // no-op versions if (conn.version == QuicVersion::MVFST_EXPERIMENTAL) { + // MVFST_EXPERIMENTAL is used to set initCwnd + // QuicServerWorker.cpp before CC is initialized. } else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL2) { } else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL3) { }