vcl: ldp infra for get/set SO_COOKIE 86/43586/5
authorFlorin Coras <[email protected]>
Mon, 18 Aug 2025 09:17:19 +0000 (05:17 -0400)
committerDave Barach <[email protected]>
Mon, 18 Aug 2025 19:04:30 +0000 (19:04 +0000)
Stub infrastructure for storing and retrieving SO_COOKIE. Not storing
the actual cookie to avoid increasing vcl session size.

Type: improvement

Change-Id: Ibdcb31eb33ceab9a0250eae94694ba69e4ecf502
Signed-off-by: Florin Coras <[email protected]>
src/vcl/ldp.c
src/vcl/vppcom.c
src/vcl/vppcom.h

index ffd7b04..1de549b 100644 (file)
@@ -2117,6 +2117,9 @@ getsockopt (int fd, int level, int optname,
            case SO_BINDTODEVICE:
              rv = 0;
              break;
+           case SO_COOKIE:
+             rv = vls_attr (vlsh, VPPCOM_ATTR_GET_COOKIE, optval, optlen);
+             break;
            default:
              LDBG (0, "ERROR: fd %d: getsockopt SOL_SOCKET: vlsh %u "
                    "optname %d unsupported!", fd, vlsh, optname);
@@ -2222,6 +2225,10 @@ setsockopt (int fd, int level, int optname,
            case SO_LINGER:
              rv = 0;
              break;
+           case SO_COOKIE:
+             rv = vls_attr (vlsh, VPPCOM_ATTR_SET_COOKIE, (void *) optval,
+                            &optlen);
+             break;
            default:
              LDBG (0, "ERROR: fd %d: setsockopt SOL_SOCKET: vlsh %u "
                    "optname %d unsupported!", fd, vlsh, optname);
index 0887970..7b1a5f1 100644 (file)
@@ -4189,6 +4189,29 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
        rv = VPPCOM_EINVAL;
       break;
 
+    case VPPCOM_ATTR_GET_COOKIE:
+      if (buffer && buflen && (*buflen == sizeof (u64)))
+       {
+         /* VPP-TBD */
+         *(u64 *) buffer = 0;
+
+         VDBG (2, "VPPCOM_ATTR_GET_COOKIE: %d, buflen %d, #VPP-TBD#",
+               *(int *) buffer, *buflen);
+       }
+      else
+       rv = VPPCOM_EINVAL;
+      break;
+
+    case VPPCOM_ATTR_SET_COOKIE:
+      if (buffer && buflen && (*buflen == sizeof (u64)))
+       {
+         VDBG (2, "VPPCOM_ATTR_SET_COOKIE: %d, buflen %d, #VPP-TBD#",
+               *(u64 *) buffer, *buflen);
+       }
+      else
+       rv = VPPCOM_EINVAL;
+      break;
+
     case VPPCOM_ATTR_GET_V6ONLY:
       if (buffer && buflen && (*buflen >= sizeof (int)))
        {
index ad1c1f4..b88a603 100644 (file)
@@ -187,6 +187,8 @@ typedef enum
   VPPCOM_ATTR_GET_ORIGINAL_DST,
   VPPCOM_ATTR_GET_NWRITEQ,
   VPPCOM_ATTR_GET_EXT_ENDPT,
+  VPPCOM_ATTR_GET_COOKIE,
+  VPPCOM_ATTR_SET_COOKIE,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll