The header length was not taking into account the outer headers.

Fixes: 084c8087292c ("userspace: Support VXLAN and GENEVE TSO.")
Signed-off-by: David Marchand <[email protected]>
Acked-by: Mike Pattrick <[email protected]>
Acked-by: Kevin Traynor <[email protected]>
---
 lib/netdev-dpdk.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 0cb9fae9f0..f6ae235af3 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2748,18 +2748,18 @@ netdev_dpdk_prep_hwol_packet(struct netdev_dpdk *dev, 
struct rte_mbuf *mbuf)
         int hdr_len;
 
         mbuf->l4_len = TCP_OFFSET(th->tcp_ctl) * 4;
+
+        hdr_len = mbuf->l2_len + mbuf->l3_len + mbuf->l4_len;
+        link_tso_segsz = dev->mtu - mbuf->l3_len - mbuf->l4_len;
         if (dp_packet_tunnel(pkt)) {
-            link_tso_segsz = dev->mtu - mbuf->l2_len - mbuf->l3_len -
-                             mbuf->l4_len - mbuf->outer_l3_len;
-        } else {
-            link_tso_segsz = dev->mtu - mbuf->l3_len - mbuf->l4_len;
+            hdr_len += mbuf->outer_l2_len + mbuf->outer_l3_len;
+            link_tso_segsz -= mbuf->outer_l3_len + mbuf->l2_len;
         }
 
         if (mbuf->tso_segsz > link_tso_segsz) {
             mbuf->tso_segsz = link_tso_segsz;
         }
 
-        hdr_len = mbuf->l2_len + mbuf->l3_len + mbuf->l4_len;
         if (OVS_UNLIKELY((hdr_len + mbuf->tso_segsz) > dev->max_packet_len)) {
             VLOG_WARN_RL(&rl, "%s: Oversized TSO packet. hdr: %"PRIu32", "
                          "gso: %"PRIu32", max len: %"PRIu32"",
-- 
2.51.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to