af_packet: remove UNIX_FILE_EVENT_EDGE_TRIGGERED flag 24/39824/2
authorArtem Glazychev <artem.glazychev@xored.com>
Thu, 2 Nov 2023 12:47:23 +0000 (19:47 +0700)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 7 Nov 2023 14:03:01 +0000 (14:03 +0000)
af_packet does not process data until the interface is UP. If after interface creation, but before it is UP, the host interfaces are flooded, then blocking case may occur - VPP interface will never be able to process the data.
If the EDGE_TRIGGERED flag is set, the event will not arrive, because nothing new is happening anymore (probably because the queue is already full).
Therefore, we need to use LEVEL_TRIGGERED (default value), which indicates that there is still unprocessed data (accumulated after interface creation, but before it was UP).

Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: Ied459fd194149d09f226bcb0a5907b3e327b148a

src/plugins/af_packet/af_packet.c

index f505fac..51aa11c 100644 (file)
@@ -169,7 +169,6 @@ af_packet_set_rx_queues (vlib_main_t *vm, af_packet_if_t *apif)
        template.error_function = af_packet_fd_error;
        template.file_descriptor = rx_queue->fd;
        template.private_data = rx_queue->queue_index;
-       template.flags = UNIX_FILE_EVENT_EDGE_TRIGGERED;
        template.description =
          format (0, "%U queue %u", format_af_packet_device_name,
                  apif->dev_instance, rx_queue->queue_id);