interface: support configuring RSS steering queues
[vpp.git] / src / plugins / dpdk / device / dpdk.h
index 68d9e71..40f9dce 100644 (file)
@@ -68,6 +68,7 @@ extern vlib_node_registration_t admin_up_down_process_node;
   _ ("net_i40e", I40E)            \
   _ ("net_i40e_vf", I40EVF)       \
   _ ("net_ice", ICE)              \
+  _ ("net_iavf", IAVF)            \
   _ ("net_virtio", VIRTIO)        \
   _ ("net_enic", ENIC)            \
   _ ("net_vmxnet3", VMXNET3)      \
@@ -155,13 +156,24 @@ typedef struct
 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;
@@ -169,13 +181,18 @@ typedef struct
   /* 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;
@@ -184,11 +201,6 @@ typedef struct
   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;
 
@@ -225,21 +237,6 @@ typedef struct
 #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) \
@@ -263,6 +260,7 @@ typedef struct
     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
@@ -376,7 +374,6 @@ typedef struct
 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);
@@ -409,6 +406,33 @@ typedef enum
 
 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;