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. Fragmented IPv4/IPv6 packets are reported with RTE_PTYPE_L4_FRAG. 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 | 20 ++++++++++++--- drivers/net/dpaa2/dpaa2_rxtx.c | 44 ++++++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index f88ecb88aa..72b37a988d 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 2569b2bd83..dc72939103 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -127,9 +127,9 @@ #define DPAA2_PKT_TYPE_ETHER 0x0060 #define DPAA2_PKT_TYPE_IPV4 0x0000 #define DPAA2_PKT_TYPE_IPV6 0x0020 -#define DPAA2_PKT_TYPE_IPV4_EXT \ +#define DPAA2_PKT_TYPE_IPV4_FRAG \ (0x0001 | DPAA2_PKT_TYPE_IPV4) -#define DPAA2_PKT_TYPE_IPV6_EXT \ +#define DPAA2_PKT_TYPE_IPV6_FRAG \ (0x0001 | DPAA2_PKT_TYPE_IPV6) #define DPAA2_PKT_TYPE_IPV4_TCP \ (0x000e | DPAA2_PKT_TYPE_IPV4) @@ -144,9 +144,21 @@ #define DPAA2_PKT_TYPE_IPV6_SCTP \ (0x000f | DPAA2_PKT_TYPE_IPV6) #define DPAA2_PKT_TYPE_IPV4_ICMP \ - (0x0003 | DPAA2_PKT_TYPE_IPV4_EXT) + (0x0003 | DPAA2_PKT_TYPE_IPV4_FRAG) #define DPAA2_PKT_TYPE_IPV6_ICMP \ - (0x0003 | DPAA2_PKT_TYPE_IPV6_EXT) + (0x0003 | DPAA2_PKT_TYPE_IPV6_FRAG) +#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 71e292fea6..c2c581f69b 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -76,14 +76,6 @@ 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; break; - case DPAA2_PKT_TYPE_IPV4_EXT: - m->packet_type = RTE_PTYPE_L2_ETHER | - RTE_PTYPE_L3_IPV4_EXT; - break; - case DPAA2_PKT_TYPE_IPV6_EXT: - m->packet_type = RTE_PTYPE_L2_ETHER | - RTE_PTYPE_L3_IPV6_EXT; - break; case DPAA2_PKT_TYPE_IPV4_TCP: m->packet_type = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP; @@ -116,6 +108,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

