From 5a7aa51f00d562814204aca7831777651a00869f Mon Sep 17 00:00:00 2001 From: Mohsin Kazmi Date: Fri, 25 Mar 2022 14:27:45 +0000 Subject: devices: add multi-queue support for af-packet Type: feature Change-Id: I0f4e6517fcfa07ffb0aba89b159ac1337937a508 Signed-off-by: Mohsin Kazmi --- src/vnet/devices/af_packet/af_packet.h | 71 +++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 19 deletions(-) (limited to 'src/vnet/devices/af_packet/af_packet.h') diff --git a/src/vnet/devices/af_packet/af_packet.h b/src/vnet/devices/af_packet/af_packet.h index 217d2f6b009..4cae700909a 100644 --- a/src/vnet/devices/af_packet/af_packet.h +++ b/src/vnet/devices/af_packet/af_packet.h @@ -40,37 +40,68 @@ typedef struct typedef struct { - u32 rx_frame_offset; - u32 num_pkts; - u8 is_save; -} save_state_t; + u8 *ring_start_addr; + u32 ring_size; +} af_packet_ring_t; typedef struct { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); clib_spinlock_t lockp; - u8 *host_if_name; - int host_if_index; int fd; - tpacket_req3_t *rx_req; - tpacket_req3_t *tx_req; - u8 **rx_ring; - u8 **tx_ring; - u8 is_cksum_gso_enabled; - u32 hdrlen; - u32 hw_if_index; - u32 sw_if_index; + union + { + tpacket_req3_t *rx_req; + tpacket_req3_t *tx_req; + }; + + union + { + u8 **rx_ring; + u8 **tx_ring; + }; + + union + { + u32 next_rx_block; + u32 next_tx_frame; + }; + + u16 queue_id; + u32 queue_index; + u32 clib_file_index; - u32 next_rx_block; - u32 next_tx_frame; + u32 rx_frame_offset; + u16 num_rx_pkts; + u8 is_rx_pending; + vnet_hw_if_rx_mode mode; +} af_packet_queue_t; +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + u32 hw_if_index; + u32 sw_if_index; u32 per_interface_next_index; + af_packet_if_mode_t mode; u8 is_admin_up; - u32 queue_index; + u8 is_cksum_gso_enabled; + + af_packet_queue_t *rx_queues; + af_packet_queue_t *tx_queues; + + u8 num_rxqs; + u8 num_txqs; + + u8 *host_if_name; + int host_if_index; + u32 hdrlen; + u32 host_mtu; - af_packet_if_mode_t mode; - save_state_t ss; + u32 dev_instance; + + af_packet_ring_t *rings; } af_packet_if_t; typedef struct @@ -96,6 +127,8 @@ typedef struct u32 tx_frame_size; u32 rx_frames_per_block; u32 tx_frames_per_block; + u8 num_rxqs; + u8 num_txqs; af_packet_if_mode_t mode; /* return */ -- cgit 1.2.3-korg