summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net/if_vlan.c')
-rw-r--r--sys/net/if_vlan.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index 0b82e4d..0fef217 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -850,15 +850,7 @@ vlan_start(struct ifnet *ifp)
* packet tag that holds it.
*/
if (p->if_capenable & IFCAP_VLAN_HWTAGGING) {
- struct m_tag *mtag = (struct m_tag *)
- uma_zalloc(zone_mtag_vlan, M_NOWAIT);
- if (mtag == NULL) {
- ifp->if_oerrors++;
- m_freem(m);
- continue;
- }
- VLAN_TAG_VALUE(mtag) = ifv->ifv_tag;
- m_tag_prepend(m, mtag);
+ m->m_pkthdr.ether_vtag = ifv->ifv_tag;
m->m_flags |= M_VLANTAG;
} else {
struct ether_vlan_header *evl;
@@ -915,7 +907,7 @@ vlan_input(struct ifnet *ifp, struct mbuf *m)
{
struct ifvlantrunk *trunk = ifp->if_vlantrunk;
struct ifvlan *ifv;
- struct m_tag *mtag;
+ int inenc = 0;
uint16_t tag;
KASSERT(trunk != NULL, ("%s: no trunk", __func__));
@@ -925,11 +917,7 @@ vlan_input(struct ifnet *ifp, struct mbuf *m)
* Packet is tagged, but m contains a normal
* Ethernet frame; the tag is stored out-of-band.
*/
- mtag = m_tag_locate(m, MTAG_VLAN, MTAG_VLAN_TAG, NULL);
- KASSERT(mtag != NULL,
- ("%s: M_VLANTAG without m_tag", __func__));
- tag = EVL_VLANOFTAG(VLAN_TAG_VALUE(mtag));
- m_tag_delete(m, mtag);
+ tag = EVL_VLANOFTAG(m->m_pkthdr.ether_vtag);
m->m_flags &= ~M_VLANTAG;
} else {
struct ether_vlan_header *evl;
@@ -937,7 +925,7 @@ vlan_input(struct ifnet *ifp, struct mbuf *m)
/*
* Packet is tagged in-band as specified by 802.1q.
*/
- mtag = NULL;
+ inenc = 1;
switch (ifp->if_type) {
case IFT_ETHER:
if (m->m_len < sizeof(*evl) &&
@@ -980,7 +968,7 @@ vlan_input(struct ifnet *ifp, struct mbuf *m)
}
TRUNK_RUNLOCK(trunk);
- if (mtag == NULL) {
+ if (inenc) {
/*
* Packet had an in-line encapsulation header;
* remove it. The original header has already
OpenPOWER on IntegriCloud