From nobody Wed Sep 20 10:09:03 2023 X-Original-To: dev-commits-src-all@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 4RrDlN1K3Nz4tRpl; Wed, 20 Sep 2023 10:09:04 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RrDlN0qXvz4Wtk; Wed, 20 Sep 2023 10:09:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695204544; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HcvOkyMfywAHuJHXBzeucOOKuvf1Q5LIHaldNeHO94Y=; b=NE94m8rQi5D54NqbkMFcPQkkDMSs7B2DB4na2cUD4tg2Bc5Kt8qXLM4ca4q195sKrGItBs a8fbzg96IBfmW8PcfBkgVbxlt2YOg7soomoLl1ceFpDroIFD+m7e7tx33fSVh9xVWuHAne v8nkGMn4ZO5svBWSe3C2YGkEl+Qflp3Mprukzv+2D88Y+qRtx2nBOhMBwPHexe8r9bpRl5 2d7EA6K+n/H+uDEXTvZWVgVY2Bft9qBvPvga3blLnMIQWjEIb3nyRhejCyjgQannVVKwpd SeDQZuqMIE8nHW6mbLweI2Vr5FgJSK/BxiqGnpLJxe9ATKEoVMTQetXIBsAFRQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1695204544; a=rsa-sha256; cv=none; b=X58N/nfNjOud7jAczYUhqhPvLfX7HB/CsTikDsEplwiSaKoG67Qy8x4z7v8Kx0Sp7asIWi v4FObO7vlgtnl/hX1f2azG92toWdRn3y02hdkmUI7bMI8/cvnbJxuAh0x60tOTPP5Mbze/ rjm5yG440IXdkS/tw4pk92lZxQqvAgSFBdV+9Ph6AyEtm8ErkllFqn7umEy1yPTYa1b5qJ FUkzu/IKs6GSyKS5IvyggRsOw21G7JeL59Avy7JQGZSkcBrHZ+dpxPm1CVxiqIjORe0mVc Vbs73Ew4wNJp49guCzorgnEWmdpT8gwy2jOiiKnIku0Sy01CGfG17KJFsWTwoQ== 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=1695204544; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HcvOkyMfywAHuJHXBzeucOOKuvf1Q5LIHaldNeHO94Y=; b=sF7hVMttkK5Qn1MrRakozSv6jowB86IY4YGMb5HQIPIGlIaXBDaMwpLwgogVWm/nlFHl0z zBNFbKINwv05vLB15b+AHxLJymtGZK/bRVoZ0RiF3Pk/SV8kjHYIOKzye8VP3CBY/IeFoA Q4vkKP8QukEFFsVtmy5SDOy/gGGy8VV7c7PS6OcTPumm70mT5EwJ7EU2SP4HiRMN6ISgcy /wrIqPV8cwD5wEtHQH1tIJoLomQi6PstOLH+dYGnO4IAJgmdjP5S7MCn4rm6gu61OzUARB Bm50/F08F1WWbfy/fK8ltsFvktaq7Bp/rcNRWh0vCKCVVdnmsD42VtVuFoNLdQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RrDlM71RnzrYT; Wed, 20 Sep 2023 10:09:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38KA93Mb053525; Wed, 20 Sep 2023 10:09:03 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38KA93fj053522; Wed, 20 Sep 2023 10:09:03 GMT (envelope-from git) Date: Wed, 20 Sep 2023 10:09:03 GMT Message-Id: <202309201009.38KA93fj053522@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Zhenlei Huang Subject: git: d5dbed2f1e2a - stable/12 - net: Check per-flow priority code point for untagged traffic List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: zlei X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: d5dbed2f1e2ab14f54acbe14c30ccac9f9fee29f Auto-Submitted: auto-generated The branch stable/12 has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=d5dbed2f1e2ab14f54acbe14c30ccac9f9fee29f commit d5dbed2f1e2ab14f54acbe14c30ccac9f9fee29f Author: Zhenlei Huang AuthorDate: 2023-09-06 10:15:14 +0000 Commit: Zhenlei Huang CommitDate: 2023-09-20 10:05:14 +0000 net: Check per-flow priority code point for untagged traffic Commit 868aabb4708d introduced per-flow priority. There's a defect in the logic for untagged traffic, it does not check M_VLANTAG set in the mbuf packet header or MTAG_8021Q/MTAG_8021Q_PCP_OUT tag set by firewall, then can result missing desired priority in the outbound packets. For mbuf packet with M_VLANTAG in header, some interfaces happen to work due to bug in the drivers mentioned in D39499. As modern interfaces have VLAN hardware offloading, the defect is barely noticeable unless the feature per-flow priority is widely tested. As a side effect of this defect, the soft padding to work around buggy bridges is bypassed. That may result in regression if soft padding is requested. PR: 273431 Discussed with: kib Fixes: 868aabb4708d Add IP(V6)_VLAN_PCP to set 802.1 priority per-flow MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D39536 (cherry picked from commit 49d6743da15fe378782e43776df8b4fd4f84c8d0) (cherry picked from commit c750055382f73db964c20f8eba855a9ac9e19591) (cherry picked from commit 8303afca1765148d0069ce5144072b3ae9cab61e) --- sys/net/if_ethersubr.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index f832700003ef..6f02f520e63b 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -119,6 +119,7 @@ static int ether_resolvemulti(struct ifnet *, struct sockaddr **, struct sockaddr *); static int ether_requestencap(struct ifnet *, struct if_encap_req *); +static inline bool ether_do_pcp(struct ifnet *, struct mbuf *); #define senderr(e) do { error = (e); goto bad;} while (0) @@ -463,11 +464,8 @@ int ether_output_frame(struct ifnet *ifp, struct mbuf *m) { int error; - uint8_t pcp; - pcp = ifp->if_pcp; - if (pcp != IFNET_PCP_NONE && ifp->if_type != IFT_L2VLAN && - !ether_set_pcp(&m, ifp, pcp)) + if (ether_do_pcp(ifp, m) && !ether_set_pcp(&m, ifp, ifp->if_pcp)) return (0); if (PFIL_HOOKED(&V_link_pfil_hook)) { @@ -1313,6 +1311,19 @@ SYSCTL_INT(_net_link_vlan, OID_AUTO, mtag_pcp, CTLFLAG_RW, &vlan_mtag_pcp, 0, "Retain VLAN PCP information as packets are passed up the stack"); +static inline bool +ether_do_pcp(struct ifnet *ifp, struct mbuf *m) +{ + if (ifp->if_type == IFT_L2VLAN) + return (false); + if (ifp->if_pcp != IFNET_PCP_NONE || (m->m_flags & M_VLANTAG) != 0) + return (true); + if (vlan_mtag_pcp && + m_tag_locate(m, MTAG_8021Q, MTAG_8021Q_PCP_OUT, NULL) != NULL) + return (true); + return (false); +} + bool ether_8021q_frame(struct mbuf **mp, struct ifnet *ife, struct ifnet *p, uint16_t vid, uint8_t pcp)