vcl: support set/get vrf attribute 99/30999/1
authorFlorin Coras <fcoras@cisco.com>
Thu, 28 Jan 2021 19:39:27 +0000 (11:39 -0800)
committerFlorin Coras <fcoras@cisco.com>
Thu, 28 Jan 2021 19:39:57 +0000 (11:39 -0800)
Type: improvement

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

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

index e4e73e0..21853eb 100644 (file)
@@ -161,6 +161,7 @@ typedef struct vcl_session_
   u32 attributes;              /**< see @ref vppcom_session_attr_t */
   int libc_epfd;
   u32 ckpair_index;
+  u32 vrf;
 
   u32 sndbuf_size;             // VPP-TBD: Hack until support setsockopt(SO_SNDBUF)
   u32 rcvbuf_size;             // VPP-TBD: Hack until support setsockopt(SO_RCVBUF)
index 184cb82..cf8bb72 100644 (file)
@@ -183,6 +183,7 @@ vcl_send_session_listen (vcl_worker_t * wrk, vcl_session_t * s)
   mp->port = s->transport.lcl_port;
   mp->proto = s->session_type;
   mp->ckpair_index = s->ckpair_index;
+  mp->vrf = s->vrf;
   if (s->flags & VCL_SESSION_F_CONNECTED)
     mp->flags = TRANSPORT_CFG_F_CONNECTED;
   app_send_ctrl_evt_to_vpp (mq, app_evt);
@@ -210,6 +211,7 @@ vcl_send_session_connect (vcl_worker_t * wrk, vcl_session_t * s)
   mp->lcl_port = s->transport.lcl_port;
   mp->proto = s->session_type;
   mp->ckpair_index = s->ckpair_index;
+  mp->vrf = s->vrf;
   if (s->flags & VCL_SESSION_F_CONNECTED)
     mp->flags |= TRANSPORT_CFG_F_CONNECTED;
   app_send_ctrl_evt_to_vpp (mq, app_evt);
@@ -3673,6 +3675,25 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
       session->ckpair_index = *(uint32_t *) buffer;
       break;
 
+    case VPPCOM_ATTR_SET_VRF:
+      if (!(buffer && buflen && (*buflen == sizeof (u32))))
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      session->vrf = *(u32 *) buffer;
+      break;
+
+    case VPPCOM_ATTR_GET_VRF:
+      if (!(buffer && buflen && (*buflen >= sizeof (u32))))
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      *(u32 *) buffer = session->vrf;
+      *buflen = sizeof (u32);
+      break;
+
     default:
       rv = VPPCOM_EINVAL;
       break;
index 77be806..6e3c278 100644 (file)
@@ -138,6 +138,8 @@ typedef enum
   VPPCOM_ATTR_GET_SHUT,
   VPPCOM_ATTR_SET_CONNECTED,
   VPPCOM_ATTR_SET_CKPAIR,
+  VPPCOM_ATTR_SET_VRF,
+  VPPCOM_ATTR_GET_VRF,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll