我有一个物理接口上的一堆vlan接口的设置。
Physical interface: eth1 VLANS on top of this: vlan1, vlan2, vlan3
现在,我想知道哪个是我的vlan的父接口(例如,这里的eth1是这些vlans的父接口)。
我可以通过运行“ip addr show vlan-name”得到这个信息,然后在输出中,我将得到vlan1 @ eth1,但是我需要parsing这个命令的输出,或者通过查看我的networkingconfiguration文件,parsing它并解释它。
有没有另外一种方法可以在没有任何parsing逻辑的情况下获得这些信息? 例如,对于绑定接口,信息存在于/ sys / class / net /目录中,并且可以简单地在那里读取文件。
# cat /sys/class/net/bond0/bonding/slaves eth0 eth1
是否有类似的path/文件可用于VLAN标记的接口? 我无法弄清楚是否有一些文件可以在没有任何parsing的情况下读取,并提取这些信息或任何只是给出父接口名称的命令/实用程序。
请让我知道是否有其他的select。
谢谢。
我没有find任何parsing的方式来获得底层接口,所以我给了4(有时候只是稍微)不同的方式来获取这些信息,我希望能够得到方便。
有一个具有物理接口名称的符号链接:
$ ls -l /sys/class/net/vlan2
[…]
lrwxrwxrwx. 1 root root 0 nov. 10 02:12 lower_eth1 -> ../eth1
[…]
-rw-r--r--. 1 root root 4096 nov. 10 01:49 uevent
$ echo $(basename $(readlink /sys/class/net/vlan2/lower_*)) eth1
还有uevent事情也很方便:
$ cat /sys/class/net/vlan2/uevent DEVTYPE=vlan INTERFACE=vlan2 IFINDEX=24 $ cat /sys/class/net/vlan2/lower_*/uevent INTERFACE=eth1 IFINDEX=22
$ cat /sys/class/net/vlan2/lower_*/uevent|sed -n 's/^INTERFACE=//p' eth1
以root身份, /proc/net/vlan有条目:
# ls /proc/net/vlan/ config vlan1 vlan2 vlan3 vlan4 vlan5 # cat /proc/net/vlan/config VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD vlan1 | 1 | eth1 vlan3 | 3 | eth1 vlan4 | 4 | eth1 vlan2 | 2 | eth1 vlan5 | 5 | eth2
# cat /proc/net/vlan/vlan2
[…]
Device: eth1
[…]
# awk -F ' *\\| *' '$1 == "vlan2" { print $3 }' /proc/net/vlan/config eth1
# sed -n 's/^Device: //p' /proc/net/vlan/vlan2 eth1
请注意,在/ sys中,另一个方向也可以用upper_* :
$ ls -l /sys/class/net/eth1
[…]
-rw-r--r--. 1 root root 4096 nov. 10 01:46 uevent lrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan1 -> ../vlan1 lrwxrwxrwx. 1 root root 0 nov. 10 02:18 upper_vlan2 -> ../vlan2 lrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan3 -> ../vlan3 lrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan4 -> ../vlan4 $ sed -n 's/^INTERFACE=//p' /sys/class/net/eth1/upper_*/uevent vlan1 vlan2 vlan3 vlan4