extern vlib_node_registration_t dpdk_input_node;
extern vlib_node_registration_t admin_up_down_process_node;
+#if RTE_VERSION < RTE_VERSION_NUM(20, 8, 0, 0)
+#define DPDK_MLX5_PMD_NAME "net_mlx5"
+#else
+#define DPDK_MLX5_PMD_NAME "mlx5_pci"
+#endif
+
#define foreach_dpdk_pmd \
_ ("net_thunderx", THUNDERX) \
_ ("net_e1000_em", E1000EM) \
_ ("net_i40e", I40E) \
_ ("net_i40e_vf", I40EVF) \
_ ("net_ice", ICE) \
+ _ ("net_iavf", IAVF) \
_ ("net_virtio", VIRTIO) \
_ ("net_enic", ENIC) \
_ ("net_vmxnet3", VMXNET3) \
_ ("net_fm10k", FM10K) \
_ ("net_cxgbe", CXGBE) \
_ ("net_mlx4", MLX4) \
- _ ("net_mlx5", MLX5) \
+ _ (DPDK_MLX5_PMD_NAME, MLX5) \
_ ("net_dpaa2", DPAA2) \
_ ("net_virtio_user", VIRTIO_USER) \
_ ("net_vhost", VHOST_ETHER) \
typedef struct
{
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
- volatile u32 **lockp;
+ u8 buffer_pool_index;
+} dpdk_rx_queue_t;
- /* Instance ID to access internal device array. */
- dpdk_portid_t device_index;
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+ clib_spinlock_t lock;
+} dpdk_tx_queue_t;
- /* DPDK device port number */
- dpdk_portid_t port_id;
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+
+ dpdk_rx_queue_t *rx_queues;
+ dpdk_tx_queue_t *tx_queues;
+
+ /* Instance ID to access internal device array. */
+ u32 device_index;
u32 hw_if_index;
u32 sw_if_index;
/* next node index if we decide to steal the rx graph arc */
u32 per_interface_next_index;
+ u16 rx_q_used;
+ u16 tx_q_used;
+ u16 flags;
+
+ /* DPDK device port number */
+ dpdk_portid_t port_id;
dpdk_pmd_t pmd:8;
i8 cpu_socket;
- u16 flags;
-
- u16 nb_tx_desc;
CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
+ u16 nb_tx_desc;
+ u16 nb_rx_desc;
u8 *name;
u8 *interface_name_suffix;
u16 num_subifs;
/* PMD related */
- u16 tx_q_used;
- u16 rx_q_used;
- u16 nb_rx_desc;
- u16 *cpu_socket_id_by_queue;
- u8 *buffer_pool_for_queue;
struct rte_eth_conf port_conf;
struct rte_eth_txconf tx_conf;
#define DPDK_LINK_POLL_INTERVAL (3.0)
#define DPDK_MIN_LINK_POLL_INTERVAL (0.001) /* 1msec */
-typedef struct
-{
- u32 device;
- u16 queue_id;
-} dpdk_device_and_queue_t;
-
-#ifndef DPDK_HQOS_DBG_BYPASS
-#define DPDK_HQOS_DBG_BYPASS 0
-#endif
-
-#ifndef HQOS_FLUSH_COUNT_THRESHOLD
-#define HQOS_FLUSH_COUNT_THRESHOLD 100000
-#endif
-
-
#define foreach_dpdk_device_config_item \
_ (num_rx_queues) \
_ (num_tx_queues) \
clib_bitmap_t * workers;
u8 tso;
u8 *devargs;
+ clib_bitmap_t *rss_queues;
#define DPDK_DEVICE_TSO_DEFAULT 0
#define DPDK_DEVICE_TSO_OFF 1
/* logging */
vlib_log_class_t log_default;
+ vlib_log_class_t log_cryptodev;
+ vlib_log_class_t log_ipsec;
} dpdk_main_t;
extern dpdk_main_t dpdk_main;
u16 device_index;
u8 queue_index;
struct rte_mbuf mb;
+ u8 data[256]; /* First 256 data bytes, used for hexdump */
/* Copy of VLIB buffer; packet data stored in pre_data. */
vlib_buffer_t buffer;
- u8 data[256]; /* First 256 data bytes, used for hexdump */
} dpdk_tx_trace_t;
typedef struct
u16 device_index;
u16 queue_index;
struct rte_mbuf mb;
- vlib_buffer_t buffer; /* Copy of VLIB buffer; pkt data stored in pre_data. */
u8 data[256]; /* First 256 data bytes, used for hexdump */
+ vlib_buffer_t buffer; /* Copy of VLIB buffer; pkt data stored in pre_data. */
} dpdk_rx_trace_t;
void dpdk_device_setup (dpdk_device_t * xd);
void dpdk_device_start (dpdk_device_t * xd);
void dpdk_device_stop (dpdk_device_t * xd);
-
int dpdk_port_state_callback (dpdk_portid_t port_id,
enum rte_eth_event_type type,
void *param, void *ret_param);
void dpdk_update_link_state (dpdk_device_t * xd, f64 now);
+#define foreach_dpdk_rss_hf \
+ _(0, ETH_RSS_FRAG_IPV4, "ipv4-frag") \
+ _(1, ETH_RSS_NONFRAG_IPV4_TCP, "ipv4-tcp") \
+ _(2, ETH_RSS_NONFRAG_IPV4_UDP, "ipv4-udp") \
+ _(3, ETH_RSS_NONFRAG_IPV4_SCTP, "ipv4-sctp") \
+ _(4, ETH_RSS_NONFRAG_IPV4_OTHER, "ipv4-other") \
+ _(5, ETH_RSS_IPV4, "ipv4") \
+ _(6, ETH_RSS_IPV6_TCP_EX, "ipv6-tcp-ex") \
+ _(7, ETH_RSS_IPV6_UDP_EX, "ipv6-udp-ex") \
+ _(8, ETH_RSS_FRAG_IPV6, "ipv6-frag") \
+ _(9, ETH_RSS_NONFRAG_IPV6_TCP, "ipv6-tcp") \
+ _(10, ETH_RSS_NONFRAG_IPV6_UDP, "ipv6-udp") \
+ _(11, ETH_RSS_NONFRAG_IPV6_SCTP, "ipv6-sctp") \
+ _(12, ETH_RSS_NONFRAG_IPV6_OTHER, "ipv6-other") \
+ _(13, ETH_RSS_IPV6_EX, "ipv6-ex") \
+ _(14, ETH_RSS_IPV6, "ipv6") \
+ _(15, ETH_RSS_L2_PAYLOAD, "l2-payload") \
+ _(16, ETH_RSS_PORT, "port") \
+ _(17, ETH_RSS_VXLAN, "vxlan") \
+ _(18, ETH_RSS_GENEVE, "geneve") \
+ _(19, ETH_RSS_NVGRE, "nvgre") \
+ _(20, ETH_RSS_GTPU, "gtpu") \
+ _(60, ETH_RSS_L4_DST_ONLY, "l4-dst-only") \
+ _(61, ETH_RSS_L4_SRC_ONLY, "l4-src-only") \
+ _(62, ETH_RSS_L3_DST_ONLY, "l3-dst-only") \
+ _(63, ETH_RSS_L3_SRC_ONLY, "l3-src-only")
+
format_function_t format_dpdk_device_name;
format_function_t format_dpdk_device;
format_function_t format_dpdk_device_errors;