net/ixgbe: support packet type parsing in SSE Rx
Hardware PTYPE in Rx desc will be parsed to fill mbuf's packet_type. Signed-off-by: Ray Kinsella <ray.kinsella@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
parent
4329cb8111
commit
ee4427e0fe
@ -3706,6 +3706,12 @@ ixgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev)
|
||||
dev->rx_pkt_burst == ixgbe_recv_pkts_lro_bulk_alloc ||
|
||||
dev->rx_pkt_burst == ixgbe_recv_pkts_bulk_alloc)
|
||||
return ptypes;
|
||||
|
||||
#if defined(RTE_ARCH_X86)
|
||||
if (dev->rx_pkt_burst == ixgbe_recv_pkts_vec ||
|
||||
dev->rx_pkt_burst == ixgbe_recv_scattered_pkts_vec)
|
||||
return ptypes;
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1084,282 +1084,279 @@ ixgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
|
||||
#define IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_TCP 0X9D
|
||||
#define IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_UDP 0XAD
|
||||
|
||||
#define IXGBE_PACKET_TYPE_MAX 0X80
|
||||
#define IXGBE_PACKET_TYPE_TN_MAX 0X100
|
||||
#define IXGBE_PACKET_TYPE_SHIFT 0X04
|
||||
/**
|
||||
* Use 2 different table for normal packet and tunnel packet
|
||||
* to save the space.
|
||||
*/
|
||||
const uint32_t
|
||||
ptype_table[IXGBE_PACKET_TYPE_MAX] __rte_cache_aligned = {
|
||||
[IXGBE_PACKET_TYPE_ETHER] = RTE_PTYPE_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_SCTP] =
|
||||
RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
};
|
||||
|
||||
const uint32_t
|
||||
ptype_table_tn[IXGBE_PACKET_TYPE_TN_MAX] __rte_cache_aligned = {
|
||||
[IXGBE_PACKET_TYPE_NVGRE] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT_TCP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT_UDP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
|
||||
[IXGBE_PACKET_TYPE_VXLAN] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_TCP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_UDP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
};
|
||||
|
||||
/* @note: fix ixgbe_dev_supported_ptypes_get() if any change here. */
|
||||
static inline uint32_t
|
||||
ixgbe_rxd_pkt_info_to_pkt_type(uint32_t pkt_info, uint16_t ptype_mask)
|
||||
{
|
||||
/**
|
||||
* Use 2 different table for normal packet and tunnel packet
|
||||
* to save the space.
|
||||
*/
|
||||
static const uint32_t
|
||||
ptype_table[IXGBE_PACKET_TYPE_MAX] __rte_cache_aligned = {
|
||||
[IXGBE_PACKET_TYPE_ETHER] = RTE_PTYPE_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_IPV4_EXT_IPV6_EXT_SCTP] =
|
||||
RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
};
|
||||
|
||||
static const uint32_t
|
||||
ptype_table_tn[IXGBE_PACKET_TYPE_TN_MAX] __rte_cache_aligned = {
|
||||
[IXGBE_PACKET_TYPE_NVGRE] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT_TCP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_IPV6_EXT_UDP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_NVGRE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
|
||||
RTE_PTYPE_INNER_L4_UDP,
|
||||
|
||||
[IXGBE_PACKET_TYPE_VXLAN] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_TCP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_IPV6_EXT_UDP] =
|
||||
RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
|
||||
RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
|
||||
RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_SCTP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_TCP,
|
||||
[IXGBE_PACKET_TYPE_VXLAN_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
|
||||
RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
|
||||
RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
|
||||
RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_UDP,
|
||||
};
|
||||
|
||||
if (unlikely(pkt_info & IXGBE_RXDADV_PKTTYPE_ETQF))
|
||||
return RTE_PTYPE_UNKNOWN;
|
||||
|
@ -87,6 +87,10 @@
|
||||
#define IXGBE_PACKET_TYPE_MASK_TUNNEL 0XFF
|
||||
#define IXGBE_PACKET_TYPE_TUNNEL_BIT 0X1000
|
||||
|
||||
#define IXGBE_PACKET_TYPE_MAX 0X80
|
||||
#define IXGBE_PACKET_TYPE_TN_MAX 0X100
|
||||
#define IXGBE_PACKET_TYPE_SHIFT 0X04
|
||||
|
||||
/**
|
||||
* Structure associated with each descriptor of the RX ring of a RX queue.
|
||||
*/
|
||||
@ -309,6 +313,9 @@ int ixgbe_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev);
|
||||
int ixgbe_rxq_vec_setup(struct ixgbe_rx_queue *rxq);
|
||||
void ixgbe_rx_queue_release_mbufs_vec(struct ixgbe_rx_queue *rxq);
|
||||
|
||||
extern const uint32_t ptype_table[IXGBE_PACKET_TYPE_MAX];
|
||||
extern const uint32_t ptype_table_tn[IXGBE_PACKET_TYPE_TN_MAX];
|
||||
|
||||
#ifdef RTE_IXGBE_INC_VECTOR
|
||||
|
||||
uint16_t ixgbe_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
|
@ -232,6 +232,68 @@ desc_to_olflags_v(__m128i descs[4], __m128i mbuf_init, uint8_t vlan_flags,
|
||||
_mm_store_si128((__m128i *)&rx_pkts[3]->rearm_data, rearm3);
|
||||
}
|
||||
|
||||
static inline uint32_t get_packet_type(int index,
|
||||
uint32_t pkt_info,
|
||||
uint32_t etqf_check,
|
||||
uint32_t tunnel_check)
|
||||
{
|
||||
if (etqf_check & (0x02 << (index * RTE_IXGBE_DESCS_PER_LOOP)))
|
||||
return RTE_PTYPE_UNKNOWN;
|
||||
|
||||
if (tunnel_check & (0x02 << (index * RTE_IXGBE_DESCS_PER_LOOP))) {
|
||||
pkt_info &= IXGBE_PACKET_TYPE_MASK_TUNNEL;
|
||||
return ptype_table_tn[pkt_info];
|
||||
}
|
||||
|
||||
pkt_info &= IXGBE_PACKET_TYPE_MASK_82599;
|
||||
return ptype_table[pkt_info];
|
||||
}
|
||||
|
||||
static inline void
|
||||
desc_to_ptype_v(__m128i descs[4], uint16_t pkt_type_mask,
|
||||
struct rte_mbuf **rx_pkts)
|
||||
{
|
||||
__m128i etqf_mask = _mm_set_epi64x(0x800000008000LL, 0x800000008000LL);
|
||||
__m128i ptype_mask = _mm_set_epi32(
|
||||
pkt_type_mask, pkt_type_mask, pkt_type_mask, pkt_type_mask);
|
||||
__m128i tunnel_mask =
|
||||
_mm_set_epi64x(0x100000001000LL, 0x100000001000LL);
|
||||
|
||||
uint32_t etqf_check, tunnel_check, pkt_info;
|
||||
|
||||
__m128i ptype0 = _mm_unpacklo_epi32(descs[0], descs[2]);
|
||||
__m128i ptype1 = _mm_unpacklo_epi32(descs[1], descs[3]);
|
||||
|
||||
/* interleave low 32 bits,
|
||||
* now we have 4 ptypes in a XMM register
|
||||
*/
|
||||
ptype0 = _mm_unpacklo_epi32(ptype0, ptype1);
|
||||
|
||||
/* create a etqf bitmask based on the etqf bit. */
|
||||
etqf_check = _mm_movemask_epi8(_mm_and_si128(ptype0, etqf_mask));
|
||||
|
||||
/* shift left by IXGBE_PACKET_TYPE_SHIFT, and apply ptype mask */
|
||||
ptype0 = _mm_and_si128(_mm_srli_epi32(ptype0, IXGBE_PACKET_TYPE_SHIFT),
|
||||
ptype_mask);
|
||||
|
||||
/* create a tunnel bitmask based on the tunnel bit */
|
||||
tunnel_check = _mm_movemask_epi8(
|
||||
_mm_slli_epi32(_mm_and_si128(ptype0, tunnel_mask), 0x3));
|
||||
|
||||
pkt_info = _mm_extract_epi32(ptype0, 0);
|
||||
rx_pkts[0]->packet_type =
|
||||
get_packet_type(0, pkt_info, etqf_check, tunnel_check);
|
||||
pkt_info = _mm_extract_epi32(ptype0, 1);
|
||||
rx_pkts[1]->packet_type =
|
||||
get_packet_type(1, pkt_info, etqf_check, tunnel_check);
|
||||
pkt_info = _mm_extract_epi32(ptype0, 2);
|
||||
rx_pkts[2]->packet_type =
|
||||
get_packet_type(2, pkt_info, etqf_check, tunnel_check);
|
||||
pkt_info = _mm_extract_epi32(ptype0, 3);
|
||||
rx_pkts[3]->packet_type =
|
||||
get_packet_type(3, pkt_info, etqf_check, tunnel_check);
|
||||
}
|
||||
|
||||
/*
|
||||
* vPMD raw receive routine, only accept(nb_pkts >= RTE_IXGBE_DESCS_PER_LOOP)
|
||||
*
|
||||
@ -461,6 +523,8 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
|
||||
_mm_storeu_si128((void *)&rx_pkts[pos]->rx_descriptor_fields1,
|
||||
pkt_mb1);
|
||||
|
||||
desc_to_ptype_v(descs, rxq->pkt_type_mask, &rx_pkts[pos]);
|
||||
|
||||
/* C.4 calc avaialbe number of desc */
|
||||
var = __builtin_popcountll(_mm_cvtsi128_si64(staterr));
|
||||
nb_pkts_recd += var;
|
||||
|
Loading…
Reference in New Issue
Block a user