Add `--qbone_max_pacing_kbps` flag to the QBONE bonnet. When specified, this value will be passed through at tunnel creation to `QuicConnection::SetMaxPacingRate`. If left at the default (zero) there is no change in behavior. Protected by client-side only flag --qbone_max_pacing_kbps. PiperOrigin-RevId: 561464923
diff --git a/quiche/quic/qbone/qbone_client.cc b/quiche/quic/qbone/qbone_client.cc index f827847..38951f9 100644 --- a/quiche/quic/qbone/qbone_client.cc +++ b/quiche/quic/qbone/qbone_client.cc
@@ -9,6 +9,7 @@ #include "absl/strings/string_view.h" #include "quiche/quic/core/io/quic_event_loop.h" +#include "quiche/quic/core/quic_bandwidth.h" #include "quiche/quic/core/quic_default_connection_helper.h" #include "quiche/quic/platform/api/quic_testvalue.h" #include "quiche/quic/tools/quic_client_default_network_helper.h" @@ -39,7 +40,8 @@ std::move(proof_verifier), nullptr), qbone_writer_(qbone_writer), qbone_handler_(qbone_handler), - session_owner_(session_owner) { + session_owner_(session_owner), + max_pacing_rate_(QuicBandwidth::Zero()) { set_server_address(server_address); crypto_config()->set_alpn("qbone"); } @@ -93,6 +95,10 @@ std::unique_ptr<QuicSession> QboneClient::CreateQuicClientSession( const ParsedQuicVersionVector& supported_versions, QuicConnection* connection) { + if (max_pacing_rate() > quic::QuicBandwidth::Zero()) { + QUIC_LOG(INFO) << "Setting max pacing rate to " << max_pacing_rate(); + connection->SetMaxPacingRate(max_pacing_rate()); + } return std::make_unique<QboneClientSessionWithConnection>( connection, crypto_config(), session_owner(), *config(), supported_versions, server_id(), qbone_writer_, qbone_handler_);
diff --git a/quiche/quic/qbone/qbone_client.h b/quiche/quic/qbone/qbone_client.h index cda71da..d37ef69 100644 --- a/quiche/quic/qbone/qbone_client.h +++ b/quiche/quic/qbone/qbone_client.h
@@ -7,6 +7,7 @@ #include "absl/strings/string_view.h" #include "quiche/quic/core/io/quic_event_loop.h" +#include "quiche/quic/core/quic_bandwidth.h" #include "quiche/quic/qbone/qbone_client_interface.h" #include "quiche/quic/qbone/qbone_client_session.h" #include "quiche/quic/qbone/qbone_packet_writer.h" @@ -37,6 +38,12 @@ bool EarlyDataAccepted() override; bool ReceivedInchoateReject() override; + void set_max_pacing_rate(QuicBandwidth max_pacing_rate) { + max_pacing_rate_ = max_pacing_rate; + } + + QuicBandwidth max_pacing_rate() const { return max_pacing_rate_; } + protected: int GetNumSentClientHellosFromSession() override; int GetNumReceivedServerConfigUpdatesFromSession() override; @@ -67,6 +74,9 @@ QboneClientControlStream::Handler* qbone_handler_; QuicSession::Visitor* session_owner_; + + // When nonzero, the pacing rate set with`QuicConnection::SetMaxPacingRate`. + QuicBandwidth max_pacing_rate_; }; } // namespace quic