这次先看看VLAN怎么处理的 主要代码目录linux/net/8021q
dev_add_pack(&
vlan_packet_type); vlan-802.1q
static struct packet_type vlan_packet_type __read_mostly = {
.type = cpu_to_be16(ETH_P_8021Q),
.func = vlan_skb_recv, /* VLAN receive method */
};
.type = cpu_to_be16(ETH_P_8021Q),
.func = vlan_skb_recv, /* VLAN receive method */
};
->vlan_skb_recv
->skb = skb_share_check(skb, GFP_ATOMIC); 检查是否有其他协议共享处理此skb
->vhdr = (struct
vlan_hdr *)skb->data; 指向VLAN tag字段
vlan_tci = ntohs(vhdr->h_vlan_TCI);
vlan_id = vlan_tci & VLAN_VID_MASK;
struct
vlan