vcl: add api to retrieve num bytes for tx 46/40546/5
authorFlorin Coras <fcoras@cisco.com>
Mon, 18 Mar 2024 19:25:38 +0000 (12:25 -0700)
committerDave Barach <vpp@barachs.net>
Mon, 25 Mar 2024 18:53:05 +0000 (18:53 +0000)
Type: improvement
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Iaa1b026e2baea1c03f8c75e7d6879d0ff6d379d6

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

index 566b5a8..bd3457f 100644 (file)
@@ -613,7 +613,13 @@ ioctl (int fd, unsigned long int cmd, ...)
        case FIONREAD:
          rv = vls_attr (vlsh, VPPCOM_ATTR_GET_NREAD, 0, 0);
          break;
-
+       case TIOCOUTQ:
+         {
+           u32 *buf = va_arg (ap, void *);
+           u32 *buflen = va_arg (ap, u32 *);
+           rv = vls_attr (vlsh, VPPCOM_ATTR_GET_NWRITEQ, buf, buflen);
+         }
+         break;
        case FIONBIO:
          {
            u32 flags = *(va_arg (ap, int *)) ? O_NONBLOCK : 0;
index a0a0336..a0bbae1 100644 (file)
@@ -3585,7 +3585,19 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op,
       VDBG (2, "VPPCOM_ATTR_GET_NWRITE: sh %u, nwrite = %d", session_handle,
            rv);
       break;
-
+    case VPPCOM_ATTR_GET_NWRITEQ:
+      if (PREDICT_FALSE (!buffer || !buflen || *buflen != sizeof (int)))
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      if (!session->tx_fifo || session->session_state == VCL_STATE_DETACHED)
+       {
+         rv = VPPCOM_EINVAL;
+         break;
+       }
+      *(int *) buffer = svm_fifo_max_dequeue (session->tx_fifo);
+      break;
     case VPPCOM_ATTR_GET_FLAGS:
       if (PREDICT_TRUE (buffer && buflen && (*buflen >= sizeof (*flags))))
        {
index 5683cb2..386d7d0 100644 (file)
@@ -184,6 +184,7 @@ typedef enum
   VPPCOM_ATTR_SET_IP_PKTINFO,
   VPPCOM_ATTR_GET_IP_PKTINFO,
   VPPCOM_ATTR_GET_ORIGINAL_DST,
+  VPPCOM_ATTR_GET_NWRITEQ,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll