X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2Fdevice%2Fdpdk.h;h=2a3794735d21ead1cd1bca6082d72ccd66dcda22;hb=f91080c01104a5999fe6c08e699b3426fea62dad;hp=0778659db554ffa0f6a4f171ed42daa3f12bde07;hpb=ee7f0bd9e7ce4106d3b9511b0efede4326bded51;p=vpp.git diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h index 0778659db55..2a3794735d2 100644 --- a/src/plugins/dpdk/device/dpdk.h +++ b/src/plugins/dpdk/device/dpdk.h @@ -18,6 +18,8 @@ /* $$$$ We should rename always_inline -> clib_always_inline */ #undef always_inline +#define ALLOW_EXPERIMENTAL_API + #include #include @@ -40,6 +42,7 @@ #include #include #include +#include #include #include @@ -51,6 +54,7 @@ #endif #include +#include #define NB_MBUF (16<<10) @@ -78,7 +82,10 @@ extern vlib_node_registration_t dpdk_input_node; _ ("net_dpaa2", DPAA2) \ _ ("net_virtio_user", VIRTIO_USER) \ _ ("net_vhost", VHOST_ETHER) \ - _ ("net_ena", ENA) + _ ("net_ena", ENA) \ + _ ("net_failsafe", FAILSAFE) \ + _ ("net_liovf", LIOVF_ETHER) \ + _ ("net_qede", QEDE) typedef enum { @@ -107,6 +114,7 @@ typedef enum VNET_DPDK_PORT_TYPE_ETH_VF, VNET_DPDK_PORT_TYPE_VIRTIO_USER, VNET_DPDK_PORT_TYPE_VHOST_ETHER, + VNET_DPDK_PORT_TYPE_FAILSAFE, VNET_DPDK_PORT_TYPE_UNKNOWN, } dpdk_port_type_t; @@ -158,6 +166,7 @@ typedef struct _( 8, BOND_SLAVE_UP, "bond-slave-up") \ _( 9, TX_OFFLOAD, "tx-offload") \ _(10, INTEL_PHDR_CKSUM, "intel-phdr-cksum") \ + _(11, RX_FLOW_OFFLOAD, "rx-flow-offload") enum { @@ -166,14 +175,31 @@ enum #undef _ }; +typedef struct +{ + u32 flow_index; + u32 mark; + struct rte_flow *handle; +} dpdk_flow_entry_t; + +typedef struct +{ + u32 flow_id; + u16 next_index; + i16 buffer_advance; +} dpdk_flow_lookup_entry_t; + typedef struct { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); volatile u32 **lockp; - /* Instance ID */ + /* Instance ID to access internal device array. */ dpdk_portid_t device_index; + /* DPDK device port number */ + dpdk_portid_t port_id; + u32 hw_if_index; u32 sw_if_index; @@ -202,12 +228,21 @@ typedef struct struct rte_eth_conf port_conf; struct rte_eth_txconf tx_conf; + /* flow related */ + u32 supported_flow_actions; + dpdk_flow_entry_t *flow_entries; /* pool */ + dpdk_flow_lookup_entry_t *flow_lookup_entries; /* pool */ + u32 *parked_lookup_indexes; /* vector */ + u32 parked_loop_count; + struct rte_flow_error last_flow_error; + /* HQoS related */ dpdk_device_hqos_per_worker_thread_t *hqos_wt; dpdk_device_hqos_per_hqos_thread_t *hqos_ht; /* af_packet or BondEthernet instance number */ - dpdk_portid_t port_id; + u16 af_packet_instance_num; + u16 bond_instance_num; /* Bonded interface port# of a slave - only valid if DPDK_DEVICE_FLAG_BOND_SLAVE bit is set */ @@ -353,6 +388,13 @@ typedef struct vlib_buffer_t buffer_template; } dpdk_per_thread_data_t; +typedef struct +{ + int pcap_enable; + u32 pcap_sw_if_index; + pcap_main_t pcap_main; +} dpdk_pcap_t; + typedef struct { @@ -367,8 +409,10 @@ typedef struct /* buffer flags template, configurable to enable/disable tcp / udp cksum */ u32 buffer_flags_template; - /* pcap tracing [only works if (CLIB_DEBUG > 0)] */ - int tx_pcap_enable; + /* pcap tracing */ + dpdk_pcap_t pcap[VLIB_N_RX_TX]; + + int pcap_enable; pcap_main_t pcap_main; u8 *pcap_filename; u32 pcap_sw_if_index; @@ -388,9 +432,6 @@ typedef struct f64 link_state_poll_interval; f64 stat_poll_interval; - /* Sleep for this many usec after each device poll */ - u32 poll_sleep_usec; - /* convenience */ vlib_main_t *vlib_main; vnet_main_t *vnet_main; @@ -472,7 +513,10 @@ format_function_t format_dpdk_tx_trace; format_function_t format_dpdk_rx_trace; format_function_t format_dpdk_rte_mbuf; format_function_t format_dpdk_rx_rte_mbuf; +format_function_t format_dpdk_flow; unformat_function_t unformat_dpdk_log_level; +vnet_flow_dev_ops_function_t dpdk_flow_ops_fn; + clib_error_t *unformat_rss_fn (unformat_input_t * input, uword * rss_fn); clib_error_t *unformat_hqos (unformat_input_t * input, dpdk_device_config_hqos_t * hqos);