Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Apr 2026 07:50:34 +0000
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: a095924c7d4c - stable/15 - ure: improve transmit checksum offloading
Message-ID:  <69edc3ca.25765.66304662@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch stable/15 has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=a095924c7d4cdfabedfdf17f9c4d8fbae4a75dfe

commit a095924c7d4cdfabedfdf17f9c4d8fbae4a75dfe
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2026-02-08 20:11:18 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2026-04-26 07:49:03 +0000

    ure: improve transmit checksum offloading
    
    Apparently, the name of the variable l4off was correct. Providing the
    offset to the TCP or UDP header allows the transmit checksum offload to
    work for TCP/IPv4, TCP/IPv6, UDP/IPv4, and UDP/IPv6.
    
    Reported by:            vishwin
    Reviewed by:            vishwin
    Differential Revision:  https://reviews.freebsd.org/D55187
    Event:                  Wiesbaden Hackathon 2026
    
    (cherry picked from commit 7266121ce985a1a895441357c20b0e9d56b4e5f5)
---
 sys/dev/usb/net/if_ure.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/sys/dev/usb/net/if_ure.c b/sys/dev/usb/net/if_ure.c
index 3dea88eb10f1..92160fe9b1d2 100644
--- a/sys/dev/usb/net/if_ure.c
+++ b/sys/dev/usb/net/if_ure.c
@@ -24,6 +24,8 @@
  * SUCH DAMAGE.
  */
 
+#include "opt_inet6.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
@@ -44,6 +46,10 @@
 /* needed for checksum offload */
 #include <netinet/in.h>
 #include <netinet/ip.h>
+#ifdef INET6
+#include <netinet/ip6.h>
+#include <netinet6/ip6_var.h>
+#endif
 
 #include <dev/mii/mii.h>
 #include <dev/mii/miivar.h>
@@ -62,8 +68,6 @@
 
 #include "miibus_if.h"
 
-#include "opt_inet6.h"
-
 #ifdef USB_DEBUG
 static int ure_debug = 0;
 
@@ -2179,7 +2183,6 @@ ure_txcsum(struct mbuf *m, int caps, uint32_t *regout)
 	struct ip ip;
 	struct ether_header *eh;
 	int flags;
-	uint32_t data;
 	uint32_t reg;
 	int l3off, l4off;
 	uint16_t type;
@@ -2214,10 +2217,9 @@ ure_txcsum(struct mbuf *m, int caps, uint32_t *regout)
 	if (flags & CSUM_IP)
 		reg |= URE_TXPKT_IPV4_CS;
 
-	data = m->m_pkthdr.csum_data;
 	if (flags & (CSUM_IP_TCP | CSUM_IP_UDP)) {
 		m_copydata(m, l3off, sizeof ip, (caddr_t)&ip);
-		l4off = l3off + (ip.ip_hl << 2) + data;
+		l4off = l3off + (ip.ip_hl << 2);
 		if (__predict_false(l4off > URE_L4_OFFSET_MAX))
 			return (1);
 
@@ -2230,7 +2232,9 @@ ure_txcsum(struct mbuf *m, int caps, uint32_t *regout)
 	}
 #ifdef INET6
 	else if (flags & (CSUM_IP6_TCP | CSUM_IP6_UDP)) {
-		l4off = l3off + data;
+		l4off = ip6_lasthdr(m, l3off, IPPROTO_IPV6, NULL);
+		if (__predict_false(l4off < 0))
+			return (1);
 		if (__predict_false(l4off > URE_L4_OFFSET_MAX))
 			return (1);
 


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69edc3ca.25765.66304662>