Module Name: src
Committed By: knakahara
Date: Tue Sep 26 07:42:06 UTC 2017
Modified Files:
src/sys/arch/powerpc/booke/dev: pq3etsec.c
src/sys/arch/x86/pci: if_vmx.c
src/sys/dev/ic: i82557.c rtl8169.c
src/sys/dev/pci: if_age.c if_alc.c if_ale.c if_bge.c if_bnx.c if_jme.c
if_nfe.c if_sip.c if_stge.c if_ti.c if_txp.c if_vge.c if_wm.c
src/sys/dev/pci/cxgb: cxgb_sge.c
src/sys/dev/pci/ixgbe: ix_txrx.c
src/sys/net: if_ether.h if_ethersubr.c if_vlan.c
src/sys/net/agr: if_agrether_hash.c
src/sys/net80211: ieee80211_input.c ieee80211_output.c
src/sys/sys: mbuf.h
Log Message:
VLAN ID uses pkthdr instead of mtag now. Contributed by s-yamaguchi@IIJ.
I just commit by proxy. Reviewed by [email protected] and [email protected], thanks.
See http://mail-index.netbsd.org/tech-net/2017/09/26/msg006459.html
XXX need pullup to -8 branch
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/powerpc/booke/dev/pq3etsec.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/x86/pci/if_vmx.c
cvs rdiff -u -r1.147 -r1.148 src/sys/dev/ic/i82557.c
cvs rdiff -u -r1.151 -r1.152 src/sys/dev/ic/rtl8169.c
cvs rdiff -u -r1.50 -r1.51 src/sys/dev/pci/if_age.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/if_alc.c
cvs rdiff -u -r1.22 -r1.23 src/sys/dev/pci/if_ale.c
cvs rdiff -u -r1.310 -r1.311 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.61 -r1.62 src/sys/dev/pci/if_bnx.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/if_jme.c
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/pci/if_nfe.c
cvs rdiff -u -r1.166 -r1.167 src/sys/dev/pci/if_sip.c
cvs rdiff -u -r1.62 -r1.63 src/sys/dev/pci/if_stge.c
cvs rdiff -u -r1.101 -r1.102 src/sys/dev/pci/if_ti.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/pci/if_txp.c
cvs rdiff -u -r1.60 -r1.61 src/sys/dev/pci/if_vge.c
cvs rdiff -u -r1.537 -r1.538 src/sys/dev/pci/if_wm.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/pci/cxgb/cxgb_sge.c
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.66 -r1.67 src/sys/net/if_ether.h
cvs rdiff -u -r1.243 -r1.244 src/sys/net/if_ethersubr.c
cvs rdiff -u -r1.99 -r1.100 src/sys/net/if_vlan.c
cvs rdiff -u -r1.3 -r1.4 src/sys/net/agr/if_agrether_hash.c
cvs rdiff -u -r1.88 -r1.89 src/sys/net80211/ieee80211_input.c
cvs rdiff -u -r1.58 -r1.59 src/sys/net80211/ieee80211_output.c
cvs rdiff -u -r1.170 -r1.171 src/sys/sys/mbuf.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/powerpc/booke/dev/pq3etsec.c
diff -u src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.29 src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.30
--- src/sys/arch/powerpc/booke/dev/pq3etsec.c:1.29 Thu Dec 15 09:28:04 2016
+++ src/sys/arch/powerpc/booke/dev/pq3etsec.c Tue Sep 26 07:42:05 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: pq3etsec.c,v 1.29 2016/12/15 09:28:04 ozaki-r Exp $ */
+/* $NetBSD: pq3etsec.c,v 1.30 2017/09/26 07:42:05 knakahara Exp $ */
/*-
* Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -41,7 +41,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.29 2016/12/15 09:28:04 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pq3etsec.c,v 1.30 2017/09/26 07:42:05 knakahara Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -1512,8 +1512,7 @@ pq3etsec_rx_offload(
const struct rxfcb *fcb)
{
if (fcb->rxfcb_flags & RXFCB_VLN) {
- VLAN_INPUT_TAG(&sc->sc_if, m, fcb->rxfcb_vlctl,
- m_freem(m); return false);
+ vlan_set_tag(m, fcb->rxfcb_vlctl);
}
if ((fcb->rxfcb_flags & RXFCB_IP) == 0
|| (fcb->rxfcb_flags & (RXFCB_CIP|RXFCB_CTU)) == 0)
@@ -1991,14 +1990,18 @@ pq3etsec_tx_offload(
{
struct mbuf *m = *mp;
u_int csum_flags = m->m_pkthdr.csum_flags;
- struct m_tag *vtag = VLAN_OUTPUT_TAG(&sc->sc_ec, m);
+ bool have_vtag;
+ uint16_t vtag;
KASSERT(m->m_flags & M_PKTHDR);
+ have_vtag = vlan_has_tag(m);
+ vtag = vlan_get_tag(m);
+
/*
* Let see if we are doing any offload first.
*/
- if (csum_flags == 0 && vtag == 0) {
+ if (csum_flags == 0 && !have_vtag) {
m->m_flags &= ~M_HASFCB;
return;
}
@@ -2012,7 +2015,7 @@ pq3etsec_tx_offload(
| ((csum_flags & M_CSUM_CIP) ? TXFCB_CIP : 0)
| ((csum_flags & M_CSUM_CTU) ? TXFCB_CTU : 0);
}
- if (vtag) {
+ if (have_vtag) {
flags |= TXFCB_VLN;
}
if (flags == 0) {
@@ -2028,7 +2031,7 @@ pq3etsec_tx_offload(
fcb.txfcb_l4os = M_CSUM_DATA_IPv6_HL(m->m_pkthdr.csum_data);
fcb.txfcb_l3os = ETHER_HDR_LEN;
fcb.txfcb_phcs = 0;
- fcb.txfcb_vlctl = vtag ? VLAN_TAG_VALUE(vtag) & 0xffff : 0;
+ fcb.txfcb_vlctl = have_vtag ? vtag : 0;
#if 0
printf("%s: csum_flags=%#x: txfcb flags=%#x lsos=%u l4os=%u phcs=%u vlctl=%#x\n",
@@ -2063,7 +2066,6 @@ pq3etsec_tx_offload(
panic("%s: impossible M_CSUM flags %#x",
device_xname(sc->sc_dev), csum_flags);
#endif
- } else if (vtag) {
}
m->m_flags &= ~M_HASFCB;
Index: src/sys/arch/x86/pci/if_vmx.c
diff -u src/sys/arch/x86/pci/if_vmx.c:1.19 src/sys/arch/x86/pci/if_vmx.c:1.20
--- src/sys/arch/x86/pci/if_vmx.c:1.19 Mon Feb 20 09:02:01 2017
+++ src/sys/arch/x86/pci/if_vmx.c Tue Sep 26 07:42:05 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vmx.c,v 1.19 2017/02/20 09:02:01 knakahara Exp $ */
+/* $NetBSD: if_vmx.c,v 1.20 2017/09/26 07:42:05 knakahara Exp $ */
/* $OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $ */
/*
@@ -19,7 +19,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.19 2017/02/20 09:02:01 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.20 2017/09/26 07:42:05 knakahara Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -1979,12 +1979,8 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
if (!rxcd->no_csum)
vmxnet3_rx_csum(rxcd, m);
- if (rxcd->vlan) {
- VLAN_INPUT_TAG(ifp, m, rxcd->vtag,
- rxq->vxrxq_stats.vmrxs_ierrors++;
- m_freem(m);
- return);
- }
+ if (rxcd->vlan)
+ vlan_set_tag(m, rxcd->vtag);
rxq->vxrxq_stats.vmrxs_ipackets++;
rxq->vxrxq_stats.vmrxs_ibytes += m->m_pkthdr.len;
@@ -2638,7 +2634,6 @@ vmxnet3_txq_encap(struct vmxnet3_txqueue
struct mbuf *m;
bus_dmamap_t dmap;
bus_dma_segment_t *segs;
- struct m_tag *mtag;
int i, gen, start, csum_start, nsegs, error;
sc = txq->vxtxq_sc;
@@ -2701,9 +2696,9 @@ vmxnet3_txq_encap(struct vmxnet3_txqueue
txd->eop = 1;
txd->compreq = 1;
- if ((mtag = VLAN_OUTPUT_TAG(&sc->vmx_ethercom, m)) != NULL) {
+ if (vlan_has_tag(m)) {
sop->vtag_mode = 1;
- sop->vtag = VLAN_TAG_VALUE(mtag);
+ sop->vtag = vlan_get_tag(m);
}
if (m->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) {
Index: src/sys/dev/ic/i82557.c
diff -u src/sys/dev/ic/i82557.c:1.147 src/sys/dev/ic/i82557.c:1.148
--- src/sys/dev/ic/i82557.c:1.147 Mon Feb 20 07:43:29 2017
+++ src/sys/dev/ic/i82557.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: i82557.c,v 1.147 2017/02/20 07:43:29 ozaki-r Exp $ */
+/* $NetBSD: i82557.c,v 1.148 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 1997, 1998, 1999, 2001, 2002 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.147 2017/02/20 07:43:29 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.148 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -944,7 +944,6 @@ fxp_start(struct ifnet *ifp)
KASSERT((csum_flags & (M_CSUM_TCPv6 | M_CSUM_UDPv6)) == 0);
if (sc->sc_flags & FXPF_EXT_RFA) {
- struct m_tag *vtag;
struct fxp_ipcb *ipcb;
/*
* Deal with TCP/IP checksum offload. Note that
@@ -979,10 +978,8 @@ fxp_start(struct ifnet *ifp)
/*
* request VLAN tag insertion if needed.
*/
- vtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0);
- if (vtag) {
- ipcb->ipcb_vlan_id =
- htobe16(*(u_int *)(vtag + 1));
+ if (vlan_has_tag(m0)) {
+ ipcb->ipcb_vlan_id = htobe16(vlan_get_tag(m0));
ipcb->ipcb_ip_activation_high |=
FXP_IPCB_INSERTVLAN_ENABLE;
}
@@ -1403,16 +1400,8 @@ fxp_rxintr(struct fxp_softc *sc)
* check VLAN tag stripping.
*/
if ((sc->sc_flags & FXPF_EXT_RFA) != 0 &&
- (rfa->rfa_status & htole16(FXP_RFA_STATUS_VLAN)) != 0) {
- struct m_tag *vtag;
-
- vtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int),
- M_NOWAIT);
- if (vtag == NULL)
- goto dropit;
- *(u_int *)(vtag + 1) = be16toh(rfa->vlan_id);
- m_tag_prepend(m, vtag);
- }
+ (rfa->rfa_status & htole16(FXP_RFA_STATUS_VLAN)) != 0)
+ vlan_set_tag(m, be16toh(rfa->vlan_id));
/* Do checksum checking. */
if ((ifp->if_csum_flags_rx & (M_CSUM_TCPv4|M_CSUM_UDPv4)) != 0)
Index: src/sys/dev/ic/rtl8169.c
diff -u src/sys/dev/ic/rtl8169.c:1.151 src/sys/dev/ic/rtl8169.c:1.152
--- src/sys/dev/ic/rtl8169.c:1.151 Tue May 16 06:16:35 2017
+++ src/sys/dev/ic/rtl8169.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rtl8169.c,v 1.151 2017/05/16 06:16:35 snj Exp $ */
+/* $NetBSD: rtl8169.c,v 1.152 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 1997, 1998-2003
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.151 2017/05/16 06:16:35 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.152 2017/09/26 07:42:06 knakahara Exp $");
/* $FreeBSD: /repoman/r/ncvs/src/sys/dev/re/if_re.c,v 1.20 2004/04/11 20:34:08 ru Exp $ */
/*
@@ -1345,9 +1345,8 @@ re_rxeof(struct rtk_softc *sc)
}
if (rxvlan & RE_RDESC_VLANCTL_TAG) {
- VLAN_INPUT_TAG(ifp, m,
- bswap16(rxvlan & RE_RDESC_VLANCTL_DATA),
- continue);
+ vlan_set_tag(m,
+ bswap16(rxvlan & RE_RDESC_VLANCTL_DATA));
}
if_percpuq_enqueue(ifp->if_percpuq, m);
}
@@ -1515,7 +1514,6 @@ re_start(struct ifnet *ifp)
bus_dmamap_t map;
struct re_txq *txq;
struct re_desc *d;
- struct m_tag *mtag;
uint32_t cmdstat, re_flags, vlanctl;
int ofree, idx, error, nsegs, seg;
int startdesc, curdesc, lastdesc;
@@ -1640,8 +1638,8 @@ re_start(struct ifnet *ifp)
* appear in all descriptors of a multi-descriptor
* transmission attempt.
*/
- if ((mtag = VLAN_OUTPUT_TAG(&sc->ethercom, m)) != NULL)
- vlanctl |= bswap16(VLAN_TAG_VALUE(mtag)) |
+ if (vlan_has_tag(m))
+ vlanctl |= bswap16(vlan_get_tag(m)) |
RE_TDESC_VLANCTL_TAG;
/*
Index: src/sys/dev/pci/if_age.c
diff -u src/sys/dev/pci/if_age.c:1.50 src/sys/dev/pci/if_age.c:1.51
--- src/sys/dev/pci/if_age.c:1.50 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_age.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_age.c,v 1.50 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_age.c,v 1.51 2017/09/26 07:42:06 knakahara Exp $ */
/* $OpenBSD: if_age.c,v 1.1 2009/01/16 05:00:34 kevlo Exp $ */
/*-
@@ -31,7 +31,7 @@
/* Driver for Attansic Technology Corp. L1 Gigabit Ethernet. */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.50 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.51 2017/09/26 07:42:06 knakahara Exp $");
#include "vlan.h"
@@ -1190,9 +1190,6 @@ age_encap(struct age_softc *sc, struct m
bus_dmamap_t map;
uint32_t cflags, poff, vtag;
int error, i, nsegs, prod;
-#if NVLAN > 0
- struct m_tag *mtag;
-#endif
m = *m_head;
cflags = vtag = 0;
@@ -1260,8 +1257,8 @@ age_encap(struct age_softc *sc, struct m
#if NVLAN > 0
/* Configure VLAN hardware tag insertion. */
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ec, m))) {
- vtag = AGE_TX_VLAN_TAG(htons(VLAN_TAG_VALUE(mtag)));
+ if (vlan_has_tag(m)) {
+ vtag = AGE_TX_VLAN_TAG(htons(vlan_get_tag(m)));
vtag = ((vtag << AGE_TD_VLAN_SHIFT) & AGE_TD_VLAN_MASK);
cflags |= AGE_TD_INSERT_VLAN_TAG;
}
@@ -1499,8 +1496,7 @@ age_rxeof(struct age_softc *sc, struct r
/* Check for VLAN tagged frames. */
if (status & AGE_RRD_VLAN) {
uint32_t vtag = AGE_RX_VLAN(le32toh(rxrd->vtags));
- VLAN_INPUT_TAG(ifp, m, AGE_RX_VLAN_TAG(vtag),
- continue);
+ vlan_set_tag(m, AGE_RX_VLAN_TAG(vtag));
}
#endif
Index: src/sys/dev/pci/if_alc.c
diff -u src/sys/dev/pci/if_alc.c:1.24 src/sys/dev/pci/if_alc.c:1.25
--- src/sys/dev/pci/if_alc.c:1.24 Wed Dec 21 11:56:55 2016
+++ src/sys/dev/pci/if_alc.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_alc.c,v 1.24 2016/12/21 11:56:55 maya Exp $ */
+/* $NetBSD: if_alc.c,v 1.25 2017/09/26 07:42:06 knakahara Exp $ */
/* $OpenBSD: if_alc.c,v 1.1 2009/08/08 09:31:13 kevlo Exp $ */
/*-
* Copyright (c) 2009, Pyun YongHyeon <[email protected]>
@@ -1853,9 +1853,6 @@ alc_encap(struct alc_softc *sc, struct m
bus_dmamap_t map;
uint32_t cflags, poff, vtag;
int error, idx, nsegs, prod;
-#if NVLAN > 0
- struct m_tag *mtag;
-#endif
m = *m_head;
cflags = vtag = 0;
@@ -1914,8 +1911,8 @@ alc_encap(struct alc_softc *sc, struct m
idx = 0;
#if NVLAN > 0
/* Configure VLAN hardware tag insertion. */
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ec, m))) {
- vtag = htons(VLAN_TAG_VALUE(mtag));
+ if (vlan_has_tag(m)) {
+ vtag = htons(vlan_get_tag(m));
vtag = (vtag << TD_VLAN_SHIFT) & TD_VLAN_MASK;
cflags |= TD_INS_VLAN_TAG;
}
@@ -2582,7 +2579,7 @@ alc_rxeof(struct alc_softc *sc, struct r
*/
if (status & RRD_VLAN_TAG) {
u_int32_t vtag = RRD_VLAN(le32toh(rrd->vtag));
- VLAN_INPUT_TAG(ifp, m, ntohs(vtag), );
+ vlan_set_tag(m, ntohs(vtag));
}
#endif
Index: src/sys/dev/pci/if_ale.c
diff -u src/sys/dev/pci/if_ale.c:1.22 src/sys/dev/pci/if_ale.c:1.23
--- src/sys/dev/pci/if_ale.c:1.22 Tue May 23 02:19:14 2017
+++ src/sys/dev/pci/if_ale.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ale.c,v 1.22 2017/05/23 02:19:14 ozaki-r Exp $ */
+/* $NetBSD: if_ale.c,v 1.23 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2008, Pyun YongHyeon <[email protected]>
@@ -32,7 +32,7 @@
/* Driver for Atheros AR8121/AR8113/AR8114 PCIe Ethernet. */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.22 2017/05/23 02:19:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.23 2017/09/26 07:42:06 knakahara Exp $");
#include "vlan.h"
@@ -910,9 +910,6 @@ ale_encap(struct ale_softc *sc, struct m
bus_dmamap_t map;
uint32_t cflags, poff, vtag;
int error, i, nsegs, prod;
-#if NVLAN > 0
- struct m_tag *mtag;
-#endif
m = *m_head;
cflags = vtag = 0;
@@ -997,8 +994,8 @@ ale_encap(struct ale_softc *sc, struct m
#if NVLAN > 0
/* Configure VLAN hardware tag insertion. */
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ec, m))) {
- vtag = ALE_TX_VLAN_TAG(htons(VLAN_TAG_VALUE(mtag)));
+ if (vlan_has_tag(m)) {
+ vtag = ALE_TX_VLAN_TAG(htons(vlan_get_tag(m)));
vtag = ((vtag << ALE_TD_VLAN_SHIFT) & ALE_TD_VLAN_MASK);
cflags |= ALE_TD_INSERT_VLAN_TAG;
}
@@ -1540,7 +1537,7 @@ ale_rxeof(struct ale_softc *sc)
#if NVLAN > 0
if (status & ALE_RD_VLAN) {
uint32_t vtags = ALE_RX_VLAN(le32toh(rs->vtags));
- VLAN_INPUT_TAG(ifp, m, ALE_RX_VLAN_TAG(vtags), );
+ vlan_set_tag(m, ALE_RX_VLAN_TAG(vtags));
}
#endif
Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.310 src/sys/dev/pci/if_bge.c:1.311
--- src/sys/dev/pci/if_bge.c:1.310 Thu Apr 27 10:01:54 2017
+++ src/sys/dev/pci/if_bge.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bge.c,v 1.310 2017/04/27 10:01:54 msaitoh Exp $ */
+/* $NetBSD: if_bge.c,v 1.311 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.310 2017/04/27 10:01:54 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.311 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -4607,7 +4607,7 @@ bge_rxeof(struct bge_softc *sc)
* to vlan_input() instead of ether_input().
*/
if (cur_rx->bge_flags & BGE_RXBDFLAG_VLAN_TAG) {
- VLAN_INPUT_TAG(ifp, m, cur_rx->bge_vlan_tag, continue);
+ vlan_set_tag(m, cur_rx->bge_vlan_tag);
}
if_percpuq_enqueue(ifp->if_percpuq, m);
@@ -5127,8 +5127,9 @@ bge_encap(struct bge_softc *sc, struct m
struct txdmamap_pool_entry *dma;
bus_dmamap_t dmamap;
int i = 0;
- struct m_tag *mtag;
int use_tso, maxsegsize, error;
+ bool have_vtag;
+ uint16_t vtag;
cur = frag = *txidx;
@@ -5330,9 +5331,8 @@ doit:
goto fail_unload;
}
- mtag = sc->ethercom.ec_nvlans ?
- m_tag_find(m_head, PACKET_TAG_VLAN, NULL) : NULL;
-
+ have_vtag = vlan_has_tag(m_head);
+ vtag = vlan_get_tag(m_head);
/* Iterate over dmap-map fragments. */
for (i = 0; i < dmamap->dm_nsegs; i++) {
@@ -5363,9 +5363,9 @@ doit:
f->bge_flags = csum_flags;
}
- if (mtag != NULL) {
+ if (have_vtag) {
f->bge_flags |= BGE_TXBDFLAG_VLAN_TAG;
- f->bge_vlan_tag = VLAN_TAG_VALUE(mtag);
+ f->bge_vlan_tag = vtag;
} else {
f->bge_vlan_tag = 0;
}
Index: src/sys/dev/pci/if_bnx.c
diff -u src/sys/dev/pci/if_bnx.c:1.61 src/sys/dev/pci/if_bnx.c:1.62
--- src/sys/dev/pci/if_bnx.c:1.61 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_bnx.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bnx.c,v 1.61 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_bnx.c,v 1.62 2017/09/26 07:42:06 knakahara Exp $ */
/* $OpenBSD: if_bnx.c,v 1.85 2009/11/09 14:32:41 dlg Exp $ */
/*-
@@ -35,7 +35,7 @@
#if 0
__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
#endif
-__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.61 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.62 2017/09/26 07:42:06 knakahara Exp $");
/*
* The following controllers are supported by this driver:
@@ -4633,9 +4633,7 @@ bnx_rx_intr(struct bnx_softc *sc)
*/
if ((status & L2_FHDR_STATUS_L2_VLAN_TAG) &&
!(sc->rx_mode & BNX_EMAC_RX_MODE_KEEP_VLAN_TAG)) {
- VLAN_INPUT_TAG(ifp, m,
- l2fhdr->l2_fhdr_vlan_tag,
- continue);
+ vlan_set_tag(m, l2fhdr->l2_fhdr_vlan_tag);
}
/* Pass the mbuf off to the upper layers. */
@@ -4947,7 +4945,6 @@ bnx_tx_encap(struct bnx_softc *sc, struc
#endif
uint32_t addr, prod_bseq;
int i, error;
- struct m_tag *mtag;
static struct work bnx_wk; /* Dummy work. Statically allocated. */
mutex_enter(&sc->tx_pkt_mtx);
@@ -4980,10 +4977,9 @@ bnx_tx_encap(struct bnx_softc *sc, struc
}
/* Transfer any VLAN tags to the bd. */
- mtag = VLAN_OUTPUT_TAG(&sc->bnx_ec, m);
- if (mtag != NULL) {
+ if (vlan_has_tag(m)) {
flags |= TX_BD_FLAGS_VLAN_TAG;
- vlan_tag = VLAN_TAG_VALUE(mtag);
+ vlan_tag = vlan_get_tag(m);
}
/* Map the mbuf into DMAable memory. */
Index: src/sys/dev/pci/if_jme.c
diff -u src/sys/dev/pci/if_jme.c:1.31 src/sys/dev/pci/if_jme.c:1.32
--- src/sys/dev/pci/if_jme.c:1.31 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_jme.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_jme.c,v 1.31 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_jme.c,v 1.32 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 2008 Manuel Bouyer. All rights reserved.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.31 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.32 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
@@ -1208,8 +1208,7 @@ jme_intr_rx(jme_softc_t *sc) {
}
if (flags & JME_RD_VLAN_TAG) {
/* pass to vlan_input() */
- VLAN_INPUT_TAG(ifp, mhead,
- (flags & JME_RD_VLAN_MASK), continue);
+ vlan_set_tag(mhead, (flags & JME_RD_VLAN_MASK));
}
if_percpuq_enqueue(ifp->if_percpuq, mhead);
}
@@ -1347,7 +1346,6 @@ jme_encap(struct jme_softc *sc, struct m
{
struct jme_desc *desc;
struct mbuf *m;
- struct m_tag *mtag;
int error, i, prod, headdsc, nsegs;
uint32_t cflags, tso_segsz;
@@ -1490,8 +1488,8 @@ jme_encap(struct jme_softc *sc, struct m
cflags |= JME_TD_UDPCSUM;
}
/* Configure VLAN. */
- if ((mtag = VLAN_OUTPUT_TAG(&sc->jme_ec, m)) != NULL) {
- cflags |= (VLAN_TAG_VALUE(mtag) & JME_TD_VLAN_MASK);
+ if (vlan_has_tag(m)) {
+ cflags |= (vlan_get_tag(m) & JME_TD_VLAN_MASK);
cflags |= JME_TD_VLAN_TAG;
}
Index: src/sys/dev/pci/if_nfe.c
diff -u src/sys/dev/pci/if_nfe.c:1.63 src/sys/dev/pci/if_nfe.c:1.64
--- src/sys/dev/pci/if_nfe.c:1.63 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_nfe.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_nfe.c,v 1.63 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_nfe.c,v 1.64 2017/09/26 07:42:06 knakahara Exp $ */
/* $OpenBSD: if_nfe.c,v 1.77 2008/02/05 16:52:50 brad Exp $ */
/*-
@@ -21,7 +21,7 @@
/* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.63 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.64 2017/09/26 07:42:06 knakahara Exp $");
#include "opt_inet.h"
#include "vlan.h"
@@ -1072,7 +1072,6 @@ nfe_encap(struct nfe_softc *sc, struct m
bus_dmamap_t map;
uint16_t flags, csumflags;
#if NVLAN > 0
- struct m_tag *mtag;
uint32_t vtag = 0;
#endif
int error, i, first;
@@ -1101,8 +1100,8 @@ nfe_encap(struct nfe_softc *sc, struct m
#if NVLAN > 0
/* setup h/w VLAN tagging */
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL)
- vtag = NFE_TX_VTAG | VLAN_TAG_VALUE(mtag);
+ if (vlan_has_tag(m0))
+ vtag = NFE_TX_VTAG | vlan_get_tag(m0);
#endif
if ((sc->sc_flags & NFE_HW_CSUM) != 0) {
if (m0->m_pkthdr.csum_flags & M_CSUM_IPv4)
Index: src/sys/dev/pci/if_sip.c
diff -u src/sys/dev/pci/if_sip.c:1.166 src/sys/dev/pci/if_sip.c:1.167
--- src/sys/dev/pci/if_sip.c:1.166 Wed May 10 02:46:33 2017
+++ src/sys/dev/pci/if_sip.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sip.c,v 1.166 2017/05/10 02:46:33 msaitoh Exp $ */
+/* $NetBSD: if_sip.c,v 1.167 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.166 2017/05/10 02:46:33 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.167 2017/09/26 07:42:06 knakahara Exp $");
@@ -1376,7 +1376,6 @@ static inline void
sipcom_set_extsts(struct sip_softc *sc, int lasttx, struct mbuf *m0,
uint64_t capenable)
{
- struct m_tag *mtag;
u_int32_t extsts;
#ifdef DEBUG
struct ifnet *ifp = &sc->sc_ethercom.ec_if;
@@ -1397,10 +1396,10 @@ sipcom_set_extsts(struct sip_softc *sc,
* htole32(). That's why there must be an
* unconditional swap instead of htons() inside.
*/
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL) {
+ if (vlan_has_tag(m0)) {
sc->sc_txdescs[lasttx].sipd_extsts |=
htole32(EXTSTS_VPKT |
- (bswap16(VLAN_TAG_VALUE(mtag)) &
+ (bswap16(vlan_get_tag(m0)) &
EXTSTS_VTCI));
}
@@ -2206,8 +2205,7 @@ gsip_rxintr(struct sip_softc *sc)
* of htons() is used.
*/
if ((extsts & EXTSTS_VPKT) != 0) {
- VLAN_INPUT_TAG(ifp, m, bswap16(extsts & EXTSTS_VTCI),
- continue);
+ vlan_set_tag(m, bswap16(extsts & EXTSTS_VTCI));
}
/*
Index: src/sys/dev/pci/if_stge.c
diff -u src/sys/dev/pci/if_stge.c:1.62 src/sys/dev/pci/if_stge.c:1.63
--- src/sys/dev/pci/if_stge.c:1.62 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_stge.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_stge.c,v 1.62 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_stge.c,v 1.63 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.62 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.63 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
@@ -805,8 +805,9 @@ stge_start(struct ifnet *ifp)
* descriptors.
*/
for (;;) {
- struct m_tag *mtag;
uint64_t tfc;
+ bool have_vtag;
+ uint16_t vtag;
/*
* Grab a packet off the queue.
@@ -827,7 +828,8 @@ stge_start(struct ifnet *ifp)
/*
* See if we have any VLAN stuff.
*/
- mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0);
+ have_vtag = vlan_has_tag(m0);
+ vtag = vlan_get_tag(m0);
/*
* Get the last and next available transmit descriptor.
@@ -931,7 +933,7 @@ stge_start(struct ifnet *ifp)
TFD_FragCount(seg) | csum_flags |
(((nexttx & STGE_TXINTR_SPACING_MASK) == 0) ?
TFD_TxDMAIndicate : 0);
- if (mtag) {
+ if (have_vtag) {
#if 0
struct ether_header *eh =
mtod(m0, struct ether_header *);
@@ -943,7 +945,7 @@ stge_start(struct ifnet *ifp)
#ifdef STGE_VLAN_CFI
TFD_CFI |
#endif
- TFD_VID(VLAN_TAG_VALUE(mtag));
+ TFD_VID(vtag);
}
tfd->tfd_control = htole64(tfc);
@@ -1358,7 +1360,7 @@ stge_rxintr(struct stge_softc *sc)
* Check for VLAN tagged packets
*/
if (status & RFD_VLANDetected)
- VLAN_INPUT_TAG(ifp, m, RFD_TCI(status), continue);
+ vlan_set_tag(m, RFD_TCI(status));
#endif
#if 0
Index: src/sys/dev/pci/if_ti.c
diff -u src/sys/dev/pci/if_ti.c:1.101 src/sys/dev/pci/if_ti.c:1.102
--- src/sys/dev/pci/if_ti.c:1.101 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_ti.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ti.c,v 1.101 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_ti.c,v 1.102 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -81,7 +81,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.101 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.102 2017/09/26 07:42:06 knakahara Exp $");
#include "opt_inet.h"
@@ -2018,10 +2018,8 @@ ti_rxeof(struct ti_softc *sc)
}
if (cur_rx->ti_flags & TI_BDFLAG_VLAN_TAG) {
- VLAN_INPUT_TAG(ifp, m,
- /* ti_vlan_tag also has the priority, trim it */
- cur_rx->ti_vlan_tag & 4095,
- continue);
+ /* ti_vlan_tag also has the priority, trim it */
+ vlan_set_tag(m, cur_rx->ti_vlan_tag & 0x0fff);
}
if_percpuq_enqueue(ifp->if_percpuq, m);
@@ -2209,7 +2207,6 @@ ti_encap_tigon1(struct ti_softc *sc, str
struct txdmamap_pool_entry *dma;
bus_dmamap_t dmamap;
int error, i;
- struct m_tag *mtag;
u_int16_t csum_flags = 0;
dma = SIMPLEQ_FIRST(&sc->txdma_list);
@@ -2265,9 +2262,9 @@ ti_encap_tigon1(struct ti_softc *sc, str
TI_HOSTADDR(f->ti_addr) = dmamap->dm_segs[i].ds_addr;
f->ti_len = dmamap->dm_segs[i].ds_len;
f->ti_flags = csum_flags;
- if ((mtag = VLAN_OUTPUT_TAG(&sc->ethercom, m_head))) {
+ if (vlan_has_tag(m_head)) {
f->ti_flags |= TI_BDFLAG_VLAN_TAG;
- f->ti_vlan_tag = VLAN_TAG_VALUE(mtag);
+ f->ti_vlan_tag = vlan_get_tag(m_head);
} else {
f->ti_vlan_tag = 0;
}
@@ -2313,7 +2310,6 @@ ti_encap_tigon2(struct ti_softc *sc, str
struct txdmamap_pool_entry *dma;
bus_dmamap_t dmamap;
int error, i;
- struct m_tag *mtag;
u_int16_t csum_flags = 0;
dma = SIMPLEQ_FIRST(&sc->txdma_list);
@@ -2357,9 +2353,9 @@ ti_encap_tigon2(struct ti_softc *sc, str
TI_HOSTADDR(f->ti_addr) = dmamap->dm_segs[i].ds_addr;
f->ti_len = dmamap->dm_segs[i].ds_len;
f->ti_flags = csum_flags;
- if ((mtag = VLAN_OUTPUT_TAG(&sc->ethercom, m_head))) {
+ if (vlan_has_tag(m_head)) {
f->ti_flags |= TI_BDFLAG_VLAN_TAG;
- f->ti_vlan_tag = VLAN_TAG_VALUE(mtag);
+ f->ti_vlan_tag = vlan_get_tag(m_head);
} else {
f->ti_vlan_tag = 0;
}
Index: src/sys/dev/pci/if_txp.c
diff -u src/sys/dev/pci/if_txp.c:1.47 src/sys/dev/pci/if_txp.c:1.48
--- src/sys/dev/pci/if_txp.c:1.47 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_txp.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_txp.c,v 1.47 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_txp.c,v 1.48 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 2001
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.47 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.48 2017/09/26 07:42:06 knakahara Exp $");
#include "opt_inet.h"
@@ -749,8 +749,7 @@ txp_rx_reclaim(struct txp_softc *sc, str
m->m_pkthdr.csum_flags = sumflags;
if (rxd->rx_stat & htole32(RX_STAT_VLAN)) {
- VLAN_INPUT_TAG(ifp, m, htons(rxd->rx_vlan >> 16),
- continue);
+ vlan_set_tag(m, htons(rxd->rx_vlan >> 16));
}
if_percpuq_enqueue(ifp->if_percpuq, m);
@@ -1397,7 +1396,6 @@ txp_start(struct ifnet *ifp)
struct mbuf *m, *mnew;
struct txp_swdesc *sd;
u_int32_t firstprod, firstcnt, prod, cnt, i;
- struct m_tag *mtag;
if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
return;
@@ -1458,9 +1456,9 @@ txp_start(struct ifnet *ifp)
if (++cnt >= (TX_ENTRIES - 4))
goto oactive;
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_arpcom, m)))
+ if (vlan_has_tag(m))
txd->tx_pflags = TX_PFLAGS_VLAN |
- (htons(VLAN_TAG_VALUE(mtag)) << TX_PFLAGS_VLANTAG_S);
+ (htons(vlan_get_tag(m)) << TX_PFLAGS_VLANTAG_S);
if (m->m_pkthdr.csum_flags & M_CSUM_IPv4)
txd->tx_pflags |= TX_PFLAGS_IPCKSUM;
Index: src/sys/dev/pci/if_vge.c
diff -u src/sys/dev/pci/if_vge.c:1.60 src/sys/dev/pci/if_vge.c:1.61
--- src/sys/dev/pci/if_vge.c:1.60 Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_vge.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vge.c,v 1.60 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: if_vge.c,v 1.61 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2004
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.60 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.61 2017/09/26 07:42:06 knakahara Exp $");
/*
* VIA Networking Technologies VT612x PCI gigabit ethernet NIC driver.
@@ -1364,8 +1364,7 @@ vge_rxeof(struct vge_softc *sc)
* On BE machines, tag is stored in BE as stream data
* but it was already swapped by le32toh() above.
*/
- VLAN_INPUT_TAG(ifp, m,
- bswap16(rxctl & VGE_RDCTL_VLANID), continue);
+ vlan_set_tag(m, bswap16(rxctl & VGE_RDCTL_VLANID));
}
if_percpuq_enqueue(ifp->if_percpuq, m);
@@ -1539,7 +1538,6 @@ vge_encap(struct vge_softc *sc, struct m
struct mbuf *m_new;
bus_dmamap_t map;
int m_csumflags, seg, error, flags;
- struct m_tag *mtag;
size_t sz;
uint32_t td_sts, td_ctl;
@@ -1630,14 +1628,13 @@ vge_encap(struct vge_softc *sc, struct m
/*
* Set up hardware VLAN tagging.
*/
- mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m_head);
- if (mtag != NULL) {
+ if (vlan_has_tag(m_head)) {
/*
* No need htons() here since vge(4) chip assumes
* that tags are written in little endian and
* we already use htole32() here.
*/
- td_ctl |= VLAN_TAG_VALUE(mtag) | VGE_TDCTL_VTAG;
+ td_ctl |= vlan_get_tag(m_head) | VGE_TDCTL_VTAG;
}
txd->td_ctl = htole32(td_ctl);
txd->td_sts = htole32(td_sts);
Index: src/sys/dev/pci/if_wm.c
diff -u src/sys/dev/pci/if_wm.c:1.537 src/sys/dev/pci/if_wm.c:1.538
--- src/sys/dev/pci/if_wm.c:1.537 Mon Jul 31 06:41:01 2017
+++ src/sys/dev/pci/if_wm.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wm.c,v 1.537 2017/07/31 06:41:01 knakahara Exp $ */
+/* $NetBSD: if_wm.c,v 1.538 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -83,7 +83,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.537 2017/07/31 06:41:01 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.538 2017/09/26 07:42:06 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_net_mpsafe.h"
@@ -7043,7 +7043,6 @@ wm_send_common_locked(struct ifnet *ifp,
{
struct wm_softc *sc = ifp->if_softc;
struct mbuf *m0;
- struct m_tag *mtag;
struct wm_txsoft *txs;
bus_dmamap_t dmamap;
int error, nexttx, lasttx = -1, ofree, seg, segs_needed, use_tso;
@@ -7292,11 +7291,11 @@ wm_send_common_locked(struct ifnet *ifp,
*
* This is only valid on the last descriptor of the packet.
*/
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL) {
+ if (vlan_has_tag(m0)) {
txq->txq_descs[lasttx].wtx_cmdlen |=
htole32(WTX_CMD_VLE);
txq->txq_descs[lasttx].wtx_fields.wtxu_vlan
- = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
+ = htole16(vlan_get_tag(m0));
}
txs->txs_lastdesc = lasttx;
@@ -7365,7 +7364,6 @@ wm_nq_tx_offload(struct wm_softc *sc, st
struct wm_txsoft *txs, uint32_t *cmdlenp, uint32_t *fieldsp, bool *do_csum)
{
struct mbuf *m0 = txs->txs_mbuf;
- struct m_tag *mtag;
uint32_t vl_len, mssidx, cmdc;
struct ether_header *eh;
int offset, iphl;
@@ -7409,8 +7407,8 @@ wm_nq_tx_offload(struct wm_softc *sc, st
vl_len |= (iphl << NQTXC_VLLEN_IPLEN_SHIFT);
KASSERT((iphl & ~NQTXC_VLLEN_IPLEN_MASK) == 0);
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL) {
- vl_len |= ((VLAN_TAG_VALUE(mtag) & NQTXC_VLLEN_VLAN_MASK)
+ if (vlan_has_tag(m0)) {
+ vl_len |= ((vlan_get_tag(m0) & NQTXC_VLLEN_VLAN_MASK)
<< NQTXC_VLLEN_VLAN_SHIFT);
*cmdlenp |= NQTX_CMD_VLE;
}
@@ -7648,7 +7646,6 @@ wm_nq_send_common_locked(struct ifnet *i
{
struct wm_softc *sc = ifp->if_softc;
struct mbuf *m0;
- struct m_tag *mtag;
struct wm_txsoft *txs;
bus_dmamap_t dmamap;
int error, nexttx, lasttx = -1, seg, segs_needed;
@@ -7809,12 +7806,11 @@ wm_nq_send_common_locked(struct ifnet *i
htole32(WTX_CMD_IFCS | dmamap->dm_segs[0].ds_len);
txq->txq_descs[nexttx].wtx_fields.wtxu_status = 0;
txq->txq_descs[nexttx].wtx_fields.wtxu_options = 0;
- if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) !=
- NULL) {
+ if (vlan_has_tag(m0)) {
txq->txq_descs[nexttx].wtx_cmdlen |=
htole32(WTX_CMD_VLE);
txq->txq_descs[nexttx].wtx_fields.wtxu_vlan =
- htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
+ htole16(vlan_get_tag(m0));
} else {
txq->txq_descs[nexttx].wtx_fields.wtxu_vlan =0;
}
@@ -8228,11 +8224,10 @@ static inline bool
wm_rxdesc_input_vlantag(struct wm_rxqueue *rxq, uint32_t status, uint16_t vlantag,
struct mbuf *m)
{
- struct ifnet *ifp = &rxq->rxq_sc->sc_ethercom.ec_if;
if (wm_rxdesc_is_set_status(rxq->rxq_sc, status,
WRX_ST_VP, EXTRXC_STATUS_VP, NQRXC_STATUS_VP)) {
- VLAN_INPUT_TAG(ifp, m, le16toh(vlantag), return false);
+ vlan_set_tag(m, le16toh(vlantag));
}
return true;
Index: src/sys/dev/pci/cxgb/cxgb_sge.c
diff -u src/sys/dev/pci/cxgb/cxgb_sge.c:1.4 src/sys/dev/pci/cxgb/cxgb_sge.c:1.5
--- src/sys/dev/pci/cxgb/cxgb_sge.c:1.4 Fri Jun 10 13:27:14 2016
+++ src/sys/dev/pci/cxgb/cxgb_sge.c Tue Sep 26 07:42:06 2017
@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE.
***************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cxgb_sge.c,v 1.4 2016/06/10 13:27:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cxgb_sge.c,v 1.5 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1198,8 +1198,8 @@ t3_encap(struct port_info *p, struct mbu
* XXX need to add VLAN support for 6.x
*/
#ifdef VLAN_SUPPORTED
- if (m0->m_flags & M_VLANTAG)
- cntrl |= F_TXPKT_VLAN_VLD | V_TXPKT_VLAN(m0->m_pkthdr.ether_vtag);
+ if (vlan_has_tag(m0))
+ cntrl |= F_TXPKT_VLAN_VLD | V_TXPKT_VLAN(vlan_get_tag(m0));
if (m0->m_pkthdr.csum_flags & (CSUM_TSO))
tso_info = V_LSO_MSS(m0->m_pkthdr.tso_segsz);
#endif
@@ -1222,7 +1222,7 @@ t3_encap(struct port_info *p, struct mbu
}
#ifdef VLAN_SUPPORTED
- if (__predict_false(m0->m_flags & M_VLANTAG)) {
+ if (vlan_has_tag(m0)) {
eth_type = CPL_ETH_II_VLAN;
ip = (struct ip *)(pkthdr + ETHER_HDR_LEN +
ETHER_VLAN_ENCAP_LEN);
@@ -2163,9 +2163,8 @@ t3_rx_eth(struct adapter *adap, struct s
* XXX need to add VLAN support for 6.x
*/
#ifdef VLAN_SUPPORTED
- if (__predict_false(cpl->vlan_valid)) {
- m->m_pkthdr.ether_vtag = ntohs(cpl->vlan);
- m->m_flags |= M_VLANTAG;
+ if (cpl->vlan_valid) {
+ vlan_set_tag(ntohs(cpl->vlan));
}
#endif
Index: src/sys/dev/pci/ixgbe/ix_txrx.c
diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.28 src/sys/dev/pci/ixgbe/ix_txrx.c:1.29
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.28 Wed Aug 30 08:49:18 2017
+++ src/sys/dev/pci/ixgbe/ix_txrx.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ix_txrx.c,v 1.28 2017/08/30 08:49:18 msaitoh Exp $ */
+/* $NetBSD: ix_txrx.c,v 1.29 2017/09/26 07:42:06 knakahara Exp $ */
/******************************************************************************
@@ -320,9 +320,7 @@ ixgbe_xmit(struct tx_ring *txr, struct m
struct adapter *adapter = txr->adapter;
struct ixgbe_tx_buf *txbuf;
union ixgbe_adv_tx_desc *txd = NULL;
- struct m_tag *mtag;
struct ifnet *ifp = adapter->ifp;
- struct ethercom *ec = &adapter->osdep.ec;
int i, j, error;
int first;
u32 olinfo_status = 0, cmd_type_len;
@@ -333,7 +331,7 @@ ixgbe_xmit(struct tx_ring *txr, struct m
cmd_type_len = (IXGBE_ADVTXD_DTYP_DATA |
IXGBE_ADVTXD_DCMD_IFCS | IXGBE_ADVTXD_DCMD_DEXT);
- if ((mtag = VLAN_OUTPUT_TAG(ec, m_head)) != NULL)
+ if (vlan_has_tag(m_head))
cmd_type_len |= IXGBE_ADVTXD_DCMD_VLE;
/*
@@ -716,8 +714,6 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr,
u32 *cmd_type_len, u32 *olinfo_status)
{
struct adapter *adapter = txr->adapter;
- struct ethercom *ec = &adapter->osdep.ec;
- struct m_tag *mtag;
struct ixgbe_adv_tx_context_desc *TXD;
struct ether_vlan_header *eh;
#ifdef INET
@@ -760,8 +756,8 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr,
* be placed into the context descriptor. Hence
* we need to make one even if not doing offloads.
*/
- if ((mtag = VLAN_OUTPUT_TAG(ec, mp)) != NULL) {
- vtag = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
+ if (vlan_has_tag(mp)) {
+ vtag = htole16(vlan_get_tag(mp));
vlan_macip_lens |= (vtag << IXGBE_ADVTXD_VLAN_SHIFT);
} else if (!(txr->adapter->feat_en & IXGBE_FEATURE_NEEDS_CTXD) &&
(offload == FALSE))
@@ -882,9 +878,6 @@ static int
ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *cmd_type_len,
u32 *olinfo_status)
{
- struct m_tag *mtag;
- struct adapter *adapter = txr->adapter;
- struct ethercom *ec = &adapter->osdep.ec;
struct ixgbe_adv_tx_context_desc *TXD;
struct ether_vlan_header *eh;
#ifdef INET6
@@ -958,8 +951,8 @@ ixgbe_tso_setup(struct tx_ring *txr, str
paylen = mp->m_pkthdr.len - ehdrlen - ip_hlen - tcp_hlen;
/* VLAN MACLEN IPLEN */
- if ((mtag = VLAN_OUTPUT_TAG(ec, mp)) != NULL) {
- vtag = htole16(VLAN_TAG_VALUE(mtag) & 0xffff);
+ if (vlan_has_tag(mp)) {
+ vtag = htole16(vlan_get_tag(mp));
vlan_macip_lens |= (vtag << IXGBE_ADVTXD_VLAN_SHIFT);
}
@@ -1874,9 +1867,7 @@ ixgbe_rxeof(struct ix_queue *que)
if ((rxr->vtag_strip) && (staterr & IXGBE_RXD_STAT_VP))
vtag = le16toh(cur->wb.upper.vlan);
if (vtag) {
- VLAN_INPUT_TAG(ifp, sendmp, vtag,
- printf("%s: could not apply VLAN "
- "tag", __func__));
+ vlan_set_tag(sendmp, vtag);
}
if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
ixgbe_rx_checksum(staterr, sendmp, ptype,
Index: src/sys/net/if_ether.h
diff -u src/sys/net/if_ether.h:1.66 src/sys/net/if_ether.h:1.67
--- src/sys/net/if_ether.h:1.66 Wed Dec 28 07:32:16 2016
+++ src/sys/net/if_ether.h Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ether.h,v 1.66 2016/12/28 07:32:16 ozaki-r Exp $ */
+/* $NetBSD: if_ether.h,v 1.67 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
@@ -295,35 +295,29 @@ struct ether_multistep {
*/
/* add VLAN tag to input/received packet */
-static inline int vlan_input_tag(struct ifnet *, struct mbuf *, u_int);
-static inline int
-vlan_input_tag(struct ifnet *ifp, struct mbuf *m, u_int vlanid)
+static inline void
+vlan_set_tag(struct mbuf *m, u_int16_t vlanid)
{
- struct m_tag *mtag;
- mtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int), M_NOWAIT);
- if (mtag == NULL) {
- ifp->if_ierrors++;
- printf("%s: unable to allocate VLAN tag\n", ifp->if_xname);
- m_freem(m);
- return 1;
- }
- *(u_int *)(mtag + 1) = vlanid;
- m_tag_prepend(m, mtag);
- return 0;
+
+ KASSERT((vlanid & ~0x0FFF) == 0);
+
+ m->m_pkthdr.ether_vtag = vlanid;
+ m->m_flags |= M_VLANTAG;
+ return;
}
-#define VLAN_INPUT_TAG(ifp, m, vlanid, _errcase) \
- if (vlan_input_tag(ifp, m, vlanid) != 0) { \
- _errcase; \
- }
-
-/* extract VLAN tag from output/trasmit packet */
-#define VLAN_OUTPUT_TAG(ec, m0) \
- (VLAN_ATTACHED(ec) ? m_tag_find((m0), PACKET_TAG_VLAN, NULL) : NULL)
+static inline bool
+vlan_has_tag(struct mbuf *m)
+{
+ return (m->m_flags & M_VLANTAG) != 0;
+}
/* extract VLAN ID value from a VLAN tag */
-#define VLAN_TAG_VALUE(mtag) \
- ((*(u_int *)(mtag + 1)) & 4095)
+static inline uint16_t
+vlan_get_tag(struct mbuf *m)
+{
+ return m->m_pkthdr.ether_vtag;
+}
/* test if any VLAN is configured for this interface */
#define VLAN_ATTACHED(ec) ((ec)->ec_nvlans > 0)
Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.243 src/sys/net/if_ethersubr.c:1.244
--- src/sys/net/if_ethersubr.c:1.243 Sun Jul 23 10:55:00 2017
+++ src/sys/net/if_ethersubr.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ethersubr.c,v 1.243 2017/07/23 10:55:00 para Exp $ */
+/* $NetBSD: if_ethersubr.c,v 1.244 2017/09/26 07:42:06 knakahara Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.243 2017/07/23 10:55:00 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.244 2017/09/26 07:42:06 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -679,7 +679,7 @@ ether_input(struct ifnet *ifp, struct mb
* see if the device performed the decapsulation and
* provided us with the tag.
*/
- if (ec->ec_nvlans && m_tag_find(m, PACKET_TAG_VLAN, NULL) != NULL) {
+ if (ec->ec_nvlans && vlan_has_tag(m)) {
#if NVLAN > 0
/*
* vlan_input() will either recursively call ether_input()
Index: src/sys/net/if_vlan.c
diff -u src/sys/net/if_vlan.c:1.99 src/sys/net/if_vlan.c:1.100
--- src/sys/net/if_vlan.c:1.99 Wed Aug 9 06:17:23 2017
+++ src/sys/net/if_vlan.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vlan.c,v 1.99 2017/08/09 06:17:23 knakahara Exp $ */
+/* $NetBSD: if_vlan.c,v 1.100 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.99 2017/08/09 06:17:23 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.100 2017/09/26 07:42:06 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -1231,17 +1231,7 @@ vlan_start(struct ifnet *ifp)
* the tag in the mbuf header.
*/
if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING) {
- struct m_tag *mtag;
-
- mtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int),
- M_NOWAIT);
- if (mtag == NULL) {
- ifp->if_oerrors++;
- m_freem(m);
- continue;
- }
- *(u_int *)(mtag + 1) = mib->ifvm_tag;
- m_tag_prepend(m, mtag);
+ vlan_set_tag(m, mib->ifvm_tag);
} else {
/*
* insert the tag ourselves
@@ -1360,18 +1350,7 @@ vlan_transmit(struct ifnet *ifp, struct
* the tag in the mbuf header.
*/
if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING) {
- struct m_tag *mtag;
-
- mtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int),
- M_NOWAIT);
- if (mtag == NULL) {
- ifp->if_oerrors++;
- m_freem(m);
- error = ENOBUFS;
- goto out;
- }
- *(u_int *)(mtag + 1) = mib->ifvm_tag;
- m_tag_prepend(m, mtag);
+ vlan_set_tag(m, mib->ifvm_tag);
} else {
/*
* insert the tag ourselves
@@ -1479,15 +1458,14 @@ vlan_input(struct ifnet *ifp, struct mbu
{
struct ifvlan *ifv;
u_int tag;
- struct m_tag *mtag;
struct ifvlan_linkmib *mib;
struct psref psref;
+ bool have_vtag;
- mtag = m_tag_find(m, PACKET_TAG_VLAN, NULL);
- if (mtag != NULL) {
- /* m contains a normal ethernet frame, the tag is in mtag */
- tag = EVL_VLANOFTAG(*(u_int *)(mtag + 1));
- m_tag_delete(m, mtag);
+ have_vtag = vlan_has_tag(m);
+ if (have_vtag) {
+ tag = EVL_VLANOFTAG(vlan_get_tag(m));
+ m->m_flags &= ~M_VLANTAG;
} else {
switch (ifp->if_type) {
case IFT_ETHER:
@@ -1542,7 +1520,7 @@ vlan_input(struct ifnet *ifp, struct mbu
* Now, remove the encapsulation header. The original
* header has already been fixed up above.
*/
- if (mtag == NULL) {
+ if (!have_vtag) {
memmove(mtod(m, char *) + mib->ifvm_encaplen,
mtod(m, void *), sizeof(struct ether_header));
m_adj(m, mib->ifvm_encaplen);
Index: src/sys/net/agr/if_agrether_hash.c
diff -u src/sys/net/agr/if_agrether_hash.c:1.3 src/sys/net/agr/if_agrether_hash.c:1.4
--- src/sys/net/agr/if_agrether_hash.c:1.3 Sat May 5 18:23:23 2007
+++ src/sys/net/agr/if_agrether_hash.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: if_agrether_hash.c,v 1.3 2007/05/05 18:23:23 yamt Exp $ */
+/* $NetBSD: if_agrether_hash.c,v 1.4 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agrether_hash.c,v 1.3 2007/05/05 18:23:23 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agrether_hash.c,v 1.4 2017/09/26 07:42:06 knakahara Exp $");
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -77,7 +77,6 @@ agrether_hashmbuf(struct agr_softc *sc,
int off = 0;
uint16_t tci;
uint16_t etype;
- struct m_tag *mtag;
eh = agr_m_extract(m, off, sizeof(*eh), &eh_store);
if (eh == NULL) {
@@ -101,8 +100,8 @@ agrether_hashmbuf(struct agr_softc *sc,
tci = vlanhdr->evl_tag;
etype = vlanhdr->evl_proto;
off += sizeof(*vlanhdr) - sizeof(*eh);
- } else if ((mtag = m_tag_find(m, PACKET_TAG_VLAN, NULL)) != NULL) {
- tci = htole16((*(u_int *)(mtag + 1)) & 0xffff);
+ } else if (vlan_has_tag(m)) {
+ tci = htole16(vlan_get_tag(m));
} else {
tci = 0;
}
Index: src/sys/net80211/ieee80211_input.c
diff -u src/sys/net80211/ieee80211_input.c:1.88 src/sys/net80211/ieee80211_input.c:1.89
--- src/sys/net80211/ieee80211_input.c:1.88 Mon Mar 6 08:36:20 2017
+++ src/sys/net80211/ieee80211_input.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ieee80211_input.c,v 1.88 2017/03/06 08:36:20 ozaki-r Exp $ */
+/* $NetBSD: ieee80211_input.c,v 1.89 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2001 Atsushi Onoe
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -36,7 +36,7 @@
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.81 2005/08/10 16:22:29 sam Exp $");
#endif
#ifdef __NetBSD__
-__KERNEL_RCSID(0, "$NetBSD: ieee80211_input.c,v 1.88 2017/03/06 08:36:20 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ieee80211_input.c,v 1.89 2017/09/26 07:42:06 knakahara Exp $");
#endif
#ifdef _KERNEL_OPT
@@ -788,11 +788,8 @@ ieee80211_deliver_data(struct ieee80211c
}
if (m != NULL) {
- if (ni->ni_vlan != 0) {
- /* attach vlan tag */
- /* XXX goto err? */
- VLAN_INPUT_TAG(ifp, m, ni->ni_vlan, goto out);
- }
+ if (ni->ni_vlan != 0)
+ vlan_set_tag(m, ni->ni_vlan);
/*
* XXX once ieee80211_input (or rxintr itself) runs in softint
@@ -802,11 +799,6 @@ ieee80211_deliver_data(struct ieee80211c
if_percpuq_enqueue(ifp->if_percpuq, m);
}
return;
- out:
- if (m != NULL) {
- bpf_mtap3(ic->ic_rawbpf, m);
- m_freem(m);
- }
}
static struct mbuf *
Index: src/sys/net80211/ieee80211_output.c
diff -u src/sys/net80211/ieee80211_output.c:1.58 src/sys/net80211/ieee80211_output.c:1.59
--- src/sys/net80211/ieee80211_output.c:1.58 Wed Jan 4 03:05:24 2017
+++ src/sys/net80211/ieee80211_output.c Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ieee80211_output.c,v 1.58 2017/01/04 03:05:24 nonaka Exp $ */
+/* $NetBSD: ieee80211_output.c,v 1.59 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 2001 Atsushi Onoe
* Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -36,7 +36,7 @@
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_output.c,v 1.34 2005/08/10 16:22:29 sam Exp $");
#endif
#ifdef __NetBSD__
-__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.58 2017/01/04 03:05:24 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.59 2017/09/26 07:42:06 knakahara Exp $");
#endif
#ifdef _KERNEL_OPT
@@ -296,12 +296,11 @@ ieee80211_classify(struct ieee80211com *
v_wme_ac = 0;
if (ni->ni_vlan != 0) {
/* XXX used to check ec_nvlans. */
- struct m_tag *mtag = m_tag_find(m, PACKET_TAG_VLAN, NULL);
- if (mtag == NULL) {
+ if (!vlan_has_tag(m)) {
IEEE80211_NODE_STAT(ni, tx_novlantag);
return 1;
}
- if (EVL_VLANOFTAG(VLAN_TAG_VALUE(mtag)) !=
+ if (EVL_VLANOFTAG(vlan_get_tag(m)) !=
EVL_VLANOFTAG(ni->ni_vlan)) {
IEEE80211_NODE_STAT(ni, tx_vlanmismatch);
return 1;
Index: src/sys/sys/mbuf.h
diff -u src/sys/sys/mbuf.h:1.170 src/sys/sys/mbuf.h:1.171
--- src/sys/sys/mbuf.h:1.170 Sat May 27 21:02:56 2017
+++ src/sys/sys/mbuf.h Tue Sep 26 07:42:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: mbuf.h,v 1.170 2017/05/27 21:02:56 bouyer Exp $ */
+/* $NetBSD: mbuf.h,v 1.171 2017/09/26 07:42:06 knakahara Exp $ */
/*-
* Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -174,7 +174,7 @@ struct m_hdr {
* checksum) -- this is so we can accumulate the checksum for fragmented
* packets during reassembly.
*
- * Size ILP32: 36
+ * Size ILP32: 40
* LP64: 56
*/
struct pkthdr {
@@ -188,14 +188,16 @@ struct pkthdr {
int csum_flags; /* checksum flags */
uint32_t csum_data; /* checksum data */
u_int segsz; /* segment size */
+ uint16_t ether_vtag; /* ethernet 802.1p+q vlan tag */
+ uint16_t pad0; /* padding */
/*
* Following three fields are open-coded struct altq_pktattr
* to rearrange struct pkthdr fields flexibly.
*/
+ int pattr_af; /* ALTQ: address family */
void *pattr_class; /* ALTQ: sched class set by classifier */
void *pattr_hdr; /* ALTQ: saved header position in mbuf */
- int pattr_af; /* ALTQ: address family */
};
/*
@@ -370,6 +372,8 @@ MBUF_DEFINE(mbuf, MHLEN, MLEN);
#define M_LINK6 0x00040000 /* link layer specific flag */
#define M_LINK7 0x00080000 /* link layer specific flag */
+#define M_VLANTAG 0x00100000 /* ether_vtag is valid */
+
/* additional flags for M_EXT mbufs */
#define M_EXT_FLAGS 0xff000000
#define M_EXT_CLUSTER 0x01000000 /* ext is a cluster */
@@ -385,10 +389,13 @@ MBUF_DEFINE(mbuf, MHLEN, MLEN);
"\20\1EXT\2PKTHDR\3EOR\4PROTO1\5AUTHIPHDR\6DECRYPTED\7LOOP\10AUTHIPDGM" \
"\11BCAST\12MCAST\13CANFASTFWD\14ANYCAST6\15LINK0\16LINK1\17LINK2\20LINK3" \
"\21LINK4\22LINK5\23LINK6\24LINK7" \
+ "\25VLANTAG" \
"\31EXT_CLUSTER\32EXT_PAGES\33EXT_ROMAP\34EXT_RW"
/* flags copied when copying m_pkthdr */
-#define M_COPYFLAGS (M_PKTHDR|M_EOR|M_BCAST|M_MCAST|M_CANFASTFWD|M_ANYCAST6|M_LINK0|M_LINK1|M_LINK2|M_AUTHIPHDR|M_DECRYPTED|M_LOOP|M_AUTHIPDGM)
+#define M_COPYFLAGS (M_PKTHDR|M_EOR|M_BCAST|M_MCAST|M_CANFASTFWD| \
+ M_ANYCAST6|M_LINK0|M_LINK1|M_LINK2|M_AUTHIPHDR|M_DECRYPTED|M_LOOP| \
+ M_AUTHIPDGM|M_VLANTAG)
/* flag copied when shallow-copying external storage */
#define M_EXTCOPYFLAGS (M_EXT|M_EXT_FLAGS)
@@ -894,7 +901,7 @@ struct m_tag *m_tag_next(struct mbuf *,
/* Packet tag types */
#define PACKET_TAG_NONE 0 /* Nothing */
-#define PACKET_TAG_VLAN 1 /* VLAN ID */
+ /* 1: Used to be VLAN ID */
#define PACKET_TAG_ENCAP 2 /* encapsulation data */
#define PACKET_TAG_ESP 3 /* ESP information */
#define PACKET_TAG_SO 4 /* sending socket pointer */