Информация о VLAN с использованием NETLINK

Как вы получаете информацию о VLAN, такую ​​как добавление и удаление подинтерфейса VLAN из ядра в пользовательское пространство, используя сокет NETLINK в C?

Я немного изучил человека NETLINK, как это было предложено в комментариях. Я добавлял и удалял подинтерфейс VLAN и контролировал его с помощью программы сокетов 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

person user1762571    schedule 21.05.2015    source источник
comment
Прочтите справочные страницы и вернитесь, когда застрянете на конкретном вопросе. Начните с man 7 netlink, а затем man 7 rtnetlink. Думаю, вы получите RTM_NEWLINK за добавление и RTM_DELINK за удаление. Примеры смотрите в исходном коде Network Manager.   -  person Brian McFarland    schedule 22.05.2015


Ответы (2)


При создании сокета netlink он создает 3 устройства. Вот почему вы получаете 3 события. Вот 3 устройства, которые он создает во время события add.

  • Сетевая подсистема.
  • Подсистема очереди отправки.
  • Подсистема очереди приема.

Подсистема net является устройством управления верхнего уровня. Два других — queues для передачи данных. Вы можете проверить это, как показано ниже.

Когда я делаю udevadm monitor --env и создаю влан, я получаю от ядра следующие события:

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
person Chand Priyankara    schedule 27.05.2015

Сообщения RTM_NEWLINK отправляются при каждом изменении состояния интерфейса, обычно из netdev_state_change (см.: http://lxr.free-electrons.com/source/net/core/dev.c#L1226).

По сути, думайте о RTM_NEWLINK как об «измененном состоянии интерфейса», а не просто о «создании нового интерфейса».

Например, за добавление интерфейса VLAN вы получаете:

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

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

  1. Уведомление об изменении состояния eth2 (отключение от eth2.75 и VLAN)
  2. Уведомление о переходе eth2.75 из состояния UP в состояние DOWN
  3. Уведомление об удалении интерфейса eth2.75
person gby    schedule 27.05.2015