[dpdk-dev] [PATCH] gso: fix pyld_unit_size issue for udp gso

yang_y_yi at 163.com yang_y_yi at 163.com
Wed Aug 26 05:06:00 CEST 2020


From: Yi Yang <yangyi01 at inspur.com>

IP fragment offset in IP header must be multiple of
8, if pyld_unit_size isn't multiple of 8, IP total
length will be wrong after reassemble, IP payload
also will be wrong because some data is lost on
reassembling.

This has been verified in OVS DPDK by VLAN TSO iperf3
UDP case.

Fixes: b166d4f30b66 ("gso: support UDP/IPv4 fragmentation")

Signed-off-by: Yi Yang <yangyi01 at inspur.com>
---
 lib/librte_gso/gso_udp4.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/librte_gso/gso_udp4.c b/lib/librte_gso/gso_udp4.c
index 21fea09..6fa68f2 100644
--- a/lib/librte_gso/gso_udp4.c
+++ b/lib/librte_gso/gso_udp4.c
@@ -69,7 +69,10 @@
 		return 1;
 	}
 
-	pyld_unit_size = gso_size - hdr_offset;
+	/* pyld_unit_size must be a multiple of 8 because frag_off
+	 * uses 8 bytes as unit.
+	 */
+	pyld_unit_size = (gso_size - hdr_offset) & ~7U;
 
 	/* Segment the payload */
 	ret = gso_do_segment(pkt, hdr_offset, pyld_unit_size, direct_pool,
-- 
1.8.3.1



More information about the dev mailing list