You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ma...@apache.org on 2018/09/12 01:09:54 UTC

[trafficserver] branch quic-latest updated (0095388 -> 0a4524d)

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

masaori pushed a change to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git.


    from 0095388  Add const qualifier to _hs_protocol
     new d497bfa  [draft-14] Bump version
     new 786ec67  [draft-14] Split INITIAL_MAX_STREAM_DATA into 3 transport parameters
     new 67854c4  Add configs for Transport Parameters (initial_max_*)
     new 0a4524d  [draft-14] Remove QUICTransErrorCode::UNSOLICITED_PATH_RESPONSE

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 iocore/net/quic/QUICConfig.cc                      | 72 ++++++++++++++++++---
 iocore/net/quic/QUICConfig.h                       | 60 ++++++++++-------
 iocore/net/quic/QUICDebugNames.cc                  | 10 +--
 iocore/net/quic/QUICHandshake.cc                   | 51 ++++++++++++---
 iocore/net/quic/QUICPathValidator.cc               |  2 +-
 iocore/net/quic/QUICStreamManager.cc               | 70 ++++++++++++++++----
 iocore/net/quic/QUICTransportParameters.cc         | 75 +++++++++++++---------
 iocore/net/quic/QUICTransportParameters.h          |  4 +-
 iocore/net/quic/QUICTypes.h                        |  7 +-
 iocore/net/quic/test/test_QUICPacketFactory.cc     |  2 +-
 iocore/net/quic/test/test_QUICStreamManager.cc     |  4 +-
 .../net/quic/test/test_QUICTransportParameters.cc  | 16 ++---
 mgmt/RecordsConfig.cc                              | 37 ++++++++---
 13 files changed, 295 insertions(+), 115 deletions(-)


[trafficserver] 03/04: Add configs for Transport Parameters (initial_max_*)

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 67854c45d848efcd83399600c2b1d5d26704d8c1
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Mon Sep 10 14:49:38 2018 +0900

    Add configs for Transport Parameters (initial_max_*)
    
    Split proxy.config.quic.initial_max_data
    - proxy.config.quic.initial_max_data_in : 65536
    - proxy.config.quic.initial_max_data_out : 65536
    
    Split proxy.config.quic.initial_max_stream_data
    - proxy.config.quic.initial_max_stream_data_bidi_local_in :0
    - proxy.config.quic.initial_max_stream_data_bidi_local_out : 4096
    - proxy.config.quic.initial_max_stream_data_bidi_remote_in : 4096
    - proxy.config.quic.initial_max_stream_data_bidi_remote_out : 0
    - proxy.config.quic.initial_max_stream_data_uni_in : 0
    - proxy.config.quic.initial_max_stream_data_uni_out : 0
    
    Add configs for initial_max_(bidi|uni)_streams
    - proxy.config.quic.initial_max_bidi_streams_in : 100
    - proxy.config.quic.initial_max_bidi_streams_out : 0
    - proxy.config.quic.initial_max_uni_streams_in : 0
    - proxy.config.quic.initial_max_uni_streams_out : 0
---
 iocore/net/quic/QUICConfig.cc    | 70 +++++++++++++++++++++++++++++++++++-----
 iocore/net/quic/QUICConfig.h     | 60 +++++++++++++++++++++-------------
 iocore/net/quic/QUICHandshake.cc | 44 ++++++++++++++++++++-----
 mgmt/RecordsConfig.cc            | 37 ++++++++++++++++-----
 4 files changed, 165 insertions(+), 46 deletions(-)

diff --git a/iocore/net/quic/QUICConfig.cc b/iocore/net/quic/QUICConfig.cc
index 8d71a08..e360538 100644
--- a/iocore/net/quic/QUICConfig.cc
+++ b/iocore/net/quic/QUICConfig.cc
@@ -133,10 +133,6 @@ QUICConfigParams::~QUICConfigParams()
 void
 QUICConfigParams::initialize()
 {
-  REC_EstablishStaticConfigInt32U(this->_no_activity_timeout_in, "proxy.config.quic.no_activity_timeout_in");
-  REC_EstablishStaticConfigInt32U(this->_no_activity_timeout_out, "proxy.config.quic.no_activity_timeout_out");
-  REC_EstablishStaticConfigInt32U(this->_initial_max_data, "proxy.config.quic.initial_max_data");
-  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data, "proxy.config.quic.initial_max_stream_data");
   REC_EstablishStaticConfigInt32U(this->_server_id, "proxy.config.quic.server_id");
   REC_EstablishStaticConfigInt32(this->_connection_table_size, "proxy.config.quic.connection_table.size");
   REC_EstablishStaticConfigInt32U(this->_max_alt_connection_ids, "proxy.config.quic.max_alt_connection_ids");
@@ -146,6 +142,27 @@ QUICConfigParams::initialize()
   REC_ReadConfigStringAlloc(this->_server_supported_groups, "proxy.config.quic.server.supported_groups");
   REC_ReadConfigStringAlloc(this->_client_supported_groups, "proxy.config.quic.client.supported_groups");
 
