Информация 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 вы получаете:

  1. уведомление о новом интерфейсе eth2.75 дюймов вниз государство
  2. уведомление о состоянии базового физического интерфейса eth2 (теперь он имеет "подчиненный" интерфейс, которого у него не было раньше-например, некоторые карты NIC имеют разгрузку HW для фильтрации ненужные теги VLAN. Интерфейс теперь может потребоваться обновить NIC так далее.). eth2 находится в состоянии UP и остается таковым-но его внутреннее состояние измененный.
  3. уведомления о том, что для eth2.75 пошел снизу вверх государства.

аналогичным образом для удаления вас см.:

  1. уведомление об изменении состояния eth2 (отделено от eth2.75 и VLAN)
  2. уведомления для eth2.75 идет сверху вниз состоянии
  3. уведомление об удалении eth2.75 интерфейс