列出一个vlan的父接口

我有一个物理接口上的一堆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

方法1

 $ 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 

方法2

 $ 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
[…]

方法3

 # awk -F ' *\\| *' '$1 == "vlan2" { print $3 }' /proc/net/vlan/config eth1 

方法4

 # 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