+  // Transport Parameters
+  REC_EstablishStaticConfigInt32U(this->_no_activity_timeout_in, "proxy.config.quic.no_activity_timeout_in");
+  REC_EstablishStaticConfigInt32U(this->_no_activity_timeout_out, "proxy.config.quic.no_activity_timeout_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_data_in, "proxy.config.quic.initial_max_data_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_data_out, "proxy.config.quic.initial_max_data_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_bidi_local_in,
+                                  "proxy.config.quic.initial_max_stream_data_bidi_local_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_bidi_local_out,
+                                  "proxy.config.quic.initial_max_stream_data_bidi_local_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_bidi_remote_in,
+                                  "proxy.config.quic.initial_max_stream_data_bidi_remote_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_bidi_remote_out,
+                                  "proxy.config.quic.initial_max_stream_data_bidi_remote_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_uni_in, "proxy.config.quic.initial_max_stream_data_uni_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_stream_data_uni_out, "proxy.config.quic.initial_max_stream_data_uni_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_bidi_streams_in, "proxy.config.quic.initial_max_bidi_streams_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_bidi_streams_out, "proxy.config.quic.initial_max_bidi_streams_out");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_uni_streams_in, "proxy.config.quic.initial_max_uni_streams_in");
+  REC_EstablishStaticConfigInt32U(this->_initial_max_uni_streams_out, "proxy.config.quic.initial_max_uni_streams_out");
+
+  // Loss Detection
   REC_EstablishStaticConfigInt32U(this->_ld_max_tlps, "proxy.config.quic.loss_detection.max_tlps");
   REC_EstablishStaticConfigInt32U(this->_ld_reordering_threshold, "proxy.config.quic.loss_detection.reordering_threshold");
   REC_EstablishStaticConfigFloat(this->_ld_time_reordering_fraction, "proxy.config.quic.loss_detection.time_reordering_fraction");
@@ -164,6 +181,7 @@ QUICConfigParams::initialize()
   REC_EstablishStaticConfigInt32U(timeout, "proxy.config.quic.loss_detection.default_initial_rtt");
   this->_ld_default_initial_rtt = HRTIME_MSECONDS(timeout);
 
+  // Congestion Control
   REC_EstablishStaticConfigInt32U(this->_cc_default_mss, "proxy.config.quic.congestion_control.default_mss");
   REC_EstablishStaticConfigInt32U(this->_cc_initial_window_scale, "proxy.config.quic.congestion_control.initial_window_scale");
   REC_EstablishStaticConfigInt32U(this->_cc_minimum_window_scale, "proxy.config.quic.congestion_control.minimum_window_scale");
@@ -218,15 +236,51 @@ QUICConfigParams::vn_exercise_enabled() const
 }
 
 uint32_t
-QUICConfigParams::initial_max_data() const
+QUICConfigParams::initial_max_data_in() const
+{
+  return this->_initial_max_data_in;
+}
+
+uint32_t
+QUICConfigParams::initial_max_data_out() const
+{
+  return this->_initial_max_data_out;
+}
+
+uint32_t
+QUICConfigParams::initial_max_stream_data_bidi_local_in() const
+{
+  return this->_initial_max_stream_data_bidi_local_in;
+}
+
+uint32_t
+QUICConfigParams::initial_max_stream_data_bidi_local_out() const
+{
+  return this->_initial_max_stream_data_bidi_local_out;
+}
+
+uint32_t
+QUICConfigParams::initial_max_stream_data_bidi_remote_in() const
+{
+  return this->_initial_max_stream_data_bidi_remote_in;
+}
+
+uint32_t
+QUICConfigParams::initial_max_stream_data_bidi_remote_out() const
+{
+  return this->_initial_max_stream_data_bidi_remote_out;
+}
+
+uint32_t
+QUICConfigParams::initial_max_stream_data_uni_in() const
 {
-  return this->_initial_max_data;
+  return this->_initial_max_stream_data_uni_in;
 }
 
 uint32_t
-QUICConfigParams::initial_max_stream_data() const
+QUICConfigParams::initial_max_stream_data_uni_out() const
 {
-  return this->_initial_max_stream_data;
+  return this->_initial_max_stream_data_uni_out;
 }
 
 uint16_t
diff --git a/iocore/net/quic/QUICConfig.h b/iocore/net/quic/QUICConfig.h
index 1c0d466..f7d9373 100644
--- a/iocore/net/quic/QUICConfig.h
+++ b/iocore/net/quic/QUICConfig.h
@@ -35,14 +35,6 @@ public:
 
   void initialize();
 
-  uint32_t no_activity_timeout_in() const;
-  uint32_t no_activity_timeout_out() const;
-  uint32_t initial_max_data() const;
-  uint32_t initial_max_stream_data() const;
-  uint16_t initial_max_bidi_streams_in() const;
-  uint16_t initial_max_bidi_streams_out() const;
-  uint16_t initial_max_uni_streams_in() const;
-  uint16_t initial_max_uni_streams_out() const;
   uint32_t server_id() const;
   uint32_t max_alt_connection_ids() const;
   uint32_t stateless_retry() const;
@@ -54,6 +46,23 @@ public:
   SSL_CTX *server_ssl_ctx() const;
   SSL_CTX *client_ssl_ctx() const;
 
+  // Transport Parameters
+  uint32_t no_activity_timeout_in() const;
+  uint32_t no_activity_timeout_out() const;
+  uint32_t initial_max_data_in() const;
+  uint32_t initial_max_data_out() const;
+  uint32_t initial_max_stream_data_bidi_local_in() const;
+  uint32_t initial_max_stream_data_bidi_local_out() const;
+  uint32_t initial_max_stream_data_bidi_remote_in() const;
+  uint32_t initial_max_stream_data_bidi_remote_out() const;
+  uint32_t initial_max_stream_data_uni_in() const;
+  uint32_t initial_max_stream_data_uni_out() const;
+  uint16_t initial_max_bidi_streams_in() const;
+  uint16_t initial_max_bidi_streams_out() const;
+  uint16_t initial_max_uni_streams_in() const;
+  uint16_t initial_max_uni_streams_out() const;
+
+  // Loss Detection
   uint32_t ld_max_tlps() const;
   uint32_t ld_reordering_threshold() const;
   float ld_time_reordering_fraction() const;
@@ -63,6 +72,7 @@ public:
   ink_hrtime ld_delayed_ack_timeout() const;
   ink_hrtime ld_default_initial_rtt() const;
 
