Control client-side MinAckDelay option with AFIA connection option. PiperOrigin-RevId: 778564306
diff --git a/quiche/quic/core/crypto/crypto_protocol.h b/quiche/quic/core/crypto/crypto_protocol.h index 9d1dbe2..c8dd332 100644 --- a/quiche/quic/core/crypto/crypto_protocol.h +++ b/quiche/quic/core/crypto/crypto_protocol.h
@@ -217,6 +217,8 @@ // AckFrequencyFrame. DEFINE_STATIC_QUIC_TAG(AFF2); // Send AckFrequencyFrame upon // handshake completion. +DEFINE_STATIC_QUIC_TAG(AFIA); // Send MinAckDelay transport parameter to allow + // receipt of ACK_FREQUENCY and IMMEDIATE_ACK DEFINE_STATIC_QUIC_TAG(SSLR); // Slow Start Large Reduction. DEFINE_STATIC_QUIC_TAG(NPRR); // Pace at unity instead of PRR DEFINE_STATIC_QUIC_TAG(5RTO); // Close connection on 5 RTOs
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc index be6aa0a..17743e5 100644 --- a/quiche/quic/core/quic_session.cc +++ b/quiche/quic/core/quic_session.cc
@@ -179,6 +179,10 @@ } else if (config_.HasClientSentConnectionOption(kCHP2, perspective_)) { config_.SetDiscardLengthToSend(kDefaultMaxPacketSize * 2); } + if (config_.HasClientRequestedIndependentOption(kAFIA, perspective_) && + connection_->version().HasIetfQuicFrames()) { + config_.SetMinAckDelayDraft10Ms(kDefaultMinAckDelayTimeMs); + } } else if (GetQuicReloadableFlag(quic_receive_ack_frequency) && connection_->version().HasIetfQuicFrames()) { config_.SetMinAckDelayDraft10Ms(kDefaultMinAckDelayTimeMs);
diff --git a/quiche/quic/core/quic_session_test.cc b/quiche/quic/core/quic_session_test.cc index 3ae99ee..30480eb 100644 --- a/quiche/quic/core/quic_session_test.cc +++ b/quiche/quic/core/quic_session_test.cc
@@ -2453,6 +2453,17 @@ EXPECT_TRUE(session_.CanOpenNextOutgoingBidirectionalStream()); } +TEST_P(QuicSessionTestClient, MinAckDelaySet) { + // IETF QUIC only feature. + if (!VersionHasIetfQuicFrames(transport_version())) { + return; + } + session_.config()->SetClientConnectionOptions({kAFIA}); + session_.Initialize(); + EXPECT_EQ(session_.config()->GetMinAckDelayDraft10ToSendMs(), + kDefaultMinAckDelayTimeMs); +} + TEST_P(QuicSessionTestServer, ZombieStreams) { CompleteHandshake(); TestStream* stream2 = session_.CreateOutgoingBidirectionalStream();