vcl: support sockopt of SO_REUSEPORT and SO_DOMAIN 70/31370/2
authorwanghanlin <wanghanlin@corp.netease.com>
Mon, 22 Feb 2021 02:38:36 +0000 (10:38 +0800)
committerFlorin Coras <florin.coras@gmail.com>
Mon, 22 Feb 2021 22:17:22 +0000 (22:17 +0000)
Type: fix

Signed-off-by: wanghanlin <wanghanlin@corp.netease.com>
Change-Id: I800cfffb07bf7d4c4d1454b73febdba03f7d6b75

src/vcl/ldp.c
src/vcl/vppcom.c
src/vcl/vppcom.h

index b72c0c5..a10d4d0 100644 (file)
@@ -1952,9 +1952,15 @@ getsockopt (int fd, int level, int optname,
            case SO_REUSEADDR:
              rv = vls_attr (vlsh, VPPCOM_ATTR_GET_REUSEADDR, optval, optlen);
              break;
+           case SO_REUSEPORT:
+             rv = vls_attr (vlsh, VPPCOM_ATTR_GET_REUSEPORT, optval, optlen);
+             break;
            case SO_BROADCAST:
              rv = vls_attr (vlsh, VPPCOM_ATTR_GET_BROADCAST, optval, optlen);
              break;
+           case SO_DOMAIN:
+             rv = vls_attr (vlsh, VPPCOM_ATTR_GET_DOMAIN, optval, optlen);
+             break;
            case SO_ERROR:
              rv = vls_attr (vlsh, VPPCOM_ATTR_GET_ERROR, optval, optlen);
              break;
@@ -2053,6 +2059,10 @@ setsockopt (int fd, int level, int optname,
              rv = vls_attr (vlsh, VPPCOM_ATTR_SET_REUSEADDR,
                             (void *) optval, &optlen);
              break;
+           case SO_REUSEPORT:
+             rv = vls_attr (vlsh, VPPCOM_ATTR_SET_REUSEPORT, (void *) optval,
+                            &optlen);
+             break;
            case SO_BROADCAST:
              rv = vls_attr (vlsh, VPPCOM_ATTR_SET_BROADCAST,
                             (void *) optval, &optlen);
index b576e1a..a439d25 100644 (file)
@@ -3636,6 +3636,21 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
       *buflen = sizeof (u32);
       break;
 
+    case VPPCOM_ATTR_GET_DOMAIN:
+      if (buffer && buflen && (*buflen >= sizeof (int)))
+       {
+         if (session->transport.is_ip4)
+           *(int *) buffer = AF_INET;
+         else
+           *(int *) buffer = AF_INET6;
+         *buflen = sizeof (int);
+       }
+      else
+       rv = VPPCOM_EINVAL;
+      VDBG (2, "VPPCOM_ATTR_GET_DOMAIN: %d, buflen %u", *(int *) buffer,
+           *buflen);
+      break;
+
     default:
       rv = VPPCOM_EINVAL;
       break;
index 1d2fa5d..c808829 100644 (file)
@@ -141,6 +141,7 @@ typedef enum
   VPPCOM_ATTR_SET_CKPAIR,
   VPPCOM_ATTR_SET_VRF,
   VPPCOM_ATTR_GET_VRF,
+  VPPCOM_ATTR_GET_DOMAIN,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll