关于配置 vlan 设备名字

以前只知道 vlan 设备的名字都是像 bond0.77 这种格式,前两天拿到一台机器,上面的 vlan 是 vlan77,而且 ifcfg-vlan77 多了一个 PHYSDEV=bond0。这才明白原来 vlan 还可以这么配置。

可是我仍然想测一下之前的 bond0.77 这个格式的配置,因为 kdump 要解释这两个不同的格式。于是我把 ifcfg-vlan77 重命名为 ifcfg-bond0.77,并且把 DEVICE=vlan77 改为 DEVICE=bond0.77,结果重启之后出错。看了半天的 ifup 的代码也没找到问题出在哪里。忽然注意到 /proc/net/vlan 下面仍然是 vlan77,于是开始扒内核的源代码,终于在 net/8021q/vlanproc.c 里发现了问题的所在。

我忘记修改 VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD 这一项!看内核源代码很了然,VLAN_PLUS_VID_NO_PAD 就是说名字格式是 “vlan” + VLANID,而且没有填充0,也就是 “vlan77” 这种格式。VLAN_NAME_TYPE=DEV_PLUS_VID_NO_PAD 才是我想要的设备名+VLANID,比如 bond0.77。如果不加“NO_PAD”的话,VLAN_NAME_TYPE=DEV_PLUS_VID 就会把设备命名成 bond0.0077了。