2015-05-21 16 views
12

Wie erhalten Sie VLAN-Informationen wie Hinzufügen und Löschen von VLAN Sub-Schnittstelle vom Kernel zu Userspace mit NETLINK-Socket in C?VLAN-Informationen mit NETLINK

Ich habe wenig in NETLINK Mann studieren, wie in den Kommentaren vorgeschlagen. Ich habe eine VLAN-Unterschnittstelle hinzugefügt und gelöscht und mit dem Netlink-Socket-Programm überwacht. Für den Zusatz & löschen Sie jeweils 3 Nachrichten. Addition sendet 3 NEWLINK Nachricht und Löschung sendet 2 NEWLINK & 1 DELLINK Nachricht. Warum ist das so?

Zum Hinzufügen von neuer VLAN-Schnittstelle eth1.75:

RTM_NEWLINK Link eth2.75 Down 
RTM_NEWLINK Link eth2 Up 
RTM_NEWLINK Link eth2.75 Up 

Zum Löschen von VLAN-Schnittstelle eth2.75:

RTM_NEWLINK Link eth2 Up 
RTM_NEWLINK Link eth2.75 Down 
RTM_DELLINK eth2.75 
+0

kleine Grammatik zu beheben. –

+2

Lesen Sie die man-Seiten und kommen Sie zurück, wenn Sie eine bestimmte Frage nicht beantworten können. Beginnen Sie mit "man 7 netlink" und dann "man 7 rtnetlink". Ich * denke * Sie erhalten ein 'RTM_NEWLINK' für den Zusatz und' RTM_DELINK' für das Entfernen. Suchen Sie im Quellcode nach [Network Manager] (https://download.gnome.org/sources/NetworkManager/1.0/) nach Beispielen. –

Antwort

4

Während einer netlink Buchse zu schaffen, schafft es 3-Geräte. Deshalb erhalten Sie 3 Ereignisse. Hier sind die 3 Geräte, die es erstellt, während add Ereignis.

  • Netzwerk-Subsystem.
  • Senden Queue-Subsystem.
  • Queue-Subsystem empfangen.

net Subsystem ist die obere Ebene Steuergerät. Andere zwei sind queues für die Übergabe von Daten. Sie können es wie folgt überprüfen.

Wenn ich einen udevadm monitor --env tun und schaffen eine vlan ich die folgenden Ereignisse aus dem Kernel erhalten:

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 
1

RTM_NEWLINK Nachrichten werden für jede Änderung in einem Interface Zustand gesendet, in der Regel von netdev_state_change (siehe: http://lxr.free-electrons.com/source/net/core/dev.c#L1226).

Im Grunde denken Sie über RTM_NEWLINK als "ein geänderter Zustand der Schnittstelle", anstatt nur "eine neue Schnittstelle erstellt".

Zum Beispiel für das Hinzufügen von VLAN-Schnittstelle erhalten Sie:

  1. Benachrichtigung über eine neue Schnittstelle eth2.75 in DOWN-Zustand
  2. Mitteilung über den Zustand der zugrunde liegenden physikalischen Schnittstelle eth2 (es hat jetzt ein "untergeordnete" Schnittstelle, die es zuvor nicht hatte - zum Beispiel einige NIC-Karten hat HW Offload zu filtern unerwünschte VLAN-Tags. Die Schnittstelle muss jetzt die NIC etc. aktualisieren.). eth2 ist im UP-Zustand und bleibt so - aber sein interner Zustand hat sich geändert.
  3. Benachrichtigung, dass eth2.75 von DOWN nach UP ging.

In ähnlicher Weise für löschen Sie sehen:

  1. Mitteilung über eth2 Zustandsänderung (von eth2.75 und die VLAN distanzierten)
  2. Mitteilung über eth2.75 von UP geht DOWN Zustand
  3. Benachrichtigung über die Entfernung von eth2.75 Schnittstelle