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