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