git: c9ef3984a1a7 - stable/13 - vlan: deduplicate bpf_setpcp() and pf_ieee8021q_setpcp()

Kristof Provost kp at FreeBSD.org
Mon Aug 2 15:04:07 UTC 2021


The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=c9ef3984a1a73cf0d5b0922383d85b0f36ea4ee3

commit c9ef3984a1a73cf0d5b0922383d85b0f36ea4ee3
Author:     Kristof Provost <kp at FreeBSD.org>
AuthorDate: 2021-07-22 08:35:08 +0000
Commit:     Kristof Provost <kp at FreeBSD.org>
CommitDate: 2021-08-02 14:50:32 +0000

    vlan: deduplicate bpf_setpcp() and pf_ieee8021q_setpcp()
    
    These two fuctions were identical, so move them into the common
    vlan_set_pcp() function, exposed in the if_vlan_var.h header.
    
    Reviewed by:    donner
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D31275
    
    (cherry picked from commit 9ef8cd0b7906371803421aa897056b6fc0710fcb)
---
 sys/net/bpf.c         | 23 +----------------------
 sys/net/if_vlan.c     |  2 +-
 sys/net/if_vlan_var.h | 26 ++++++++++++++++++++++++++
 sys/netpfil/pf/pf.c   | 25 ++-----------------------
 4 files changed, 30 insertions(+), 46 deletions(-)

diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 0343c8f851be..6ae0699c949f 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -1164,27 +1164,6 @@ bpf_ready(struct bpf_d *d)
 	return (0);
 }
 
-static int
-bpf_setpcp(struct mbuf *m, u_int8_t prio)
-{
-	struct m_tag *mtag;
-
-	KASSERT(prio <= BPF_PRIO_MAX,
-	    ("%s with invalid pcp", __func__));
-
-	mtag = m_tag_locate(m, MTAG_8021Q, MTAG_8021Q_PCP_OUT, NULL);
-	if (mtag == NULL) {
-		mtag = m_tag_alloc(MTAG_8021Q, MTAG_8021Q_PCP_OUT,
-		    sizeof(uint8_t), M_NOWAIT);
-		if (mtag == NULL)
-			return (ENOMEM);
-		m_tag_prepend(m, mtag);
-	}
-
-	*(uint8_t *)(mtag + 1) = prio;
-	return (0);
-}
-
 static int
 bpfwrite(struct cdev *dev, struct uio *uio, int ioflag)
 {
@@ -1286,7 +1265,7 @@ bpfwrite(struct cdev *dev, struct uio *uio, int ioflag)
 	}
 
 	if (d->bd_pcp != 0)
-		bpf_setpcp(m, d->bd_pcp);
+		vlan_set_pcp(m, d->bd_pcp);
 
 	/* Avoid possible recursion on BPFD_LOCK(). */
 	NET_EPOCH_ENTER(et);
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index bd3a5335a97f..2ff584a059e9 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -2037,7 +2037,7 @@ vlan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		error = priv_check(curthread, PRIV_NET_SETVLANPCP);
 		if (error)
 			break;
-		if (ifr->ifr_vlan_pcp > 7) {
+		if (ifr->ifr_vlan_pcp > VLAN_PCP_MAX) {
 			error = EINVAL;
 			break;
 		}
diff --git a/sys/net/if_vlan_var.h b/sys/net/if_vlan_var.h
index 1b9540f18a3e..91bed40c43a6 100644
--- a/sys/net/if_vlan_var.h
+++ b/sys/net/if_vlan_var.h
@@ -32,6 +32,8 @@
 #ifndef _NET_IF_VLAN_VAR_H_
 #define	_NET_IF_VLAN_VAR_H_	1
 
+#include <sys/mbuf.h>
+
 /* Set the VLAN ID in an mbuf packet header non-destructively. */
 #define EVL_APPLY_VLID(m, vlid)						\
 	do {								\
@@ -124,6 +126,8 @@ struct	vlanreq {
 #define	MTAG_8021Q_PCP_IN	0		/* Input priority. */
 #define	MTAG_8021Q_PCP_OUT	1		/* Output priority. */
 
+#define	VLAN_PCP_MAX		7
+
 /*
  * 802.1q full tag. Proto and vid are stored in host byte order.
  */
@@ -168,6 +172,28 @@ typedef void (*vlan_unconfig_fn)(void *, struct ifnet *, uint16_t);
 EVENTHANDLER_DECLARE(vlan_config, vlan_config_fn);
 EVENTHANDLER_DECLARE(vlan_unconfig, vlan_unconfig_fn);
 
+static inline int
+vlan_set_pcp(struct mbuf *m, uint8_t prio)
+{
+	struct m_tag *mtag;
+
+	KASSERT(prio <= VLAN_PCP_MAX,
+	    ("%s with invalid pcp", __func__));
+
+	mtag = m_tag_locate(m, MTAG_8021Q, MTAG_8021Q_PCP_OUT, NULL);
+	if (mtag == NULL) {
+		mtag = m_tag_alloc(MTAG_8021Q, MTAG_8021Q_PCP_OUT,
+		    sizeof(uint8_t), M_NOWAIT);
+		if (mtag == NULL)
+			return (ENOMEM);
+		m_tag_prepend(m, mtag);
+	}
+
+	*(uint8_t *)(mtag + 1) = prio;
+
+	return (0);
+}
+
 #endif /* _KERNEL */
 
 #endif /* _NET_IF_VLAN_VAR_H_ */
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 87912046f8d3..3f954497dc20 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -2715,27 +2715,6 @@ pf_return(struct pf_krule *r, struct pf_krule *nr, struct pf_pdesc *pd,
 			r->return_icmp6 & 255, af, r);
 }
 
-static int
-pf_ieee8021q_setpcp(struct mbuf *m, u_int8_t prio)
-{
-	struct m_tag *mtag;
-
-	KASSERT(prio <= PF_PRIO_MAX,
-	    ("%s with invalid pcp", __func__));
-
-	mtag = m_tag_locate(m, MTAG_8021Q, MTAG_8021Q_PCP_OUT, NULL);
-	if (mtag == NULL) {
-		mtag = m_tag_alloc(MTAG_8021Q, MTAG_8021Q_PCP_OUT,
-		    sizeof(uint8_t), M_NOWAIT);
-		if (mtag == NULL)
-			return (ENOMEM);
-		m_tag_prepend(m, mtag);
-	}
-
-	*(uint8_t *)(mtag + 1) = prio;
-	return (0);
-}
-
 static int
 pf_match_ieee8021q_pcp(u_int8_t prio, struct mbuf *m)
 {
@@ -6266,7 +6245,7 @@ done:
 	if (r->scrub_flags & PFSTATE_SETPRIO) {
 		if (pd.tos & IPTOS_LOWDELAY)
 			pqid = 1;
-		if (pf_ieee8021q_setpcp(m, r->set_prio[pqid])) {
+		if (vlan_set_pcp(m, r->set_prio[pqid])) {
 			action = PF_DROP;
 			REASON_SET(&reason, PFRES_MEMORY);
 			log = 1;
@@ -6713,7 +6692,7 @@ done:
 	if (r->scrub_flags & PFSTATE_SETPRIO) {
 		if (pd.tos & IPTOS_LOWDELAY)
 			pqid = 1;
-		if (pf_ieee8021q_setpcp(m, r->set_prio[pqid])) {
+		if (vlan_set_pcp(m, r->set_prio[pqid])) {
 			action = PF_DROP;
 			REASON_SET(&reason, PFRES_MEMORY);
 			log = 1;


More information about the dev-commits-src-all mailing list