Index: if_vlan.c =================================================================== RCS file: /cvs/src/sys/net/if_vlan.c,v retrieving revision 1.126 diff -u -p -r1.126 if_vlan.c --- if_vlan.c 26 May 2015 11:39:07 -0000 1.126 +++ if_vlan.c 27 May 2015 12:17:14 -0000 @@ -332,19 +332,6 @@ vlan_input(struct mbuf *m) } /* - * Having found a valid vlan interface corresponding to - * the given source interface and vlan tag, remove the - * encapsulation. - */ - if (m->m_flags & M_VLANTAG) { - m->m_flags &= ~M_VLANTAG; - } else { - eh->ether_type = evl->evl_proto; - memmove((char *)eh + EVL_ENCAPLEN, eh, sizeof(*eh)); - m_adj(m, EVL_ENCAPLEN); - } - - /* * Drop promiscuously received packets if we are not in * promiscuous mode. */ @@ -356,6 +343,19 @@ vlan_input(struct mbuf *m) m_freem(m); return (1); } + } + + /* + * Having found a valid vlan interface corresponding to + * the given source interface and vlan tag, remove the + * encapsulation. + */ + if (m->m_flags & M_VLANTAG) { + m->m_flags &= ~M_VLANTAG; + } else { + eh->ether_type = evl->evl_proto; + memmove((char *)eh + EVL_ENCAPLEN, eh, sizeof(*eh)); + m_adj(m, EVL_ENCAPLEN); } ml_enqueue(&ml, m);