Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Feb 2026 18:13:28 +0100
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        Ronald Klop <ronald-lists@klop.ws>
Cc:        "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: 7266121ce985 - main - ure: improve transmit checksum offloading
Message-ID:  <13A22FE6-C164-466B-9417-7B2BB6CEAA30@FreeBSD.org>
In-Reply-To: <1315337813.3441.1770653767432@localhost>
References:  <6988ef21.3e6ef.54b19aac@gitrepo.freebsd.org> <1315337813.3441.1770653767432@localhost>

index | next in thread | previous in thread | raw e-mail

> On 9. Feb 2026, at 17:16, Ronald Klop <ronald-lists@klop.ws> wrote:
> 
> Thanks,
> 
> I noticed this last week and was still investigating when I saw this commit. TCP/IPv6 works fine now.
Thanks for letting me know!

Best regards
Michael
> 
> ure0 on uhub1
> ure0: <Realtek USB 10/100/1G/2.5G LAN, class 0/0, rev 3.20/31.04, addr 1> on usbus1
> ue0: <USB Ethernet> on ure0
> 
> This is plugged into a Raspberry Pi 5.
> 
> Thanks.
> 
> Ronald.
> 
> Van: Michael Tuexen <tuexen@FreeBSD.org>
> Datum: zondag, 8 februari 2026 21:16
> Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
> Onderwerp: git: 7266121ce985 - main - ure: improve transmit checksum offloading
> The branch main has been updated by tuexen:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=7266121ce985a1a895441357c20b0e9d56b4e5f5
> 
> commit 7266121ce985a1a895441357c20b0e9d56b4e5f5
> Author:     Michael Tuexen <tuexen@FreeBSD.org>
> AuthorDate: 2026-02-08 20:11:18 +0000
> Commit:     Michael Tuexen <tuexen@FreeBSD.org>
> CommitDate: 2026-02-08 20:16:20 +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
>     MFC after:              1 week
>     Differential Revision:  https://reviews.freebsd.org/D55187
> ---
>  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?13A22FE6-C164-466B-9417-7B2BB6CEAA30>