From nobody Thu Aug 6 08:22:47 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hG0dh2sdxz6mc5V for ; Thu, 06 Aug 2026 08:22:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hG0dh0Xyrz3P8W for ; Thu, 06 Aug 2026 08:22:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786004568; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8KgnEzQOmXO0VA0O2miVIiUAc/kM391mv/qT0iXXV+k=; b=PcRDnmBS6VoV37b5Nn6ytjsPdWsU2pnyPt3ve8LELU2i8VevntUbGVmunKksR7DAHrAtO1 z5uPZmE6QkOJPLyJZFUA5uSq5YV62dz0qy6BFXWULpn6XiOVYTMSx0S1dJaleUzyTF57FK i0swQp+Wge6Pl1/hYaQOjnNpm+4urzouniHjVJIYIPZoGp3XMLdMccCA2e9iWfEqIdrEAD yyK+vnTxf9XaBg/naF7zMXJjUZwUT2rPWxcc9UCVNk6/t+IBRlpCEjniZjGaiEhBM5c9bV zDKa2g095CxhVklegn1Skh+oEb1V63wXxTGtnj9UzEi96jZ1n/oODjjORp8YXw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786004568; a=rsa-sha256; cv=none; b=XevR5KBuAwJ1dp7+jpG7mdakJ0Z5HYEOHF41+0wROJiOepmFuRIvTRv89WyruWQ/z/5MxB BbMDzxaNnLJ13Lg6hiSHkJMu4ObiSsl4jtnbed3wn2e2g+dZKBUkXRn6Pkp1z0rW23az7Q vZds4AjeQIUANpSg/W5mrwIcbeYaels6Y+r0mB3SucSyk4LanojBfRp3tEnkgCmrZjp8lS UZ/MqxgfHG492clh0FW4O6MfZH6OWvi/cz8yhpnuSviSzHBa18f02pj/lQdY8MDtL3Z2Qd FaFmmaZwwh/zv8QaUzY4fe4HJGFFR6tDid6eiPZgcFlQ9X3QVzuKhBXbiMhgVw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786004568; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8KgnEzQOmXO0VA0O2miVIiUAc/kM391mv/qT0iXXV+k=; b=vWMAOgrVdmno6n3kB7v9OO4KEaEarSDmB1xtX1xgS2f5FEgdAvgeC6TbZgTEkw62MM1Kx4 xghDK9pMWqvD5HYafDHj92R/Zkb+kI99Rwa4PUzmmufHk50iTg2TQKjCsWY6B0327yLuJH D2c9Zu2B3zRB2d23pZ1qFdnKLU179eO5Qx/yrRJZzbOHUDuvX/DyQhqM7fax7HZpvaEU02 x6JjCP6FsRgG5VWPM82qRW59c54ra4wOi2EPhlDBcfNDqgiepwgtNze3hkIZX8YMEr7nUp 9Ueu8PD3/wHNOp/RcDjwA68UR/XQviSlqNZuSx+pH6R6ubw81ga30iatcHtPaQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hG0dg6FLQz1BT0 for ; Thu, 06 Aug 2026 08:22:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bcc1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 06 Aug 2026 08:22:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Timo =?utf-8?Q?V=C3=B6lker?= From: Michael Tuexen Subject: git: fd3582e683d6 - stable/14 - loopback: improve checksum offloading List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tuexen X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: fd3582e683d6cf97c59dcd898ece47a5497d5995 Auto-Submitted: auto-generated Date: Thu, 06 Aug 2026 08:22:47 +0000 Message-Id: <6a744457.3bcc1.7a099521@gitrepo.freebsd.org> The branch stable/14 has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=fd3582e683d6cf97c59dcd898ece47a5497d5995 commit fd3582e683d6cf97c59dcd898ece47a5497d5995 Author: Timo Völker AuthorDate: 2026-06-28 10:50:15 +0000 Commit: Michael Tuexen CommitDate: 2026-08-06 05:45:51 +0000 loopback: improve checksum offloading * Allow disabling IFCAP_RXCSUM_IPV6 or IFCAP_TXCSUM_IPV6. * Do not pretend the checksum is correct by setting the LO_CSUM_SET flags if IFCAP_RXCSUM_IPV6 or IFCAP_RXCSUM is enabled. Instead, remove the LO_CSUM_SET flags (in case they have been set somehow) if IFCAP_RXCSUM_IPV6 or IFCAP_RXCSUM is disabled. * Do not unset the transmit checksum offload flags LO_CSUM_FEATURES or LO_CSUM_FEATURES6 since they now have a meaning for the receive path. Reviewed by: glebius, pouria, tuexen Okayed by: bz Differential Revision: https://reviews.freebsd.org/D57518 (cherry picked from commit d6c4cea7740d5c5c673a06ba37e4f1bdcddb2ece) --- share/man/man4/lo.4 | 23 ++++++++++------------- sys/net/if_loop.c | 42 ++++++------------------------------------ 2 files changed, 16 insertions(+), 49 deletions(-) diff --git a/share/man/man4/lo.4 b/share/man/man4/lo.4 index f1ac67c7d7db..5b808153559a 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 23, 2024 +.Dd June 28, 2026 .Dt LO 4 .Os .Sh NAME @@ -56,19 +56,16 @@ The loopback should be configured first unless no hardware interfaces exist. .Pp -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. +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. .Pp -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. +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. .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 27c9281957e2..90252ae06b05 100644 --- a/sys/net/if_loop.c +++ b/sys/net/if_loop.c @@ -231,38 +231,22 @@ 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) { - m->m_pkthdr.csum_data = 0xffff; - m->m_pkthdr.csum_flags = LO_CSUM_SET; + if ((ifp->if_capenable & IFCAP_RXCSUM) == 0) { + m->m_pkthdr.csum_flags &= ~LO_CSUM_SET; } - m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES; break; case AF_INET6: -#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; + if ((ifp->if_capenable & IFCAP_RXCSUM_IPV6) == 0) { + 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)); } @@ -416,29 +400,15 @@ 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 0 + if ((mask & IFCAP_RXCSUM_IPV6) != 0) ifp->if_capenable ^= IFCAP_RXCSUM_IPV6; -#else - error = EOPNOTSUPP; - break; -#endif - } - if ((mask & IFCAP_TXCSUM_IPV6) != 0) { -#if 0 + if ((mask & IFCAP_TXCSUM_IPV6) != 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: