From nobody Sun Apr 26 08:22:18 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 4g3KSB1gV8z6bFND for ; Sun, 26 Apr 2026 08:22:18 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g3KSB0gKvz47w5 for ; Sun, 26 Apr 2026 08:22:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777191738; 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=ucYsJDWdbtc9qroOxUUOLS7gg7LuMtF+QXcMysmTABs=; b=xIL/WsVNnqWUpR808xo5Lb6aysX0H0QB1hDcmhgKmCr6FnEJWKVswEW5jwKPmBjWx9Urur CZq6524K0Bq14N75vrFjzwPby6JeCK5/kXLBDYm/tjjCHxHlmxdE+GUo8tmQJY6PMkXZIx YPSlo7nGarPzYOBe3S/9OG9G0Kl/ueqaVmQyytHdHdQdGsrDEDSvvQ2P9P3EV4dmVhJmPI B9/EfX62r3OHLVj2G4lsn8i57/q+di4em9XbAjAcbzH877ZYLOmQW3oYXuYBKx6oxdaGMy gdmsRsbExaWrLYEF5ZKpfzRmbCp8W9VhS9e3NmWPNJZyzGFKgOOxK3AlRVGRZw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777191738; a=rsa-sha256; cv=none; b=Fex89m1AZQTWXy8Xc6nrWoKH+0xT+2uK3f5X6YrwmTkJFRCPmbKJLMhFAmF9yXvfq7sMoY ty0KgD80RuVjwuqxu2NoIQNexH64ZrjFox3/YTKTsq+9aNSB/bPc6hK8yqhtKwvJtDTXQE lGAmxwTZ/IVEwEG1y5144UQ+gxhlh8T2EPa+bQ/vpLvgpAKfBljpvLhG/NyL8A3PK10Gx1 892/RVKUmqqON+NiItXUpJtf15qVKPvdfjR12GPIqg2MIF6EzWLcSRnt1XH9vROpkXWSIS fSbQfXbocq8iYFZDzzm6pbH2iT/g4eRooiaucI6Au5gf8iQYwnVAF9IOfkI6IQ== 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=1777191738; 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=ucYsJDWdbtc9qroOxUUOLS7gg7LuMtF+QXcMysmTABs=; b=yd0+SRcuk5qzqISPdaqDtQIeoR9sIwI+wehehwgB9xLEwfDKfIOMdq9Y8v7jpZfVLXKgim O3XEm0tkLyDuyTkBt3poRPB9jU1kesxpm7+fmqWdsgwQ6WcMUZ0G13uKuuNPm+z8hvvOtx gvFhmVvsEmI9DtYV60m8xSO2iFbKwSD8mCxJQH5UIKi60qHhEQtV2WOVBOo19fWsWHL3dg QptUeX4CEGjbGlxULp3hRNFxeCHDQ2c3U+/AUdUH5aDY+nviG5kvMm8nF62wpV6fB0yE9K iefUkl8ugZ8MfNiHsKSZ/Zww2EKifwDDiQdCA1D1OaOM0ko/7jC/5+LlqqUfVg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g3KSB05Bpz1BVg for ; Sun, 26 Apr 2026 08:22:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 27cea by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Apr 2026 08:22:18 +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: acbc8e49ae0f - stable/14 - epair: add VLAN_HWTAGGING 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 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: acbc8e49ae0fdf22fd9e40e031fa6312a815068a Auto-Submitted: auto-generated Date: Sun, 26 Apr 2026 08:22:18 +0000 Message-Id: <69edcb3a.27cea.7b3fc557@gitrepo.freebsd.org> The branch stable/14 has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=acbc8e49ae0fdf22fd9e40e031fa6312a815068a commit acbc8e49ae0fdf22fd9e40e031fa6312a815068a Author: Timo Völker AuthorDate: 2026-01-30 10:54:33 +0000 Commit: Michael Tuexen CommitDate: 2026-04-26 06:20:49 +0000 epair: add VLAN_HWTAGGING Add capability VLAN_HWTAGGING to the epair interface and enable it by default. When sending a packet over a VLAN interface that uses an epair interface, the flag M_VLANTAG and the ether_vtag (which contains the VLAN ID and/or PCP) are set in the mbuf to inform the hardware that the VLAN header has to be added. The sending epair end does not need to actually add a VLAN header. It can just pass the mbuf with this setting to the other epair end, which receives the packet. The receiving epair end can just pass the mbuf with this setting to the upper layer. Due to this setting, the upper layer believes that there was a VLAN header that has been removed by the interface. If the packet later leaves the host, the outgoing physical interface can add the VLAN header in hardware if it supports VLAN_HWTAGGING. If not, the implementation of Ethernet or bridge adds the VLAN header in software. Reviewed by: zlei, tuexen Differential Revision: https://reviews.freebsd.org/D52465 Event: Wiesbaden Hackathon 2026 (cherry picked from commit 574d46b25ab6f42ad97017bb8b72520e9539e36f) --- share/man/man4/epair.4 | 20 +++++++++++++++++++- sys/net/if_epair.c | 28 ++++++++++++++++------------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/share/man/man4/epair.4 b/share/man/man4/epair.4 index 0014836b01ea..1cc9c41fd69e 100644 --- a/share/man/man4/epair.4 +++ b/share/man/man4/epair.4 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd September 2, 2025 +.Dd January 30, 2026 .Dt EPAIR 4 .Os .Sh NAME @@ -113,6 +113,7 @@ The .Nm has RXCSUM and RXCSUM6 enabled because it may receive a packet where the checksum has already been validated by a physical interface. +.Pp The .Nm supports TXCSUM and TXCSUM6 for TCP and UDP, but only by forwarding the order @@ -130,6 +131,23 @@ enables/disables it on the other end). In case one end is in a bridge and the bridge disabled TXCSUM or TXCSUM6, this avoids a sender to send packets with checksum offloading into the bridge by using the other end. +.Pp +The +.Nm +supports VLAN_HWTAGGING without actually adding a VLAN tag. +The sending +.Nm +end just forwards the offloading information to the other end. +The receiving +.Nm +end leaves the offloading information set to pretend that there was a VLAN tag +in the Ethernet header, which has been removed already. +To avoid a situation where the receiving +.Nm +end has VLAN_HWTAGGING disabled, this capability is synchronized between the +.Nm +interface pair (i.e., enabling/disabling the capability on one end +enables/disables it on the other end). .Sh SEE ALSO .Xr ioctl 2 , .Xr altq 4 , diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c index 3cedd63a5320..3b229f6280b9 100644 --- a/sys/net/if_epair.c +++ b/sys/net/if_epair.c @@ -150,10 +150,6 @@ epair_clear_mbuf(struct mbuf *m) m->m_pkthdr.csum_flags &= ~CSUM_SND_TAG; } - /* Clear vlan information. */ - m->m_flags &= ~M_VLANTAG; - m->m_pkthdr.ether_vtag = 0; - m_tag_delete_nonpersistent(m); } @@ -493,6 +489,7 @@ epair_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) ifp->if_capenable = ifr->ifr_reqcap | IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6; epair_caps_changed(ifp); + VLAN_CAPABILITIES(ifp); /* * If IFCAP_TXCSUM(_IPV6) has been changed, change it on the * other epair interface as well. @@ -501,17 +498,23 @@ epair_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) * In that case this capability needs to be disabled on the * other epair interface to avoid sending packets in the bridge * that rely on this capability. + * Do the same for IFCAP_VLAN_HWTAGGING. If the sending epair + * end has this capability enabled, the other end has to have + * it enabled too. Otherwise, epair would have to add the VLAN + * tag in the Ethernet header. */ sc = ifp->if_softc; if ((ifp->if_capenable ^ sc->oifp->if_capenable) & - (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6)) { + (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6 | IFCAP_VLAN_HWTAGGING)) { sc->oifp->if_capenable &= - ~(IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6); + ~(IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6 | + IFCAP_VLAN_HWTAGGING); sc->oifp->if_capenable |= ifp->if_capenable & - (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6); + (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6 | + IFCAP_VLAN_HWTAGGING); epair_caps_changed(sc->oifp); + VLAN_CAPABILITIES(sc->oifp); } - VLAN_CAPABILITIES(ifp); error = 0; break; @@ -626,10 +629,11 @@ epair_setup_ifp(struct epair_softc *sc, char *name, int unit) ifp->if_dname = epairname; ifp->if_dunit = unit; ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; - ifp->if_capabilities = IFCAP_VLAN_MTU | IFCAP_TXCSUM | - IFCAP_TXCSUM_IPV6 | IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6; - ifp->if_capenable = IFCAP_VLAN_MTU | IFCAP_TXCSUM | - IFCAP_TXCSUM_IPV6 | IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6; + ifp->if_capabilities = + IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | + IFCAP_TXCSUM | IFCAP_RXCSUM | + IFCAP_TXCSUM_IPV6 | IFCAP_RXCSUM_IPV6; + ifp->if_capenable = ifp->if_capabilities; epair_caps_changed(ifp); ifp->if_transmit = epair_transmit; ifp->if_qflush = epair_qflush;