diff mbox series

[ovs-dev,v2,03/11] netdev-dpdk: Fix TSO packet length check for tunnels.

Message ID 20251112170420.3155127-4-david.marchand@redhat.com
State Changes Requested
Headers show
Series Outer UDP checksum optimisations. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed

Commit Message

David Marchand Nov. 12, 2025, 5:04 p.m. UTC
The header length was not taking into account the outer headers.

Fixes: 084c8087292c ("userspace: Support VXLAN and GENEVE TSO.")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/netdev-dpdk.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Mike Pattrick Dec. 1, 2025, 5:28 a.m. UTC | #1
On Wed, Nov 12, 2025 at 12:04 PM David Marchand <david.marchand@redhat.com>
wrote:

> The header length was not taking into account the outer headers.
>
> Fixes: 084c8087292c ("userspace: Support VXLAN and GENEVE TSO.")
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
>
>
This looks correct.

Acked-by: Mike Pattrick <mkp@redhat.com>
Kevin Traynor Dec. 5, 2025, 4:14 p.m. UTC | #2
On 12/11/2025 17:04, David Marchand via dev wrote:
> The header length was not taking into account the outer headers.
> 
> Fixes: 084c8087292c ("userspace: Support VXLAN and GENEVE TSO.")
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
>  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

LGTM
Acked-by: Kevin Traynor <ktraynor@redhat.com>
diff mbox series

Patch

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"",