This is an automated email from the ASF dual-hosted git repository.

duke8253 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 0776a0d8ba add new config option to support CUBIC (#10888)
0776a0d8ba is described below

commit 0776a0d8ba40e5392fc6d7fa60beb11bbdc96267
Author: Fei Deng <f...@yahooinc.com>
AuthorDate: Fri Dec 1 11:34:49 2023 -0500

    add new config option to support CUBIC (#10888)
---
 doc/admin-guide/files/records.yaml.en.rst | 11 +++++++++++
 include/iocore/net/quic/QUICConfig.h      |  5 +++++
 src/iocore/net/QUICNetProcessor.cc        |  4 +---
 src/iocore/net/quic/QUICConfig.cc         | 14 ++++++++++++++
 src/records/RecordsConfig.cc              |  2 ++
 5 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/doc/admin-guide/files/records.yaml.en.rst 
b/doc/admin-guide/files/records.yaml.en.rst
index fc0415eaa4..4dc2b8ae06 100644
--- a/doc/admin-guide/files/records.yaml.en.rst
+++ b/doc/admin-guide/files/records.yaml.en.rst
@@ -4785,6 +4785,17 @@ removed in the future without prior notice.
 
    Disables HTTP/0.9 over QUIC by default.
 
+.. ts:cv:: CONFIG proxy.config.quic.cc_algorithm INT 0
+
+   Specified the congestion control algorithm.
+
+   ===== ======================================================================
+   Value Description
+   ===== ======================================================================
+   ``0`` RENO (default).
+   ``1`` CUBIC.
+   ===== ======================================================================
+
 
 UDP Configuration
 =====================
diff --git a/include/iocore/net/quic/QUICConfig.h 
b/include/iocore/net/quic/QUICConfig.h
index a48a24c583..ca77da8c4b 100644
--- a/include/iocore/net/quic/QUICConfig.h
+++ b/include/iocore/net/quic/QUICConfig.h
@@ -24,6 +24,7 @@
 #pragma once
 
 #include <openssl/ssl.h>
+#include <quiche.h>
 
 #include "iocore/eventsystem/ConfigProcessor.h"
 #include "../../../../src/iocore/net/P_SSLCertLookup.h"
@@ -87,6 +88,8 @@ public:
 
   bool disable_http_0_9() const;
 
+  quiche_cc_algorithm get_cc_algorithm() const;
+
 private:
   static int _connection_table_size;
   // TODO: make configurable
@@ -140,6 +143,8 @@ private:
   uint32_t _max_send_udp_payload_size_out = 0;
 
   uint32_t _disable_http_0_9 = 1;
+
+  uint32_t _cc_algorithm = 0;
 };
 
 class QUICConfig
diff --git a/src/iocore/net/QUICNetProcessor.cc 
b/src/iocore/net/QUICNetProcessor.cc
index 57322f504a..57fe6eeac6 100644
--- a/src/iocore/net/QUICNetProcessor.cc
+++ b/src/iocore/net/QUICNetProcessor.cc
@@ -34,8 +34,6 @@
 #include "iocore/net/quic/QUICConfig.h"
 #include "iocore/net/QUICMultiCertConfigLoader.h"
 
-#include <quiche.h>
-
 //
 // Global Data
 //
@@ -99,7 +97,7 @@ QUICNetProcessor::start(int, size_t stacksize)
   quiche_config_set_initial_max_streams_uni(this->_quiche_config, 
params->initial_max_streams_uni_in());
   quiche_config_set_disable_active_migration(this->_quiche_config, 
params->disable_active_migration());
   quiche_config_set_active_connection_id_limit(this->_quiche_config, 
params->active_cid_limit_in());
-  quiche_config_set_cc_algorithm(this->_quiche_config, QUICHE_CC_RENO);
+  quiche_config_set_cc_algorithm(this->_quiche_config, 
params->get_cc_algorithm());
 
 #ifdef TLS1_3_VERSION_DRAFT_TXT
   // FIXME: remove this when TLS1_3_VERSION_DRAFT_TXT is removed
diff --git a/src/iocore/net/quic/QUICConfig.cc 
b/src/iocore/net/quic/QUICConfig.cc
index cf6c8bc454..23d3c50b58 100644
--- a/src/iocore/net/quic/QUICConfig.cc
+++ b/src/iocore/net/quic/QUICConfig.cc
@@ -161,6 +161,7 @@ QUICConfigParams::initialize()
   REC_EstablishStaticConfigInt32U(this->_max_send_udp_payload_size_in, 
"proxy.config.quic.max_send_udp_payload_size_in");
   REC_EstablishStaticConfigInt32U(this->_max_send_udp_payload_size_out, 
"proxy.config.quic.max_send_udp_payload_size_out");
   REC_EstablishStaticConfigInt32U(this->_disable_http_0_9, 
"proxy.config.quic.disable_http_0_9");
+  REC_EstablishStaticConfigInt32U(this->_cc_algorithm, 
"proxy.config.quic.cc_algorithm");
 
   this->_client_ssl_ctx = quic_init_client_ssl_ctx(this);
 }
@@ -419,6 +420,19 @@ QUICConfigParams::disable_http_0_9() const
   return this->_disable_http_0_9;
 }
 
+quiche_cc_algorithm
+QUICConfigParams::get_cc_algorithm() const
+{
+  switch (this->_cc_algorithm) {
+  case 0:
+    return QUICHE_CC_RENO;
+  case 1:
+    return QUICHE_CC_CUBIC;
+  default:
+    return QUICHE_CC_RENO;
+  }
+}
+
 //
 // QUICConfig
 //
diff --git a/src/records/RecordsConfig.cc b/src/records/RecordsConfig.cc
index 75ed50f58d..4173656c74 100644
--- a/src/records/RecordsConfig.cc
+++ b/src/records/RecordsConfig.cc
@@ -1422,6 +1422,8 @@ static const RecordElement RecordsConfig[] =
   ,
   {RECT_CONFIG, "proxy.config.quic.disable_http_0_9", RECD_INT, "1", 
RECU_DYNAMIC, RR_NULL, RECC_STR, "[0-1]", RECA_NULL}
   ,
+  {RECT_CONFIG, "proxy.config.quic.cc_algorithm", RECD_INT, "0", RECU_DYNAMIC, 
RR_NULL, RECC_STR, "[0-1]", RECA_NULL}
+  ,
 
   //# Add LOCAL Records Here
   {RECT_LOCAL, "proxy.config.incoming_ip_to_bind", RECD_STRING, nullptr, 
RECU_NULL, RR_NULL, RECC_NULL, nullptr, RECA_NULL}

Reply via email to