Linux VLAN学习总结
1 环境说明
文档后续描述的都是内核处理VLAN标签,即关闭了NETIF_F_HW_VLAN_RX/TX。 NETIF_F_HW_VLAN_RX/TX开启:由网卡驱动操作VLAN标签; NETIF_F_HW_VLAN_RX/TX关闭:由内核操作VLAN标签。
2 Linux命令行配置步骤
配置命令:
vconfig add eth1 100 // 创建虚拟子接口 vconfig add eth2 100
brctl addbr vswitch100 // 创建虚拟网桥
brctl addif vswitch100 eth1.100 // 将接口加入到虚拟网桥 brctl addif vswitch100 eth2.100
ip link set dev vswitch100 address 00:11:22:33:44:55 ip addr add 100.0.0.1/24 brd + dev vswitch100 ifconfig eth1.100 up ifconfig eth2.100 up ifconfig vswitch100 up
查看命令:
~ # brctl show vlan10
bridge name bridge id STP enabled interfaces vswitch100 8000.001122334455 no eth1.100 eth2.100
3 802.1Q帧
3.1 802.1Q帧格式
标准以太帧承载的payload为46~1500字节,由于802.1Q标签占用了4字节,因此802.1Q以太帧承载的payload长度为42~1496,即(46-4)~(1500-4)。 在插入和移除VLAN标签时,都需要重新对FCS进行校验和计算。
EtherType PRI CFI VLAN ID Trunk接口接收到帧后,读取该字段,值为0x8100表明是802.1Q标签 优先级字段,用于QoS 以太网络设置为 0,令牌环(Token Ring)网络设置为 1 标识数据帧所属的VLAN,如果VLAN ID为0,则表示是优先级帧。 VLAN ID 4095为保留ID
3.2 802.1Q帧的数据结构
Source file : linux-2.6.37\\include\\linux\\If_vlan.h
vlan_ethhdr为802.1Q帧头,其中h_vlan_encapsulated_proto是标准以太帧的typy部分。
4 802.1Q的注册
4.1 模板
Source file : linux-2.6.37\\net\\8021q\\Vlan.c
协议类型:ETH_P_8021Q 处理函数:vlan_skb_recv()
4.2 VLAN处理函数
Source file : linux-2.6.37\\net\\8021q\\Vlan_dev.c
4.3 注册
Source file : linux-2.6.37\\net\\8021q\\Vlan.c
在vlan_proto_init()中:
· 调用dev_add_pack()注册8021Q;
· 调用vlan_ioctl_set()提供用户操作接口。