Unify vlan_input() and vlan_input_tag():
- For device drivers that support hardware vlan tag extraction, mbuf's
M_VLANTAG is turned on and vlan tag is saved in mbuf.m_pkthdr.ether_vlantag
- At the very beginning of ether_input_chain(), if the packet's ether type is
vlan and hardware does not extract vlan tag, vlan_ether_decap() is called to
do software vlan tag extraction.
- Instead of BPF_MTAP(), ETHER_BPF_MTAP() is used in ether_input_chain() to
deliver possible vlan tagging information to the bpf listeners.
- Ether header is restored before calling vlan_input(), so under most cases,
extra ether header copy is avoided. vlan_input() does nothing more than
finding vlan interface and looping back the packet to ether_input_chain()
with vlan interface as input interface.
Ideas-from: FreeBSD
14 files changed: