Можно ли получить индекс сетевого интерфейса не через / sys?

11

Так что я ищу, это индекс интерфейса (или имя), но реальный. if_nametoindex(3)и ioctl(2), похоже, не поможет мне здесь. Теперь я нашел единственный способ сделать это через /sys. Позвольте мне продемонстрировать на примере, что мне нужно:

# cat /sys/class/net/bond0.1007/ifindex 
26
# cat /sys/class/net/bond0.1007/iflink
23                                  <-- I need either this or a reference to bond0
# cat /sys/class/net/bond0/ifindex 
23

Есть ли способ сделать это с помощью вызова функции или единственный способ sysfs?

УВВ
источник
Посмотрите на то, что ip link showделает (вероятно, используя API NetLink)
Стефан Chazelas
Смотрите также /proc/net/vlan/configили /proc/net/vlan/bond0.1007это интерфейс VLAN.
Стефан Шазелас
@ StéphaneChazelas Спасибо. Я решил продолжать использовать /sys. /procили /sysболее или менее одинаковы в этом смысле. Я просто хотел проверить, есть ли системный вызов для получения такой информации, оказывается, что нет.
UVV
1
системными вызовами будет sendmsg / recvmsg, использующий API сокета netlink.
Стефан Шазелас
1
Документация по rtnetlink: man7.org/linux/man-pages/man7/rtnetlink.7.html - выдача RTM_GETLINKсообщения и поиск IFLA_LINKатрибута в ответе.
Ecatmur

Ответы:

1

Команда, ip link showвероятно, то, что вы хотите. Он будет отображать индекс перед информацией интерфейса. Пример ниже из системы со связанными сетевыми картами.

# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9214 qdisc mq master bond0 portid 000f53000000 state UP mode DEFAULT qlen 1000
    link/ether 00:0f:53:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9214 qdisc mq master bond0 portid 000f53000001 state UP mode DEFAULT qlen 1000
    link/ether 00:0f:53:00:00:00 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9214 qdisc noqueue state UP mode DEFAULT qlen 1000
    link/ether 00:0f:53:00:00:00 brd ff:ff:ff:ff:ff:ff
Боско
источник