+  // Congestion Control
   uint32_t cc_default_mss() const;
   uint32_t cc_initial_window() const;
   uint32_t cc_minimum_window() const;
@@ -76,20 +86,10 @@ private:
   // TODO: make configurable
   static const uint8_t _scid_len = 18; //< Length of Source Connection ID
 
-  // FIXME Fill appropriate default values in RecordsConfig.cc
-  uint32_t _no_activity_timeout_in  = 0;
-  uint32_t _no_activity_timeout_out = 0;
-  uint32_t _initial_max_data        = 0;
-  uint32_t _initial_max_stream_data = 0;
-  uint32_t _server_id               = 0;
-  uint32_t _max_alt_connection_ids  = 0;
-  uint32_t _stateless_retry         = 0;
-  uint32_t _vn_exercise_enabled     = 0;
-
-  uint32_t _initial_max_bidi_streams_in  = 100;
-  uint32_t _initial_max_bidi_streams_out = 100;
-  uint32_t _initial_max_uni_streams_in   = 100;
-  uint32_t _initial_max_uni_streams_out  = 100;
+  uint32_t _server_id              = 0;
+  uint32_t _max_alt_connection_ids = 0;
+  uint32_t _stateless_retry        = 0;
+  uint32_t _vn_exercise_enabled    = 0;
 
   char *_server_supported_groups = nullptr;
   char *_client_supported_groups = nullptr;
@@ -98,6 +98,22 @@ private:
   SSL_CTX *_server_ssl_ctx = nullptr;
   SSL_CTX *_client_ssl_ctx = nullptr;
 
+  // Transport Parameters
+  uint32_t _no_activity_timeout_in                  = 0;
+  uint32_t _no_activity_timeout_out                 = 0;
+  uint32_t _initial_max_data_in                     = 0;
+  uint32_t _initial_max_data_out                    = 0;
+  uint32_t _initial_max_stream_data_bidi_local_in   = 0;
+  uint32_t _initial_max_stream_data_bidi_local_out  = 0;
+  uint32_t _initial_max_stream_data_bidi_remote_in  = 0;
+  uint32_t _initial_max_stream_data_bidi_remote_out = 0;
+  uint32_t _initial_max_stream_data_uni_in          = 0;
+  uint32_t _initial_max_stream_data_uni_out         = 0;
+  uint32_t _initial_max_bidi_streams_in             = 0;
+  uint32_t _initial_max_bidi_streams_out            = 0;
+  uint32_t _initial_max_uni_streams_in              = 0;
+  uint32_t _initial_max_uni_streams_out             = 0;
+
   // [draft-11 recovery] 3.5.1.  Constants of interest
   uint32_t _ld_max_tlps              = 2;
   uint32_t _ld_reordering_threshold  = 3;
diff --git a/iocore/net/quic/QUICHandshake.cc b/iocore/net/quic/QUICHandshake.cc
index 0349ab9..01425fb 100644
--- a/iocore/net/quic/QUICHandshake.cc
+++ b/iocore/net/quic/QUICHandshake.cc
@@ -369,10 +369,24 @@ QUICHandshake::_load_local_server_transport_parameters(QUICVersion negotiated_ve
   tp->set(QUICTransportParameterId::IDLE_TIMEOUT, static_cast<uint16_t>(params->no_activity_timeout_in()));
 
   // MAYs
-  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_in());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_in());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, params->initial_max_stream_data());
+  if (params->initial_max_data_in() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data_in());
+  }
+  if (params->initial_max_bidi_streams_in() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_in());
+  }
+  if (params->initial_max_uni_streams_in() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_in());
+  }
+  if (params->initial_max_stream_data_bidi_local_in() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, params->initial_max_stream_data_bidi_local_in());
+  }
+  if (params->initial_max_stream_data_bidi_remote_in() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, params->initial_max_stream_data_bidi_remote_in());
+  }
+  if (params->initial_max_stream_data_uni_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI, params->initial_max_stream_data_uni_out());
+  }
 
   // MAYs (server)
   tp->set(QUICTransportParameterId::STATELESS_RESET_TOKEN, this->_reset_token.buf(), QUICStatelessResetToken::LEN);
@@ -394,10 +408,24 @@ QUICHandshake::_load_local_client_transport_parameters(QUICVersion initial_versi
   tp->set(QUICTransportParameterId::IDLE_TIMEOUT, static_cast<uint16_t>(params->no_activity_timeout_out()));
 
   // MAYs
-  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_out());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_out());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, params->initial_max_stream_data());
+  if (params->initial_max_data_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data_out());
+  }
+  if (params->initial_max_bidi_streams_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_out());
+  }
+  if (params->initial_max_uni_streams_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_out());
+  }
+  if (params->initial_max_stream_data_bidi_local_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, params->initial_max_stream_data_bidi_local_out());
+  }
+  if (params->initial_max_stream_data_bidi_remote_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, params->initial_max_stream_data_bidi_remote_out());
+  }
+  if (params->initial_max_stream_data_uni_out() != 0) {
+    tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI, params->initial_max_stream_data_uni_out());
+  }
 
   this->_local_transport_parameters = std::shared_ptr<QUICTransportParameters>(tp);
   this->_hs_protocol->set_local_transport_parameters(std::unique_ptr<QUICTransportParameters>(tp));
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 822130f..b4581dc 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -1314,14 +1314,6 @@ static const RecordElement RecordsConfig[] =
   //# QUIC global configuration.
   //#
   //############
-  {RECT_CONFIG, "proxy.config.quic.no_activity_timeout_in", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
-  ,
-  {RECT_CONFIG, "proxy.config.quic.no_activity_timeout_out", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
-  ,
-  {RECT_CONFIG, "proxy.config.quic.initial_max_data", RECD_INT, "131072", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
-  ,
-  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data", RECD_INT, "2048", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
-  ,
   {RECT_CONFIG, "proxy.config.quic.server_id", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
   ,
   {RECT_CONFIG, "proxy.config.quic.connection_table.size", RECD_INT, "65521", RECU_RESTART_TS, RR_NULL, RECC_INT, "[1-536870909]", RECA_NULL}
@@ -1336,6 +1328,35 @@ static const RecordElement RecordsConfig[] =
   ,
   {RECT_CONFIG, "proxy.config.quic.client.supported_groups", RECD_STRING, "P-256:X25519:P-384:P-521" , RECU_RESTART_TS, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
   ,
+  // Transport Parameters
+  {RECT_CONFIG, "proxy.config.quic.no_activity_timeout_in", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.no_activity_timeout_out", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_data_in", RECD_INT, "65536", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_data_out", RECD_INT, "65536", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_bidi_local_in", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_bidi_local_out", RECD_INT, "4096", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_bidi_remote_in", RECD_INT, "4096", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_bidi_remote_out", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_uni_in", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_stream_data_uni_out", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_bidi_streams_in", RECD_INT, "100", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_bidi_streams_out", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_uni_streams_in", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.quic.initial_max_uni_streams_out", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
+  ,
   // Constants of Loss Detection
   {RECT_CONFIG, "proxy.config.quic.loss_detection.max_tlps", RECD_INT, "2", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
   ,


[trafficserver] 02/04: [draft-14] Split INITIAL_MAX_STREAM_DATA into 3 transport parameters

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 786ec670eb2336d3354b1276ad2c53ec34791bcd
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Mon Sep 10 13:47:36 2018 +0900

    [draft-14] Split INITIAL_MAX_STREAM_DATA into 3 transport parameters
---
 iocore/net/quic/QUICDebugNames.cc                  |  8 ++-
 iocore/net/quic/QUICHandshake.cc                   | 15 +++--
 iocore/net/quic/QUICStreamManager.cc               | 70 ++++++++++++++++----
 iocore/net/quic/QUICTransportParameters.cc         | 75 +++++++++++++---------
 iocore/net/quic/QUICTransportParameters.h          |  4 +-
 iocore/net/quic/test/test_QUICStreamManager.cc     |  4 +-
 .../net/quic/test/test_QUICTransportParameters.cc  | 16 ++---
 7 files changed, 128 insertions(+), 64 deletions(-)

diff --git a/iocore/net/quic/QUICDebugNames.cc b/iocore/net/quic/QUICDebugNames.cc
index 567266b..7b799bb 100644
--- a/iocore/net/quic/QUICDebugNames.cc
+++ b/iocore/net/quic/QUICDebugNames.cc
@@ -173,8 +173,8 @@ const char *
 QUICDebugNames::transport_parameter_id(QUICTransportParameterId id)
 {
   switch (id) {
-  case QUICTransportParameterId::INITIAL_MAX_STREAM_DATA:
-    return "INITIAL_MAX_STREAM_DATA";
+  case QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL:
+    return "INITIAL_MAX_STREAM_DATA_BIDI_LOCAL";
   case QUICTransportParameterId::INITIAL_MAX_DATA:
     return "INITIAL_MAX_DATA";
   case QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS:
@@ -193,6 +193,10 @@ QUICDebugNames::transport_parameter_id(QUICTransportParameterId id)
     return "INITIAL_MAX_UNI_STREAMS";
   case QUICTransportParameterId::DISABLE_MIGRATION:
     return "DISABLE_MIGRATION";
+  case QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE:
+    return "INITIAL_MAX_STREAM_DATA_BIDI_REMOTE";
+  case QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI:
+    return "INITIAL_MAX_STREAM_DATA_UNI";
   default:
     return "UNKNOWN";
   }
diff --git a/iocore/net/quic/QUICHandshake.cc b/iocore/net/quic/QUICHandshake.cc
index 7865bf4..0349ab9 100644
--- a/iocore/net/quic/QUICHandshake.cc
+++ b/iocore/net/quic/QUICHandshake.cc
@@ -366,15 +366,18 @@ QUICHandshake::_load_local_server_transport_parameters(QUICVersion negotiated_ve
   QUICTransportParametersInEncryptedExtensions *tp = new QUICTransportParametersInEncryptedExtensions(negotiated_version);
 
   // MUSTs
-  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, params->initial_max_stream_data());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
   tp->set(QUICTransportParameterId::IDLE_TIMEOUT, static_cast<uint16_t>(params->no_activity_timeout_in()));
-  tp->set(QUICTransportParameterId::STATELESS_RESET_TOKEN, this->_reset_token.buf(), QUICStatelessResetToken::LEN);
-  tp->add_version(QUIC_SUPPORTED_VERSIONS[0]);
 
   // MAYs
+  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
   tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_in());
   tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_in());
+  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, params->initial_max_stream_data());
+
+  // MAYs (server)
+  tp->set(QUICTransportParameterId::STATELESS_RESET_TOKEN, this->_reset_token.buf(), QUICStatelessResetToken::LEN);
+
+  tp->add_version(QUIC_SUPPORTED_VERSIONS[0]);
 
   this->_local_transport_parameters = std::shared_ptr<QUICTransportParameters>(tp);
   this->_hs_protocol->set_local_transport_parameters(this->_local_transport_parameters);
@@ -388,13 +391,13 @@ QUICHandshake::_load_local_client_transport_parameters(QUICVersion initial_versi
   QUICTransportParametersInClientHello *tp = new QUICTransportParametersInClientHello(initial_version);
 
   // MUSTs
-  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, params->initial_max_stream_data());
-  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
   tp->set(QUICTransportParameterId::IDLE_TIMEOUT, static_cast<uint16_t>(params->no_activity_timeout_out()));
 
   // MAYs
+  tp->set(QUICTransportParameterId::INITIAL_MAX_DATA, params->initial_max_data());
   tp->set(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS, params->initial_max_bidi_streams_out());
   tp->set(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS, params->initial_max_uni_streams_out());
+  tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, params->initial_max_stream_data());
 
   this->_local_transport_parameters = std::shared_ptr<QUICTransportParameters>(tp);
   this->_hs_protocol->set_local_transport_parameters(std::unique_ptr<QUICTransportParameters>(tp));
diff --git a/iocore/net/quic/QUICStreamManager.cc b/iocore/net/quic/QUICStreamManager.cc
index aa5d38a..a106ac1 100644
--- a/iocore/net/quic/QUICStreamManager.cc
+++ b/iocore/net/quic/QUICStreamManager.cc
@@ -259,26 +259,68 @@ QUICStreamManager::_find_or_create_stream(QUICStreamId stream_id)
 {
   QUICStream *stream = this->_find_stream(stream_id);
   if (!stream) {
-    QUICStreamType type = QUICTypeUtil::detect_stream_type(stream_id);
-    if (type == QUICStreamType::CLIENT_BIDI && stream_id > this->_local_maximum_stream_id_bidi &&
-        this->_local_maximum_stream_id_bidi != 0) {
-      return nullptr;
-    } else if (type == QUICStreamType::CLIENT_UNI && stream_id > this->_local_maximum_stream_id_uni &&
-               this->_local_maximum_stream_id_uni != 0) {
-      return nullptr;
-    } else if (type == QUICStreamType::SERVER_BIDI && stream_id > this->_remote_maximum_stream_id_bidi &&
-               this->_remote_maximum_stream_id_bidi != 0) {
-      return nullptr;
-    } else if (type == QUICStreamType::SERVER_UNI && stream_id > this->_remote_maximum_stream_id_uni &&
-               this->_remote_maximum_stream_id_uni != 0) {
+    if (!this->_local_tp) {
       return nullptr;
     }
 
     ink_assert(this->_local_tp);
     ink_assert(this->_remote_tp);
 
-    uint64_t local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA);
-    uint64_t remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA);
+    uint64_t local_max_stream_data  = 0;
+    uint64_t remote_max_stream_data = 0;
+
+    switch (QUICTypeUtil::detect_stream_type(stream_id)) {
+    case QUICStreamType::CLIENT_BIDI:
+      if (stream_id > this->_local_maximum_stream_id_bidi && this->_local_maximum_stream_id_bidi != 0) {
+        return nullptr;
+      }
+
+      if (this->_info->direction() == NET_VCONNECTION_OUT) {
+        // client
+        local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL);
+        remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE);
+      } else {
+        // server
+        local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE);
+        remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL);
+      }
+
+      break;
+    case QUICStreamType::CLIENT_UNI:
+      if (stream_id > this->_local_maximum_stream_id_uni && this->_local_maximum_stream_id_uni != 0) {
+        return nullptr;
+      }
+
+      local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI);
+      remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI);
+
+      break;
+    case QUICStreamType::SERVER_BIDI:
+      if (stream_id > this->_remote_maximum_stream_id_bidi && this->_remote_maximum_stream_id_bidi != 0) {
+        return nullptr;
+      }
+
+      if (this->_info->direction() == NET_VCONNECTION_OUT) {
+        // client
+        local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE);
+        remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL);
+      } else {
+        // server
+        local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL);
+        remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE);
+      }
+
+      break;
+    case QUICStreamType::SERVER_UNI:
+      if (stream_id > this->_remote_maximum_stream_id_uni && this->_remote_maximum_stream_id_uni != 0) {
+        return nullptr;
+      }
+
+      local_max_stream_data  = this->_local_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI);
+      remote_max_stream_data = this->_remote_tp->getAsUInt32(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI);
+
+      break;
+    }
 
     // TODO Free the stream somewhere
     stream = THREAD_ALLOC(quicStreamAllocator, this_ethread());
