af_packet: fix the error handling on transmit 84/42884/3
authorMohsin Kazmi <[email protected]>
Thu, 15 May 2025 17:31:16 +0000 (17:31 +0000)
committerFlorin Coras <[email protected]>
Wed, 21 May 2025 17:33:40 +0000 (17:33 +0000)
Type: fix

Signed-off-by: Mohsin Kazmi <[email protected]>
Change-Id: If9fe1bf36b2fb18ade876df1dd9f157ccbb694d1

src/plugins/af_packet/device.c

index 993e7cb..79e3d7b 100644 (file)
@@ -72,6 +72,21 @@ typedef struct
   vlib_buffer_t buffer;
 } af_packet_tx_trace_t;
 
+always_inline word
+af_packet_error_is_fatal (word error)
+{
+  switch (error)
+    {
+#ifdef CLIB_UNIX
+    case EAGAIN:
+    case ENOBUFS:
+    case EINTR:
+      return 0;
+#endif
+    }
+  return 1;
+}
+
 #ifndef CLIB_MARCH_VARIANT
 u8 *
 format_af_packet_device_name (u8 * s, va_list * args)
@@ -583,7 +598,7 @@ VNET_DEVICE_CLASS_TX_FN (af_packet_device_class) (vlib_main_t * vm,
           */
          uword counter;
 
-         if (unix_error_is_fatal (errno))
+         if (af_packet_error_is_fatal (errno))
            {
              counter = AF_PACKET_TX_ERROR_TXRING_FATAL;
              vlib_log_err (apm->log_class,