Rah*_*hul 3 networking linux ubuntu vlan linux-networking
我在物理接口上设置了一堆 VLAN 接口。
Physical interface: eth1
VLANS on top of this: vlan1, vlan2, vlan3
Run Code Online (Sandbox Code Playgroud)
现在,我想知道我的vlan的父接口是哪个(例如,这里eth1是这些vlan的父接口)。
我可以通过运行“ip addr show vlan-name”来获取此信息,然后在输出中,我将得到 vlan1@eth1,但我需要解析此命令的输出或通过查看我的网络配置文件,解析它并解释它。
有没有其他方法可以让我无需任何解析逻辑即可获取此信息?例如,对于绑定接口,信息存在于 /sys/class/net/ 目录中,并且可以简单地读取那里的文件。
# cat /sys/class/net/bond0/bonding/slaves
eth0 eth1
Run Code Online (Sandbox Code Playgroud)
是否有类似的路径/文件可用于 VLAN 标记的接口?我无法弄清楚是否有一些文件我可以直接读取而无需任何解析并提取此信息或任何仅提供父接口名称的命令/实用程序。
请告诉我是否还有其他替代方案。
谢谢。
我没有找到一种无需任何解析即可获取底层接口的方法,因此我给出了 5 种(有时只是稍微)不同的方法来获取此信息。最后添加的方法 5 应该是首选:它使用ip命令的 JSON 输出。
有一个具有物理接口名称的符号链接:
\n$ ls -l /sys/class/net/vlan2
\n[...]
\n lrwxrwxrwx. 1 root root 0 nov. 10 02:12 lower_eth1 -> ../eth1
\n[...]
\n-rw-r--r--. 1 root root 4096 nov. 10 01:49 uevent
$ echo $(basename $(readlink /sys/class/net/vlan2/lower_*))\neth1\nRun Code Online (Sandbox Code Playgroud)\n还有一个uevent也很方便:
$ cat /sys/class/net/vlan2/uevent \nDEVTYPE=vlan\nINTERFACE=vlan2\nIFINDEX=24\n$ cat /sys/class/net/vlan2/lower_*/uevent\nINTERFACE=eth1\nIFINDEX=22\nRun Code Online (Sandbox Code Playgroud)\n$ cat /sys/class/net/vlan2/lower_*/uevent|sed -n \'s/^INTERFACE=//p\'\neth1\nRun Code Online (Sandbox Code Playgroud)\n作为 root,有以下条目/proc/net/vlan:
# ls /proc/net/vlan/\nconfig vlan1 vlan2 vlan3 vlan4 vlan5\n# cat /proc/net/vlan/config\nVLAN Dev name | VLAN ID\nName-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD\nvlan1 | 1 | eth1\nvlan3 | 3 | eth1\nvlan4 | 4 | eth1\nvlan2 | 2 | eth1\nvlan5 | 5 | eth2\nRun Code Online (Sandbox Code Playgroud)\n# cat /proc/net/vlan/vlan2
\n[...]
\n Device: eth1
\n[...]
# awk -F \' *\\\\| *\' \'$1 == "vlan2" { print $3 }\' /proc/net/vlan/config\neth1\nRun Code Online (Sandbox Code Playgroud)\n# sed -n \'s/^Device: //p\' /proc/net/vlan/vlan2\neth1\nRun Code Online (Sandbox Code Playgroud)\n请注意,在 /sys 中,也可以使用其他方向upper_*:
$ ls -l /sys/class/net/eth1\nRun Code Online (Sandbox Code Playgroud)\n[...]
\n-rw-r--r--. 1 root root 4096 nov. 10 01:46 uevent\nlrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan1 -> ../vlan1\nlrwxrwxrwx. 1 root root 0 nov. 10 02:18 upper_vlan2 -> ../vlan2\nlrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan3 -> ../vlan3\nlrwxrwxrwx. 1 root root 0 nov. 10 02:23 upper_vlan4 -> ../vlan4\n\n$ sed -n \'s/^INTERFACE=//p\' /sys/class/net/eth1/upper_*/uevent\nvlan1\nvlan2\nvlan3\nvlan4\nRun Code Online (Sandbox Code Playgroud)\n自 2017 年以来ip(使用(rt)netlink套接字接口与内核进行通信),其许多子命令都获得了 JSON 输出,以简化其脚本编写能力。与jq命令一起使用,这可能是最好的选择:
$ ip -json link show vlan1 | jq -r \'.[]|.link\'\neth1\n\n$ ip -json link show type vlan | jq -j \'\n .[] | (.ifname," \xe2\x88\x88 ",.link,"\\n")\n\'\nvlan1 \xe2\x88\x88 eth1\nvlan2 \xe2\x88\x88 eth1\nvlan3 \xe2\x88\x88 eth1\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
12011 次 |
| 最近记录: |