From: Hemant Agrawal <[email protected]> Extend dpaa2_dev_rx_parse_new() (LX2160A FRC fast path) to identify IPv4/IPv6 fragmented packets, IPsec ESP, and GTP-U/GTP-C packets.
Map the corresponding parser summary values to DPDK packet types. GTP-U and GTP-C packets are additionally marked with RTE_PTYPE_L4_UDP to reflect the UDP transport used by the outer tunnel header. Advertise the newly supported packet types through dpaa2_supported_ptypes_get(). Signed-off-by: Hemant Agrawal <[email protected]> --- drivers/net/dpaa2/dpaa2_ethdev.c | 4 ++++ drivers/net/dpaa2/dpaa2_ethdev.h | 16 ++++++++++++++ drivers/net/dpaa2/dpaa2_rxtx.c | 36 ++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 37c671bebf..0c1f176291 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1371,6 +1371,10 @@ dpaa2_supported_ptypes_get(struct rte_eth_dev *dev, size_t *no_of_elements) RTE_PTYPE_L4_UDP, RTE_PTYPE_L4_SCTP, RTE_PTYPE_L4_ICMP, + RTE_PTYPE_L4_FRAG, + RTE_PTYPE_TUNNEL_ESP, + RTE_PTYPE_TUNNEL_GTPU, + RTE_PTYPE_TUNNEL_GTPC, }; if (dev->rx_pkt_burst == dpaa2_dev_prefetch_rx || diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 160178d70e..8e1852741c 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -131,6 +131,10 @@ (0x0001 | DPAA2_PKT_TYPE_IPV4) #define DPAA2_PKT_TYPE_IPV6_EXT \ (0x0001 | DPAA2_PKT_TYPE_IPV6) +#define DPAA2_PKT_TYPE_IPV4_FRAG \ + (0x0002 | DPAA2_PKT_TYPE_IPV4) +#define DPAA2_PKT_TYPE_IPV6_FRAG \ + (0x0002 | DPAA2_PKT_TYPE_IPV6) #define DPAA2_PKT_TYPE_IPV4_TCP \ (0x000e | DPAA2_PKT_TYPE_IPV4) #define DPAA2_PKT_TYPE_IPV6_TCP \ @@ -147,6 +151,18 @@ (0x0003 | DPAA2_PKT_TYPE_IPV4_EXT) #define DPAA2_PKT_TYPE_IPV6_ICMP \ (0x0003 | DPAA2_PKT_TYPE_IPV6_EXT) +#define DPAA2_PKT_TYPE_IPV4_ESP \ + (0x0005 | DPAA2_PKT_TYPE_IPV4) +#define DPAA2_PKT_TYPE_IPV6_ESP \ + (0x0005 | DPAA2_PKT_TYPE_IPV6) +#define DPAA2_PKT_TYPE_IPV4_GTPU \ + (0x0014 | DPAA2_PKT_TYPE_IPV4) +#define DPAA2_PKT_TYPE_IPV6_GTPU \ + (0x0014 | DPAA2_PKT_TYPE_IPV6) +#define DPAA2_PKT_TYPE_IPV4_GTPC \ + (0x0015 | DPAA2_PKT_TYPE_IPV4) +#define DPAA2_PKT_TYPE_IPV6_GTPC \ + (0x0015 | DPAA2_PKT_TYPE_IPV6) #define DPAA2_PKT_TYPE_VLAN_1 0x0160 #define DPAA2_PKT_TYPE_VLAN_2 0x0260 diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 62565486a7..7da75649e2 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -116,6 +116,42 @@ dpaa2_dev_rx_parse_new(struct rte_mbuf *m, const struct qbman_fd *fd, m->packet_type = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_ICMP; break; + case DPAA2_PKT_TYPE_IPV4_FRAG: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_FRAG; + break; + case DPAA2_PKT_TYPE_IPV6_FRAG: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_FRAG; + break; + case DPAA2_PKT_TYPE_IPV4_ESP: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_ESP; + break; + case DPAA2_PKT_TYPE_IPV6_ESP: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_ESP; + break; + case DPAA2_PKT_TYPE_IPV4_GTPU: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_GTPU; + break; + case DPAA2_PKT_TYPE_IPV6_GTPU: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_GTPU; + break; + case DPAA2_PKT_TYPE_IPV4_GTPC: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_GTPC; + break; + case DPAA2_PKT_TYPE_IPV6_GTPC: + m->packet_type = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_GTPC; + break; default: m->packet_type = dpaa2_dev_rx_parse_slow(m, annotation); } -- 2.43.0

