Назад | Перейти на главную страницу

перечисление родительского интерфейса vlan

У меня есть установка с кучей 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

Способ 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