Re: git: 7b6e84c9ac56 - main - ure: improve checksum offloading
- In reply to: Charlie Li : "Re: git: 7b6e84c9ac56 - main - ure: improve checksum offloading"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 08 Feb 2026 16:22:01 UTC
> On 7. Feb 2026, at 16:34, Charlie Li <vishwin@FreeBSD.org> wrote:
>
> Michael Tuexen wrote:
>> The branch main has been updated by tuexen:
>> URL: https://cgit.FreeBSD.org/src/commit/?id=7b6e84c9ac5668134ab2d075019ef0b827d90c84
>> commit 7b6e84c9ac5668134ab2d075019ef0b827d90c84
>> Author: Michael Tuexen <tuexen@FreeBSD.org>
>> AuthorDate: 2026-01-31 10:42:10 +0000
>> Commit: Michael Tuexen <tuexen@FreeBSD.org>
>> CommitDate: 2026-01-31 10:42:10 +0000
>> ure: improve checksum offloading
>> This patch fixes three issues:
>> (1) Initially, set the hwassist flags correctly when enabling
>> transmit checksum offload for TCP/IPv6 and UDP/IPv6.
>> (2) Keep the hwassist flags in sync with the capabilities when
>> changing txcsum.
>> (3) Keep the hwasssit flags in sync with the capabilities when
>> changing txcsum6.
>> Without this patch, transmit checksum offloading for TCP/IPv6 and
>> UDP/IPv6 is never used and transmit checksum offloading for IPv4,
>> TCP/IPv4 and UDP/IPv4 is always used, even if disabled via
>> ifconfig ue? -txcsum.
>> Reviewed by: Timo Völker
>> MFC after: 3 days
>> Differential Revision: https://reviews.freebsd.org/D54974
>> ---
>> sys/dev/usb/net/if_ure.c | 3 +++
>> 1 file changed, 3 insertions(+)
>> diff --git a/sys/dev/usb/net/if_ure.c b/sys/dev/usb/net/if_ure.c
>> index c3f7b622d687..3dea88eb10f1 100644
>> --- a/sys/dev/usb/net/if_ure.c
>> +++ b/sys/dev/usb/net/if_ure.c
>> @@ -1015,6 +1015,7 @@ ure_attach_post_sub(struct usb_ether *ue)
>> if_sethwassist(ifp, CSUM_IP|CSUM_IP_UDP|CSUM_IP_TCP);
>> #ifdef INET6
>> if_setcapabilitiesbit(ifp, IFCAP_HWCSUM_IPV6, 0);
>> + if_sethwassistbits(ifp, CSUM_IP6_UDP|CSUM_IP6_TCP, 0);
>> #endif
>> if_setcapenable(ifp, if_getcapabilities(ifp));
>> @@ -1463,6 +1464,7 @@ ure_ioctl(if_t ifp, u_long cmd, caddr_t data)
>> if ((mask & IFCAP_TXCSUM) != 0 &&
>> (if_getcapabilities(ifp) & IFCAP_TXCSUM) != 0) {
>> if_togglecapenable(ifp, IFCAP_TXCSUM);
>> + if_togglehwassist(ifp, CSUM_IP|CSUM_IP_UDP|CSUM_IP_TCP);
>> }
>> if ((mask & IFCAP_RXCSUM) != 0 &&
>> (if_getcapabilities(ifp) & IFCAP_RXCSUM) != 0) {
>> @@ -1471,6 +1473,7 @@ ure_ioctl(if_t ifp, u_long cmd, caddr_t data)
>> if ((mask & IFCAP_TXCSUM_IPV6) != 0 &&
>> (if_getcapabilities(ifp) & IFCAP_TXCSUM_IPV6) != 0) {
>> if_togglecapenable(ifp, IFCAP_TXCSUM_IPV6);
>> + if_togglehwassist(ifp, CSUM_IP6_UDP|CSUM_IP6_TCP);
>> }
>> if ((mask & IFCAP_RXCSUM_IPV6) != 0 &&
>> (if_getcapabilities(ifp) & IFCAP_RXCSUM_IPV6) != 0) {
> It seems that with this commit, all network traffic and then some, excluding ICMP{,v6}, time out. Even `route(8) get default` takes forever to query.
OK, my patch actually enabled transmit checksum offloading. This exposed a bug in the
code performing the checksum offload. Here is a fix:
https://reviews.freebsd.org/D55187
Please test are report back.
When initially testing my fix, I made a mistake actually only testing IPv4.
Thanks for reporting the issue!
Best regards
Michael
>
> --
> Charlie Li
> ...nope, still don't have an exit line.
>