diff --git a/iocore/net/quic/QUICTransportParameters.cc b/iocore/net/quic/QUICTransportParameters.cc
index 6797ab6..00dff4d 100644
--- a/iocore/net/quic/QUICTransportParameters.cc
+++ b/iocore/net/quic/QUICTransportParameters.cc
@@ -34,6 +34,11 @@
 static constexpr int TRANSPORT_PARAMETERS_MAXIMUM_SIZE = 65535;
 static constexpr char tag[]                            = "quic_handshake";
 
+static constexpr uint32_t TP_ERROR_LENGTH         = 0x010000;
+static constexpr uint32_t TP_ERROR_VALUE          = 0x020000;
+static constexpr uint32_t TP_ERROR_MUST_EXIST     = 0x030000;
+static constexpr uint32_t TP_ERROR_MUST_NOT_EXIST = 0x040000;
+
 QUICTransportParameters::Value::Value(const uint8_t *data, uint16_t len) : _len(len)
 {
   this->_data = static_cast<uint8_t *>(ats_malloc(len));
@@ -142,62 +147,70 @@ QUICTransportParameters::_validate_parameters() const
   decltype(this->_parameters)::const_iterator ite;
 
   // MUSTs
-  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA)) != this->_parameters.end()) {
-    if (ite->second->len() != 4) {
-      return -1;
+  if ((ite = this->_parameters.find(QUICTransportParameterId::IDLE_TIMEOUT)) != this->_parameters.end()) {
+    if (ite->second->len() != 2) {
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::IDLE_TIMEOUT);
+    }
+    if (QUICIntUtil::read_nbytes_as_uint(ite->second->data(), ite->second->len()) > 600) {
+      return -(TP_ERROR_VALUE | QUICTransportParameterId::IDLE_TIMEOUT);
     }
   } else {
-    return -2;
+    return -(TP_ERROR_MUST_EXIST | QUICTransportParameterId::IDLE_TIMEOUT);
   }
 
+  // MAYs
   if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_DATA)) != this->_parameters.end()) {
     if (ite->second->len() != 4) {
-      return -3;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_DATA);
     }
-  } else {
-    return -4;
   }
 
-  if ((ite = this->_parameters.find(QUICTransportParameterId::IDLE_TIMEOUT)) != this->_parameters.end()) {
+  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS)) != this->_parameters.end()) {
     if (ite->second->len() != 2) {
-      return -5;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS);
     }
-    if (QUICIntUtil::read_nbytes_as_uint(ite->second->data(), ite->second->len()) > 600) {
-      return -6;
+  }
+
+  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS)) != this->_parameters.end()) {
+    if (ite->second->len() != 2) {
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS);
     }
-  } else {
-    return -7;
   }
 
-  // MAYs
   if ((ite = this->_parameters.find(QUICTransportParameterId::MAX_PACKET_SIZE)) != this->_parameters.end()) {
     if (ite->second->len() != 2) {
-      return -9;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::MAX_PACKET_SIZE);
     }
     if (QUICIntUtil::read_nbytes_as_uint(ite->second->data(), ite->second->len()) < 1200) {
-      return -10;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::MAX_PACKET_SIZE);
     }
   }
 
   if ((ite = this->_parameters.find(QUICTransportParameterId::ACK_DELAY_EXPONENT)) != this->_parameters.end()) {
     if (ite->second->len() != 1) {
-      return -11;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::ACK_DELAY_EXPONENT);
     }
     if (QUICIntUtil::read_nbytes_as_uint(ite->second->data(), ite->second->len()) > 20) {
-      return -12;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::ACK_DELAY_EXPONENT);
     }
   }
 
-  // MAYs
-  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_BIDI_STREAMS)) != this->_parameters.end()) {
-    if (ite->second->len() != 2) {
-      return -3;
+  // MAYs (initial values for the flow control on each type of stream)
+  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL)) != this->_parameters.end()) {
+    if (ite->second->len() != 4) {
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL);
     }
   }
 
-  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_UNI_STREAMS)) != this->_parameters.end()) {
-    if (ite->second->len() != 2) {
-      return -5;
+  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE)) != this->_parameters.end()) {
+    if (ite->second->len() != 4) {
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE);
+    }
+  }
+
+  if ((ite = this->_parameters.find(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI)) != this->_parameters.end()) {
+    if (ite->second->len() != 4) {
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_UNI);
     }
   }
 
@@ -374,18 +387,18 @@ QUICTransportParametersInClientHello::_validate_parameters() const
 {
   int res = QUICTransportParameters::_validate_parameters();
   if (res < 0) {
-    return res - 100;
+    return res;
   }
 
   decltype(this->_parameters)::const_iterator ite;
 
   // MUST NOTs
   if ((ite = this->_parameters.find(QUICTransportParameterId::STATELESS_RESET_TOKEN)) != this->_parameters.end()) {
-    return -1;
+    return -(TP_ERROR_MUST_NOT_EXIST | QUICTransportParameterId::STATELESS_RESET_TOKEN);
   }
 
   if ((ite = this->_parameters.find(QUICTransportParameterId::PREFERRED_ADDRESS)) != this->_parameters.end()) {
-    return -2;
+    return -(TP_ERROR_MUST_NOT_EXIST | QUICTransportParameterId::PREFERRED_ADDRESS);
   }
 
   return 0;
@@ -467,7 +480,7 @@ QUICTransportParametersInEncryptedExtensions::_validate_parameters() const
 {
   int res = QUICTransportParameters::_validate_parameters();
   if (res < 0) {
-    return res - 100;
+    return res;
   }
 
   decltype(this->_parameters)::const_iterator ite;
@@ -475,13 +488,13 @@ QUICTransportParametersInEncryptedExtensions::_validate_parameters() const
   // MAYs
   if ((ite = this->_parameters.find(QUICTransportParameterId::STATELESS_RESET_TOKEN)) != this->_parameters.end()) {
     if (ite->second->len() != QUICStatelessResetToken::LEN) {
-      return -1;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::STATELESS_RESET_TOKEN);
     }
   }
 
   if ((ite = this->_parameters.find(QUICTransportParameterId::PREFERRED_ADDRESS)) != this->_parameters.end()) {
     if (ite->second->len() < QUICPreferredAddress::MIN_LEN || QUICPreferredAddress::MAX_LEN < ite->second->len()) {
-      return -3;
+      return -(TP_ERROR_LENGTH | QUICTransportParameterId::PREFERRED_ADDRESS);
     }
   }
 
diff --git a/iocore/net/quic/QUICTransportParameters.h b/iocore/net/quic/QUICTransportParameters.h
index aef3b69..f1b7a1e 100644
--- a/iocore/net/quic/QUICTransportParameters.h
+++ b/iocore/net/quic/QUICTransportParameters.h
@@ -34,7 +34,7 @@ class QUICTransportParameterId
 {
 public:
   enum {
-    INITIAL_MAX_STREAM_DATA = 0,
+    INITIAL_MAX_STREAM_DATA_BIDI_LOCAL = 0,
     INITIAL_MAX_DATA,
     INITIAL_MAX_BIDI_STREAMS,
     IDLE_TIMEOUT,
@@ -44,6 +44,8 @@ public:
     ACK_DELAY_EXPONENT,
     INITIAL_MAX_UNI_STREAMS,
     DISABLE_MIGRATION,
+    INITIAL_MAX_STREAM_DATA_BIDI_REMOTE,
+    INITIAL_MAX_STREAM_DATA_UNI,
   };
 
   explicit operator bool() const { return true; }
diff --git a/iocore/net/quic/test/test_QUICStreamManager.cc b/iocore/net/quic/test/test_QUICStreamManager.cc
index cf463a5..4711aa1 100644
--- a/iocore/net/quic/test/test_QUICStreamManager.cc
+++ b/iocore/net/quic/test/test_QUICStreamManager.cc
@@ -106,7 +106,7 @@ TEST_CASE("QUICStreamManager_total_offset_received", "[quic]")
   QUICStreamManager sm(new MockQUICConnectionInfoProvider(), new MockQUICRTTProvider(), &app_map);
   std::shared_ptr<QUICTransportParameters> local_tp =
     std::make_shared<QUICTransportParametersInEncryptedExtensions>(static_cast<QUICVersion>(0));
-  local_tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, UINT32_C(4096));
+  local_tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, UINT32_C(4096));
   std::shared_ptr<QUICTransportParameters> remote_tp =
     std::make_shared<QUICTransportParametersInClientHello>(static_cast<QUICVersion>(0));
   sm.init_flow_control_params(local_tp, remote_tp);
