Linux

列出一個 vlan 的父介面

  • November 10, 2017

我在物理介面上設置了一堆 vlan 介面。

Physical interface: eth1
VLANS on top of this: vlan1, vlan2, vlan3

現在,我想知道哪個是我的vlan的父介面(例如,這裡的eth1是這些vlan的父介面)。

我可以通過執行“ip addr show vlan-name”獲取此資訊,然後在輸出中,我將獲得 vlan1@eth1,但我需要解析此命令的輸出或查看我的網路配置文件、解析它並解釋它。

有沒有其他方法可以在沒有任何解析邏輯的情況下獲取這些資訊?例如,對於綁定介面,資訊存在於 /sys/class/net/ 目錄中,並且可以簡單地讀取那裡的文件。

# cat /sys/class/net/bond0/bonding/slaves
eth0 eth1

是否有可用於 vlan 標記介面的類似路徑/文件?我不知道是否有一些文件我可以在沒有任何解析的情況下讀取並提取此資訊或任何僅提供父介面名稱的命令/實用程序。

請讓我知道是否有其他選擇。

謝謝。

我沒有找到一種沒有任何解析的方法來獲取底層介面,所以我給出了 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

引用自:https://serverfault.com/questions/882754