diff options
author | Damjan Marion <damarion@cisco.com> | 2017-11-17 09:46:41 +0100 |
---|---|---|
committer | Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com> | 2017-11-20 11:41:22 +0000 |
commit | 45b485099d8bdf5985e9869bc8221852073f9369 (patch) | |
tree | 184c75dbe758a9606c16b89a56d4f62965c01663 /src/plugins/dpdk/device | |
parent | 9d1d73a9010dcd0929dc932af1fd7117863f6758 (diff) |
dpdk: add support for DPDK 17.11
Also remove DPDK 17.05 support.
Change-Id: I4f96cb3f002cd90b12d800d6904f2364d7c4e270
Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/plugins/dpdk/device')
-rw-r--r-- | src/plugins/dpdk/device/common.c | 23 | ||||
-rw-r--r-- | src/plugins/dpdk/device/dpdk.h | 22 | ||||
-rw-r--r-- | src/plugins/dpdk/device/format.c | 12 | ||||
-rwxr-xr-x | src/plugins/dpdk/device/init.c | 2 |
4 files changed, 30 insertions, 29 deletions
diff --git a/src/plugins/dpdk/device/common.c b/src/plugins/dpdk/device/common.c index c65cec6734d..d488d69e553 100644 --- a/src/plugins/dpdk/device/common.c +++ b/src/plugins/dpdk/device/common.c @@ -155,11 +155,11 @@ dpdk_device_start (dpdk_device_t * xd) if (xd->pmd == VNET_DPDK_PMD_BOND) { - u8 slink[16]; + dpdk_portid_t slink[16]; int nlink = rte_eth_bond_slaves_get (xd->device_index, slink, 16); while (nlink >= 1) { - u8 dpdk_port = slink[--nlink]; + dpdk_portid_t dpdk_port = slink[--nlink]; rte_eth_allmulticast_enable (dpdk_port); } } @@ -177,11 +177,11 @@ dpdk_device_stop (dpdk_device_t * xd) /* For bonded interface, stop slave links */ if (xd->pmd == VNET_DPDK_PMD_BOND) { - u8 slink[16]; + dpdk_portid_t slink[16]; int nlink = rte_eth_bond_slaves_get (xd->device_index, slink, 16); while (nlink >= 1) { - u8 dpdk_port = slink[--nlink]; + dpdk_portid_t dpdk_port = slink[--nlink]; rte_eth_dev_stop (dpdk_port); } } @@ -246,7 +246,7 @@ garp_na_proc_callback (uword * dpdk_port) } always_inline int -dpdk_port_state_callback_inline (uint8_t port_id, +dpdk_port_state_callback_inline (dpdk_portid_t port_id, enum rte_eth_event_type type, void *param) { struct rte_eth_link link; @@ -294,24 +294,15 @@ dpdk_port_state_callback_inline (uint8_t port_id, return 0; } -#if DPDK_VOID_CALLBACK -void -dpdk_port_state_callback (uint8_t port_id, - enum rte_eth_event_type type, void *param) -{ - dpdk_port_state_callback_inline (port_id, type, param); -} - -#else int -dpdk_port_state_callback (uint8_t port_id, +dpdk_port_state_callback (dpdk_portid_t port_id, enum rte_eth_event_type type, void *param, void *ret_param __attribute__ ((unused))) { return dpdk_port_state_callback_inline (port_id, type, param); } -#endif + /* * fd.io coding-style-patch-verification: ON * diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h index 669629293c0..efcc5a766bf 100644 --- a/src/plugins/dpdk/device/dpdk.h +++ b/src/plugins/dpdk/device/dpdk.h @@ -39,6 +39,9 @@ #include <rte_eth_bond.h> #include <rte_sched.h> #include <rte_net.h> +#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 0) +#include <rte_bus_pci.h> +#endif #include <vnet/unix/pcap.h> #include <vnet/devices/devices.h> @@ -115,6 +118,12 @@ typedef struct u64 tx_tail; } tx_ring_hdr_t; +#if RTE_VERSION < RTE_VERSION_NUM(17, 11, 0, 0) +typedef uint8_t dpdk_portid_t; +#else +typedef uint16_t dpdk_portid_t; +#endif + typedef struct { struct rte_ring *swq; @@ -150,7 +159,7 @@ typedef struct volatile u32 **lockp; /* Instance ID */ - u32 device_index; + dpdk_portid_t device_index; u32 hw_if_index; u32 vlib_sw_if_index; @@ -203,11 +212,11 @@ typedef struct dpdk_device_hqos_per_hqos_thread_t *hqos_ht; /* af_packet or BondEthernet instance number */ - u8 port_id; + dpdk_portid_t port_id; /* Bonded interface port# of a slave - only valid if DPDK_DEVICE_FLAG_BOND_SLAVE bit is set */ - u8 bond_port; + dpdk_portid_t bond_port; struct rte_eth_link link; f64 time_last_link_update; @@ -422,14 +431,9 @@ void dpdk_device_setup (dpdk_device_t * xd); void dpdk_device_start (dpdk_device_t * xd); void dpdk_device_stop (dpdk_device_t * xd); -#if DPDK_VOID_CALLBACK -void dpdk_port_state_callback (uint8_t port_id, - enum rte_eth_event_type type, void *param); -#else -int dpdk_port_state_callback (uint8_t port_id, +int dpdk_port_state_callback (dpdk_portid_t port_id, enum rte_eth_event_type type, void *param, void *ret_param); -#endif #define foreach_dpdk_error \ _(NONE, "no error") \ diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c index a2635c53ca4..8f1f729d89a 100644 --- a/src/plugins/dpdk/device/format.c +++ b/src/plugins/dpdk/device/format.c @@ -79,18 +79,24 @@ _(DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM, "outer-ipv4-cksum") \ _(DEV_TX_OFFLOAD_QINQ_INSERT, "qinq-insert") +#if RTE_VERSION < RTE_VERSION_NUM(17, 11, 0, 0) +#define PKT_RX_VLAN PKT_RX_VLAN_PKT +#endif + #define foreach_dpdk_pkt_rx_offload_flag \ - _ (PKT_RX_VLAN_PKT, "RX packet is a 802.1q VLAN packet") \ + _ (PKT_RX_VLAN, "RX packet is a 802.1q VLAN packet") \ _ (PKT_RX_RSS_HASH, "RX packet with RSS hash result") \ _ (PKT_RX_FDIR, "RX packet with FDIR infos") \ _ (PKT_RX_L4_CKSUM_BAD, "L4 cksum of RX pkt. is not OK") \ _ (PKT_RX_IP_CKSUM_BAD, "IP cksum of RX pkt. is not OK") \ + _ (PKT_RX_EIP_CKSUM_BAD, "External IP header checksum error") \ _ (PKT_RX_VLAN_STRIPPED, "RX packet VLAN tag stripped") \ _ (PKT_RX_IP_CKSUM_GOOD, "IP cksum of RX pkt. is valid") \ _ (PKT_RX_L4_CKSUM_GOOD, "L4 cksum of RX pkt. is valid") \ _ (PKT_RX_IEEE1588_PTP, "RX IEEE1588 L2 Ethernet PT Packet") \ _ (PKT_RX_IEEE1588_TMST, "RX IEEE1588 L2/L4 timestamped packet") \ - _ (PKT_RX_QINQ_STRIPPED, "RX packet QinQ tags stripped") + _ (PKT_RX_QINQ_STRIPPED, "RX packet QinQ tags stripped") \ + _ (PKT_RX_TIMESTAMP, "Timestamp field is valid") #define foreach_dpdk_pkt_type \ _ (L2, ETHER, "Ethernet packet") \ @@ -728,7 +734,7 @@ format_dpdk_rte_mbuf (u8 * s, va_list * va) s = format (s, "\n%U%U", format_white_space, indent, format_dpdk_pkt_offload_flags, &mb->ol_flags); - if ((mb->ol_flags & PKT_RX_VLAN_PKT) && + if ((mb->ol_flags & PKT_RX_VLAN) && ((mb->ol_flags & (PKT_RX_VLAN_STRIPPED | PKT_RX_QINQ_STRIPPED)) == 0)) { ethernet_vlan_header_tv_t *vlan_hdr = diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index 9e7bb75d6f3..3cd040a0577 100755 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -1441,7 +1441,7 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) if (xd->pmd == VNET_DPDK_PMD_BOND) { u8 addr[6]; - u8 slink[16]; + dpdk_portid_t slink[16]; int nlink = rte_eth_bond_slaves_get (i, slink, 16); if (nlink > 0) { |