@@ -135,7 +135,7 @@ TEST_CASE("QUICStreamManager_total_offset_sent", "[quic]")
   QUICStreamManager sm(new MockQUICConnectionInfoProvider(), new MockQUICRTTProvider(), &app_map);
   std::shared_ptr<QUICTransportParameters> local_tp =
     std::make_shared<QUICTransportParametersInEncryptedExtensions>(static_cast<QUICVersion>(0));
-  local_tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, UINT32_C(4096));
+  local_tp->set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, UINT32_C(4096));
   std::shared_ptr<QUICTransportParameters> remote_tp =
     std::make_shared<QUICTransportParametersInClientHello>(static_cast<QUICVersion>(0));
   sm.init_flow_control_params(local_tp, remote_tp);
diff --git a/iocore/net/quic/test/test_QUICTransportParameters.cc b/iocore/net/quic/test/test_QUICTransportParameters.cc
index 4053ed2..8f56369 100644
--- a/iocore/net/quic/test/test_QUICTransportParameters.cc
+++ b/iocore/net/quic/test/test_QUICTransportParameters.cc
@@ -53,7 +53,7 @@ TEST_CASE("QUICTransportParametersInClientHello_read", "[quic]")
     uint16_t len        = 0;
     const uint8_t *data = nullptr;
 
-    data = params_in_ch.getAsBytes(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, len);
+    data = params_in_ch.getAsBytes(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, len);
     CHECK(len == 4);
     CHECK(memcmp(data, "\x11\x22\x33\x44", 4) == 0);
 
@@ -115,7 +115,7 @@ TEST_CASE("QUICTransportParametersInClientHello_write", "[quic]")
   QUICTransportParametersInClientHello params_in_ch(0x05060708);
 
   uint32_t max_stream_data = 0x11223344;
-  params_in_ch.set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, max_stream_data);
+  params_in_ch.set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, max_stream_data);
 
   uint16_t max_packet_size = 0xabcd;
   params_in_ch.set(QUICTransportParameterId::MAX_PACKET_SIZE, max_packet_size);
@@ -137,7 +137,7 @@ TEST_CASE("QUICTransportParametersInEncryptedExtensions_read", "[quic]")
                      0x04,                   // size of supported versions
                      0x01, 0x02, 0x03, 0x04, //
                      0x00, 0x2a,             // size of parameters
-                     0x00, 0x00,             // parameter id
+                     0x00, 0x0a,             // parameter id
                      0x00, 0x04,             // length of value
                      0x11, 0x22, 0x33, 0x44, // value
                      0x00, 0x01,             // parameter id
@@ -159,7 +159,7 @@ TEST_CASE("QUICTransportParametersInEncryptedExtensions_read", "[quic]")
     uint16_t len        = 0;
     const uint8_t *data = nullptr;
 
-    data = params_in_ee.getAsBytes(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, len);
+    data = params_in_ee.getAsBytes(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, len);
     CHECK(len == 4);
     CHECK(memcmp(data, "\x11\x22\x33\x44", 4) == 0);
 
@@ -252,18 +252,18 @@ TEST_CASE("QUICTransportParametersEncryptedExtensions_write", "[quic]")
       0x01, 0x02, 0x03, 0x04, // version 1
       0x05, 0x06, 0x07, 0x08, // version 2
       0x00, 0x0e,             // size of parameters
-      0x00, 0x00,             // parameter id
-      0x00, 0x04,             // length of value
-      0x11, 0x22, 0x33, 0x44, // value
       0x00, 0x05,             // parameter id
       0x00, 0x02,             // length of value
       0xab, 0xcd,             // value
+      0x00, 0x0a,             // parameter id
+      0x00, 0x04,             // length of value
+      0x11, 0x22, 0x33, 0x44, // value
     };
 
     QUICTransportParametersInEncryptedExtensions params_in_ee(0x01020304);
 
     uint32_t max_stream_data = 0x11223344;
-    params_in_ee.set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA, max_stream_data);
+    params_in_ee.set(QUICTransportParameterId::INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, max_stream_data);
 
     uint16_t max_packet_size = 0xabcd;
     params_in_ee.set(QUICTransportParameterId::MAX_PACKET_SIZE, max_packet_size);


[trafficserver] 01/04: [draft-14] Bump version

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit d497bfa4bf2b50f651908dbfe966e582363dbfb7
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Mon Sep 10 09:54:47 2018 +0900

    [draft-14] Bump version
---
 iocore/net/quic/QUICConfig.cc                  | 2 +-
 iocore/net/quic/QUICTypes.h                    | 2 +-
 iocore/net/quic/test/test_QUICPacketFactory.cc | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/iocore/net/quic/QUICConfig.cc b/iocore/net/quic/QUICConfig.cc
