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   | 41 ++++++++++++++++++++++++++++++--
 3 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 88ff5daba4..678a30e683 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 acf377730a..311084a1f0 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -162,6 +162,10 @@
 #define DPAA2_PKT_TYPE_IPV6_EXT_GRE_IPV6_UDP_TCP \
        (DPAA2_PKT_TYPE_IPV6_EXT | DPAA2_PSR_SUMMARY_GRE_IPV6_UDP_TCP)
 
+#define DPAA2_PKT_TYPE_IPV4_FRAG \
+       (DPAA2_PSR_SUMMARY_IP_FRAG | DPAA2_PKT_TYPE_IPV4)
+#define DPAA2_PKT_TYPE_IPV6_FRAG \
+       (DPAA2_PSR_SUMMARY_IP_FRAG | DPAA2_PKT_TYPE_IPV6)
 #define DPAA2_PKT_TYPE_IPV4_TCP \
        (DPAA2_PSR_SUMMARY_TCP | DPAA2_PKT_TYPE_IPV4)
 #define DPAA2_PKT_TYPE_IPV6_TCP \
@@ -178,6 +182,18 @@
        (DPAA2_PSR_SUMMARY_ICMP | DPAA2_PKT_TYPE_IPV4)
 #define DPAA2_PKT_TYPE_IPV6_ICMP \
        (DPAA2_PSR_SUMMARY_ICMP | DPAA2_PKT_TYPE_IPV6)
+#define DPAA2_PKT_TYPE_IPV4_ESP \
+       (DPAA2_PSR_SUMMARY_IPSEC_ESP | DPAA2_PKT_TYPE_IPV4)
+#define DPAA2_PKT_TYPE_IPV6_ESP \
+       (DPAA2_PSR_SUMMARY_IPSEC_ESP | DPAA2_PKT_TYPE_IPV6)
+#define DPAA2_PKT_TYPE_IPV4_GTPU \
+       (DPAA2_PSR_SUMMARY_GTPU | DPAA2_PKT_TYPE_IPV4)
+#define DPAA2_PKT_TYPE_IPV6_GTPU \
+       (DPAA2_PSR_SUMMARY_GTPU | DPAA2_PKT_TYPE_IPV6)
+#define DPAA2_PKT_TYPE_IPV4_GTPC \
+       (DPAA2_PSR_SUMMARY_GTPC | DPAA2_PKT_TYPE_IPV4)
+#define DPAA2_PKT_TYPE_IPV6_GTPC \
+       (DPAA2_PSR_SUMMARY_GTPC | DPAA2_PKT_TYPE_IPV6)
 
 #define DPAA2_PKT_TYPE_VLAN_1  0x0100
 #define DPAA2_PKT_TYPE_VLAN_2  0x0200
diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index 5a5efb8bff..56bc4e46be 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -174,8 +174,45 @@ dpaa2_dev_rx_parse_new(struct dpaa2_dev_priv *priv,
                         RTE_PTYPE_L3_IPV6;
                 break;
 
-        case DPAA2_PKT_TYPE_ETHER:
-                m->packet_type = RTE_PTYPE_L2_ETHER;
+       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;
+
+       case DPAA2_PKT_TYPE_ETHER:
+               m->packet_type = RTE_PTYPE_L2_ETHER;
                 break;
 
         default:
-- 
2.43.0

Reply via email to