From 3102059a9f744855299b57410b6ac8d43ab4a018 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 18 Aug 2025 05:17:19 -0400 Subject: [PATCH] vcl: ldp infra for get/set SO_COOKIE 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 --- src/vcl/ldp.c | 7 +++++++ src/vcl/vppcom.c | 23 +++++++++++++++++++++++ src/vcl/vppcom.h | 2 ++ 3 files changed, 32 insertions(+) diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c index ffd7b045de2..1de549b1c4a 100644 --- a/src/vcl/ldp.c +++ b/src/vcl/ldp.c @@ -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); diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 08879704a01..7b1a5f1cf4c 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -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))) { diff --git a/src/vcl/vppcom.h b/src/vcl/vppcom.h index ad1c1f4158f..b88a60384ca 100644 --- a/src/vcl/vppcom.h +++ b/src/vcl/vppcom.h @@ -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 -- 2.16.6