index a3334c9..8d71a08 100644
--- a/iocore/net/quic/QUICConfig.cc
+++ b/iocore/net/quic/QUICConfig.cc
@@ -37,7 +37,7 @@
 // https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_alpn_protos.html
 // Should be integrate with IP_PROTO_TAG_HTTP_QUIC in ts/ink_inet.h ?
 using namespace std::literals;
-static constexpr std::string_view QUIC_ALPN_PROTO_LIST("\5hq-13"sv);
+static constexpr std::string_view QUIC_ALPN_PROTO_LIST("\5hq-14"sv);
 
 int QUICConfig::_config_id                   = 0;
 int QUICConfigParams::_connection_table_size = 65521;
diff --git a/iocore/net/quic/QUICTypes.h b/iocore/net/quic/QUICTypes.h
index 5e7a01e..e7de7a7 100644
--- a/iocore/net/quic/QUICTypes.h
+++ b/iocore/net/quic/QUICTypes.h
@@ -49,7 +49,7 @@ using QUICOffset       = uint64_t;
 // Note: Fix QUIC_ALPN_PROTO_LIST in QUICConfig.cc
 // Note: Change ExtensionType (QUICTransportParametersHandler::TRANSPORT_PARAMETER_ID) if it's changed
 constexpr QUICVersion QUIC_SUPPORTED_VERSIONS[] = {
-  0xff00000d,
+  0xff00000e,
 };
 constexpr QUICVersion QUIC_EXERCISE_VERSIONS = 0x1a2a3a4a;
 
diff --git a/iocore/net/quic/test/test_QUICPacketFactory.cc b/iocore/net/quic/test/test_QUICPacketFactory.cc
index d56bc14..0f47d0b 100644
--- a/iocore/net/quic/test/test_QUICPacketFactory.cc
+++ b/iocore/net/quic/test/test_QUICPacketFactory.cc
@@ -53,7 +53,7 @@ TEST_CASE("QUICPacketFactory_Create_VersionNegotiationPacket", "[quic]")
     0x55,                                           // DCIL/SCIL
     0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // Destination Connection ID
     0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // Source Connection ID
-    0xff, 0x00, 0x00, 0x0d,                         // Supported Version
+    0xff, 0x00, 0x00, 0x0e,                         // Supported Version
   };
   uint8_t buf[1024] = {0};
   size_t buf_len;


[trafficserver] 04/04: [draft-14] Remove QUICTransErrorCode::UNSOLICITED_PATH_RESPONSE

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 0a4524d825279ee8289ea673b46bd9e300279836
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Tue Sep 11 11:27:05 2018 +0900

    [draft-14] Remove QUICTransErrorCode::UNSOLICITED_PATH_RESPONSE
---
 iocore/net/quic/QUICDebugNames.cc    | 2 --
 iocore/net/quic/QUICPathValidator.cc | 2 +-
 iocore/net/quic/QUICTypes.h          | 5 ++---
 3 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/iocore/net/quic/QUICDebugNames.cc b/iocore/net/quic/QUICDebugNames.cc
index 7b799bb..59fd5aa 100644
--- a/iocore/net/quic/QUICDebugNames.cc
+++ b/iocore/net/quic/QUICDebugNames.cc
@@ -133,8 +133,6 @@ QUICDebugNames::error_code(uint16_t code)
     return "VERSION_NEGOTIATION_ERROR";
   case static_cast<uint16_t>(QUICTransErrorCode::PROTOCOL_VIOLATION):
     return "PROTOCOL_VIOLATION";
-  case static_cast<uint16_t>(QUICTransErrorCode::UNSOLICITED_PATH_RESPONSE):
-    return "UNSOLICITED_PATH_RESPONSE";
   case static_cast<uint16_t>(QUICTransErrorCode::INVALID_MIGRATION):
     return "INVALID_MIGRATION";
   default:
diff --git a/iocore/net/quic/QUICPathValidator.cc b/iocore/net/quic/QUICPathValidator.cc
index 2a54e4f..f9d1b2b 100644
--- a/iocore/net/quic/QUICPathValidator.cc
+++ b/iocore/net/quic/QUICPathValidator.cc
@@ -60,7 +60,7 @@ QUICPathValidator::_generate_response(const QUICPathChallengeFrame &frame)
 QUICErrorUPtr
 QUICPathValidator::_validate_response(const QUICPathResponseFrame &frame)
 {
-  QUICErrorUPtr error = QUICErrorUPtr(new QUICConnectionError(QUICTransErrorCode::UNSOLICITED_PATH_RESPONSE));
+  QUICErrorUPtr error = QUICErrorUPtr(new QUICConnectionError(QUICTransErrorCode::PROTOCOL_VIOLATION));
 
   for (int i = 0; i < 3; ++i) {
     if (memcmp(this->_outgoing_challenge + (QUICPathChallengeFrame::DATA_LEN * i), frame.data(),
diff --git a/iocore/net/quic/QUICTypes.h b/iocore/net/quic/QUICTypes.h
index e7de7a7..6acb872 100644
--- a/iocore/net/quic/QUICTypes.h
+++ b/iocore/net/quic/QUICTypes.h
@@ -156,9 +156,8 @@ enum class QUICTransErrorCode : uint16_t {
   TRANSPORT_PARAMETER_ERROR,
   VERSION_NEGOTIATION_ERROR,
   PROTOCOL_VIOLATION,
-  UNSOLICITED_PATH_RESPONSE = 0x0B,
-  INVALID_MIGRATION         = 0x0C,
-  CRYPTO_ERROR              = 0x0100, // 0x100 - 0x1FF
+  INVALID_MIGRATION = 0x0C,
+  CRYPTO_ERROR      = 0x0100, // 0x100 - 0x1FF
 };
 
 // Application Protocol Error Codes defined in application