Date: Thu, 06 Aug 2026 16:56:55 +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: 1b8d19dea462 - stable/14 - Revert "loopback: improve checksum offloading" Message-ID: <6a74bcd7.23e44.73fb694e@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/14 has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=1b8d19dea4624cba3c96fb4fdcf05f681562ee0b commit 1b8d19dea4624cba3c96fb4fdcf05f681562ee0b Author: Michael Tuexen <tuexen@FreeBSD.org> AuthorDate: 2026-08-06 14:54:45 +0000 Commit: Michael Tuexen <tuexen@FreeBSD.org> CommitDate: 2026-08-06 14:54:45 +0000 Revert "loopback: improve checksum offloading" This reverts commit d6c4cea7740d5c5c673a06ba37e4f1bdcddb2ece. It is done because this change interferes with the ipfilter NAT functionality. So Back it out until ipfilter has been fixed. --- share/man/man4/lo.4 | 23 +++++++++++++---------- sys/net/if_loop.c | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/share/man/man4/lo.4 b/share/man/man4/lo.4 index 5b808153559a..f1ac67c7d7db 100644 --- a/share/man/man4/lo.4 +++ b/share/man/man4/lo.4 @@ -29,7 +29,7 @@ .\" .\" @(#)lo.4 8.1 (Berkeley) 6/5/93 .\" -.Dd June 28, 2026 +.Dd June 23, 2024 .Dt LO 4 .Os .Sh NAME @@ -56,16 +56,19 @@ The loopback should be configured first unless no hardware interfaces exist. .Pp -If the transmit checksum offload capability is enabled on a loopback interface, -checksums will not be generated by IP, UDP, TCP, or SCTP for packets sent on the -interface. -By default, this capability is enabled to avoid the overhead of checksumming for -local communication where data corruption is unlikely. +If the transmit checksum offload capability flag is enabled on a loopback +interface, checksums will not be generated by IP, UDP, TCP, or SCTP for packets +sent on the interface. .Pp -If the receive checksum offload capability is disabled on a loopback interface, -the flags that indicate a valid checksum will be unset if set previously. -By default, this capability is enabled to avoid another checksum validation if -it has already been validated. +If the receive checksum offload capability flag is enabled on a loopback +interface, checksums will not be validated by IP, UDP, TCP, or SCTP for packets +received on the interface. +.Pp +By default, both receive and transmit checksum flags will be enabled, in +order to avoid the overhead of checksumming for local communication where +data corruption is unlikely. +If transmit checksum generation is disabled, then validation should also be +disabled in order to avoid packets being dropped due to invalid checksums. .Sh DIAGNOSTICS .Bl -diag .It lo%d: can't handle af%d. diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c index 97a534e43212..92740bfb6cfb 100644 --- a/sys/net/if_loop.c +++ b/sys/net/if_loop.c @@ -230,22 +230,38 @@ looutput(struct ifnet *ifp, struct mbuf *m, const struct sockaddr *dst, else af = RO_GET_FAMILY(ro, dst); +#if 1 /* XXX */ switch (af) { case AF_INET: - if ((ifp->if_capenable & IFCAP_RXCSUM) == 0) { - m->m_pkthdr.csum_flags &= ~LO_CSUM_SET; + if (ifp->if_capenable & IFCAP_RXCSUM) { + m->m_pkthdr.csum_data = 0xffff; + m->m_pkthdr.csum_flags = LO_CSUM_SET; } + m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES; break; case AF_INET6: - if ((ifp->if_capenable & IFCAP_RXCSUM_IPV6) == 0) { - m->m_pkthdr.csum_flags &= ~LO_CSUM_SET; +#if 0 + /* + * XXX-BZ for now always claim the checksum is good despite + * any interface flags. This is a workaround for 9.1-R and + * a proper solution ought to be sought later. + */ + if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) { + m->m_pkthdr.csum_data = 0xffff; + m->m_pkthdr.csum_flags = LO_CSUM_SET; } +#else + m->m_pkthdr.csum_data = 0xffff; + m->m_pkthdr.csum_flags = LO_CSUM_SET; +#endif + m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES6; break; default: printf("looutput: af=%d unexpected\n", af); m_freem(m); return (EAFNOSUPPORT); } +#endif return (if_simloop(ifp, m, af, 0)); } @@ -399,15 +415,29 @@ loioctl(struct ifnet *ifp, u_long cmd, caddr_t data) ifp->if_capenable ^= IFCAP_RXCSUM; if ((mask & IFCAP_TXCSUM) != 0) ifp->if_capenable ^= IFCAP_TXCSUM; - if ((mask & IFCAP_RXCSUM_IPV6) != 0) + if ((mask & IFCAP_RXCSUM_IPV6) != 0) { +#if 0 ifp->if_capenable ^= IFCAP_RXCSUM_IPV6; - if ((mask & IFCAP_TXCSUM_IPV6) != 0) +#else + error = EOPNOTSUPP; + break; +#endif + } + if ((mask & IFCAP_TXCSUM_IPV6) != 0) { +#if 0 ifp->if_capenable ^= IFCAP_TXCSUM_IPV6; +#else + error = EOPNOTSUPP; + break; +#endif + } ifp->if_hwassist = 0; if (ifp->if_capenable & IFCAP_TXCSUM) ifp->if_hwassist = LO_CSUM_FEATURES; +#if 0 if (ifp->if_capenable & IFCAP_TXCSUM_IPV6) ifp->if_hwassist |= LO_CSUM_FEATURES6; +#endif break; default:home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a74bcd7.23e44.73fb694e>
