DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] gro: fix an error when packet is IPv6
@ 2020-11-04  4:22 yang_y_yi
  2020-11-05  1:41 ` Hu, Jiayu
  2020-11-05  2:54 ` [dpdk-dev] [PATCH v2] " yang_y_yi
  0 siblings, 2 replies; 6+ messages in thread
From: yang_y_yi @ 2020-11-04  4:22 UTC (permalink / raw)
  To: dev; +Cc: jiayu.hu, konstantin.ananyev, thomas, yangyi01, yang_y_yi

From: Yi Yang <yangyi01@inspur.com>

Current code will think IPv6 packet as IPv4 packet
if inner header is IPv6 and outer header is IPv4,
the result is rte_gro_reassemble() will handle it
as if inner header also is IPv4, so IPv6 can't
be handled correctly as one of unprocess_pkts.

Fixes: e2d811063673 ("gro: support VXLAN UDP/IPv4")
Fixes: 1ca5e6740852 ("gro: support UDP/IPv4")
Fixes: 9e0b9d2ec0f4 ("gro: support VxLAN GRO")
Fixes: 0d2cbe59b719 ("lib/gro: support TCP/IPv4")
Signed-off-by: Yi Yang <yangyi01@inspur.com>
---
 lib/librte_gro/rte_gro.c | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/lib/librte_gro/rte_gro.c b/lib/librte_gro/rte_gro.c
index e56bd20..4347267 100644
--- a/lib/librte_gro/rte_gro.c
+++ b/lib/librte_gro/rte_gro.c
@@ -32,32 +32,38 @@
 			NULL};
 
 #define IS_IPV4_TCP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP))
+		((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP) && \
+		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == 0))
 
 #define IS_IPV4_UDP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP))
+		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
+		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == 0))
 
 #define IS_IPV4_VXLAN_TCP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
 		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
 		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \
 		 RTE_PTYPE_TUNNEL_VXLAN) && \
-		 ((ptype & RTE_PTYPE_INNER_L4_TCP) == \
-		  RTE_PTYPE_INNER_L4_TCP) && \
-		  (((ptype & RTE_PTYPE_INNER_L3_MASK) & \
-		    (RTE_PTYPE_INNER_L3_IPV4 | \
-		     RTE_PTYPE_INNER_L3_IPV4_EXT | \
-		     RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)) != 0))
+		((ptype & RTE_PTYPE_INNER_L4_TCP) == \
+		 RTE_PTYPE_INNER_L4_TCP) && \
+		(((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4) || \
+		 ((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4_EXT) || \
+		 ((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)))
 
 #define IS_IPV4_VXLAN_UDP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
 		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
 		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \
 		 RTE_PTYPE_TUNNEL_VXLAN) && \
-		 ((ptype & RTE_PTYPE_INNER_L4_UDP) == \
-		  RTE_PTYPE_INNER_L4_UDP) && \
-		  (((ptype & RTE_PTYPE_INNER_L3_MASK) & \
-		    (RTE_PTYPE_INNER_L3_IPV4 | \
-		     RTE_PTYPE_INNER_L3_IPV4_EXT | \
-		     RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)) != 0))
+		((ptype & RTE_PTYPE_INNER_L4_UDP) == \
+		 RTE_PTYPE_INNER_L4_UDP) && \
+		(((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4) || \
+		 ((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4_EXT) || \
+		 ((ptype & RTE_PTYPE_INNER_L3_MASK) == \
+		  RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)))
 
 /*
  * GRO context structure. It keeps the table structures, which are
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-11-14  8:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-04  4:22 [dpdk-dev] [PATCH] gro: fix an error when packet is IPv6 yang_y_yi
2020-11-05  1:41 ` Hu, Jiayu
2020-11-05  1:48   ` yang_y_yi
2020-11-05  2:54 ` [dpdk-dev] [PATCH v2] " yang_y_yi
2020-11-05  6:08   ` Hu, Jiayu
2020-11-14  8:47     ` Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).