tcp: support for rate sample attr flag 01/32001/3
authorFlorin Coras <fcoras@cisco.com>
Thu, 15 Apr 2021 15:50:00 +0000 (08:50 -0700)
committerDave Barach <openvpp@barachs.net>
Thu, 15 Apr 2021 17:12:10 +0000 (17:12 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I94b8063c9d8f9b811589c6815cb5c8ca6220f2b5

src/vnet/session/transport_types.h
src/vnet/tcp/tcp.c

index f0fc285..5f14701 100644 (file)
@@ -220,9 +220,17 @@ typedef struct transport_endpoint_pair_
   _ (GSO)                                                                     \
   _ (RATE_SAMPLING)
 
+typedef enum transport_endpt_attr_flag_bit_
+{
+#define _(name) TRANSPORT_ENDPT_ATTR_F_BIT_##name,
+  foreach_transport_endpt_cfg_flags
+#undef _
+} __clib_packed transport_endpt_attr_flag_bit_t;
+
 typedef enum transport_endpt_attr_flag_
 {
-#define _(name) TRANSPORT_ENDPT_ATTR_F_##name,
+#define _(name)                                                               \
+  TRANSPORT_ENDPT_ATTR_F_##name = 1 << TRANSPORT_ENDPT_ATTR_F_BIT_##name,
   foreach_transport_endpt_cfg_flags
 #undef _
 } __clib_packed transport_endpt_attr_flag_t;
index 7f1e63e..e447fac 100644 (file)
@@ -904,6 +904,18 @@ tcp_set_attribute (tcp_connection_t *tc, transport_endpt_attr_t *attr)
          tc->cfg_flags |= TCP_CFG_F_NO_TSO;
          tc->cfg_flags &= ~TCP_CFG_F_TSO;
        }
+      if (attr->flags & TRANSPORT_ENDPT_ATTR_F_RATE_SAMPLING)
+       {
+         if (!(tc->cfg_flags & TCP_CFG_F_RATE_SAMPLE))
+           tcp_bt_init (tc);
+         tc->cfg_flags |= TCP_CFG_F_RATE_SAMPLE;
+       }
+      else
+       {
+         if (tc->cfg_flags & TCP_CFG_F_RATE_SAMPLE)
+           tcp_bt_cleanup (tc);
+         tc->cfg_flags &= ~TCP_CFG_F_RATE_SAMPLE;
+       }
       break;
     case TRANSPORT_ENDPT_ATTR_CC_ALGO:
       if (tc->cc_algo == tcp_cc_algo_get (attr->cc_algo))
@@ -941,6 +953,8 @@ tcp_get_attribute (tcp_connection_t *tc, transport_endpt_attr_t *attr)
        attr->flags |= TRANSPORT_ENDPT_ATTR_F_CSUM_OFFLOAD;
       if (tc->cfg_flags & TCP_CFG_F_TSO)
        attr->flags |= TRANSPORT_ENDPT_ATTR_F_GSO;
+      if (tc->cfg_flags & TCP_CFG_F_RATE_SAMPLE)
+       attr->flags |= TRANSPORT_ENDPT_ATTR_F_RATE_SAMPLING;
       break;
     case TRANSPORT_ENDPT_ATTR_CC_ALGO:
       attr->cc_algo = tc->cc_algo - tcp_main.cc_algos;