vcl: attr api to set endpt ext config 86/32186/5
authorFlorin Coras <fcoras@cisco.com>
Sat, 1 May 2021 23:01:40 +0000 (16:01 -0700)
committerFlorin Coras <fcoras@cisco.com>
Sat, 1 May 2021 23:25:18 +0000 (16:25 -0700)
Type: improvement

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

src/vcl/vcl_private.c
src/vcl/vcl_private.h
src/vcl/vppcom.c
src/vcl/vppcom.h

index 464061c..3538a09 100644 (file)
@@ -317,14 +317,14 @@ vcl_session_write_ready (vcl_session_t * s)
 
 int
 vcl_session_alloc_ext_cfg (vcl_session_t *s,
-                          transport_endpt_ext_cfg_type_t type)
+                          transport_endpt_ext_cfg_type_t type, u32 len)
 {
   if (s->ext_config)
     return -1;
 
-  s->ext_config = clib_mem_alloc (sizeof (transport_endpt_ext_cfg_t));
-  clib_memset (s->ext_config, 0, sizeof (*s->ext_config));
-  s->ext_config->len = sizeof (*s->ext_config);
+  s->ext_config = clib_mem_alloc (len);
+  clib_memset (s->ext_config, 0, len);
+  s->ext_config->len = len;
   s->ext_config->type = type;
 
   return 0;
index 12504c5..6060ef8 100644 (file)
@@ -665,7 +665,7 @@ void vcl_segment_table_del (u64 segment_handle);
 int vcl_session_read_ready (vcl_session_t * session);
 int vcl_session_write_ready (vcl_session_t * session);
 int vcl_session_alloc_ext_cfg (vcl_session_t *s,
-                              transport_endpt_ext_cfg_type_t type);
+                              transport_endpt_ext_cfg_type_t type, u32 len);
 
 static inline vcl_worker_t *
 vcl_worker_get (u32 wrk_index)
index 5e37dcf..96a207b 100644 (file)
@@ -3697,7 +3697,8 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
        }
       if (!session->ext_config)
        {
-         vcl_session_alloc_ext_cfg (session, TRANSPORT_ENDPT_EXT_CFG_CRYPTO);
+         vcl_session_alloc_ext_cfg (session, TRANSPORT_ENDPT_EXT_CFG_CRYPTO,
+                                    sizeof (transport_endpt_ext_cfg_t));
        }
       else if (session->ext_config->type != TRANSPORT_ENDPT_EXT_CFG_CRYPTO)
        {
@@ -3744,6 +3745,23 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
            *buflen);
       break;
 
+    case VPPCOM_ATTR_SET_ENDPT_EXT_CFG:
+      if (!(buffer && buflen && (*buflen > 0)))
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      if (session->ext_config)
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      vcl_session_alloc_ext_cfg (session, TRANSPORT_ENDPT_EXT_CFG_NONE,
+                                *buflen + sizeof (u32));
+      clib_memcpy (session->ext_config->data, buffer, *buflen);
+      session->ext_config->len = *buflen;
+      break;
+
     default:
       rv = VPPCOM_EINVAL;
       break;
index d956b5f..ae48885 100644 (file)
@@ -143,6 +143,7 @@ typedef enum
   VPPCOM_ATTR_SET_VRF,
   VPPCOM_ATTR_GET_VRF,
   VPPCOM_ATTR_GET_DOMAIN,
+  VPPCOM_ATTR_SET_ENDPT_EXT_CFG,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll