Информация VLAN с использованием NETLINK
Как вы получаете информацию VLAN, такую как добавление и удаление интерфейса VLAN sub из ядра в пользовательское пространство, используя сокет NETLINK в C?
Я мало изучал в NETLINK man, как это предлагается в комментариях. Я добавил и удалил интерфейс VLAN sub и контролировал с помощью программы сокета netlink. Для добавления и удаления каждый получает 3 сообщения. Добавление отправляет сообщение 3 NEWLINK и удаление отправляет сообщение 2 NEWLINK & 1 DELLINK. Почему это так?
для добавления новых Интерфейс VLAN eth1.75:
RTM_NEWLINK Link eth2.75 Down
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Up
для удаления интерфейса VLAN eth2.75:
RTM_NEWLINK Link eth2 Up
RTM_NEWLINK Link eth2.75 Down
RTM_DELLINK eth2.75
2 ответов
при создании сокета netlink он создает 3 устройства. Вот почему вы получаете 3 событий. Вот 3 устройства, которые он создает в то время как add
событие.
- сетевая подсистема.
- отправка очереди.
- подсистема приема в очереди.
net
подсистема-это устройство управления верхнего уровня. Двое других -queues
для передачи данных. Вы можете проверить это, как показано ниже.
когда я делаю udevadm monitor --env
и создайте vlan я получаю следующие события из ядра:
UDEV [305215.045416] add /devices/virtual/net/vpn0 (net)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0
ID_MM_CANDIDATE=1
IFINDEX=10
INTERFACE=vpn0
SEQNUM=3665
SUBSYSTEM=net
USEC_INITIALIZED=5215023319
UDEV [305215.046658] add /devices/virtual/net/vpn0/queues/rx-0 (queues)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0/queues/rx-0
SEQNUM=3666
SUBSYSTEM=queues
USEC_INITIALIZED=15044665
UDEV [305215.047628] add /devices/virtual/net/vpn0/queues/tx-0 (queues)
ACTION=add
DEVPATH=/devices/virtual/net/vpn0/queues/tx-0
SEQNUM=3667
SUBSYSTEM=queues
USEC_INITIALIZED=5215044729
RTM_NEWLINK сообщения отправляются для каждого изменения в состоянии интерфейса, как правило, из netdev_state_change (см.:http://lxr.free-electrons.com/source/net/core/dev.c#L1226).
в принципе, подумайте о RTM_NEWLINK как "измененное состояние интерфейса", а не просто"новый созданный интерфейс".
например, для добавления интерфейса VLAN вы получаете:
- уведомление о новом интерфейсе eth2.75 дюймов вниз государство
- уведомление о состоянии базового физического интерфейса eth2 (теперь он имеет "подчиненный" интерфейс, которого у него не было раньше-например, некоторые карты NIC имеют разгрузку HW для фильтрации ненужные теги VLAN. Интерфейс теперь может потребоваться обновить NIC так далее.). eth2 находится в состоянии UP и остается таковым-но его внутреннее состояние измененный.
- уведомления о том, что для eth2.75 пошел снизу вверх государства.
аналогичным образом для удаления вас см.:
- уведомление об изменении состояния eth2 (отделено от eth2.75 и VLAN)
- уведомления для eth2.75 идет сверху вниз состоянии
- уведомление об удалении eth2.75 интерфейс