next up previous contents
Next: Einbinden des neuen Codes Up: Erweiterung des Kernels Previous: Erweiterter Code

Die Event-Schnittstelle

  Sie dient dazu, den Anschluß neuer Systeme bekannt zu geben. Um Meldungen über Ereignisse weiterzuleiten, hat der Kernel mehrere Möglichkeiten. Zum einen kann er Ereignisse über die Funktion printk an den syslogd zur Verarbeitung weitergeben. Eine andere Möglichkeit ist die Schnittstelle des /proc-Filesystems. Diese wird im Allgemeinen dazu verwendet, Statusinformationen mittles Tabellen auszugeben. Beispiele hierfür sind die arp- und die routing-Tabelle. Die dritte Variante ist das sogenannte netlink-Device. Dabei handelt es sich um einen Kernel-Treiber, der bidirektionale Kommunikation erlaubt. Ein Beispiel für die Implementierung dieser Schnittstelle liefert der arpd. Bei vielen Systemen im Netz verlagert der arpd seine Tabellen aus dem Kernel hinaus in den User-Bereich. Die Einführung der netlink-Schnittstelle steht auf der Todo-Liste der Bridge Entwickler.

Voraussetzung für die Verarbeitung von Nachrichten ist das Einrichten eines neuen Device. Die Majornummer der netlink-Schnittstelle ist dabei 36. Für die Minornummer war die 9 noch frei. Somit mußte die Datei /usr/src/linux/include/net/netlink.h um den Eintrag #define NETLINK_BRD 9 erweitert werden. Das Device wird in der Funktion __initfunc des Switching Codes br.c durch den Aufruf von netlink_attach(NETLINK_BRD, brd_callback) initialisiert. Durch den Aufruf von netlink_post(NETLINK_BRD, skb) in der Funktion brd_send wird dem Device /dev/brd das gewünschte Event übergeben. Momentan besteht das Event aus dem Port, der MAC-Adresse, der VLAN ID, einem Feld Flags und einem Timer-Feld.

Die Funktion brd_send wird in br_learn nach dem Einfügen eines neuen Systems in den AVL-Baum aufgerufen und damit dem netlink-Device das Hinzukommen eines neuen Systems angezeigt. Die für das Event nötigen Informationen werden der Struktur fdb entnommen.


next up previous contents
Next: Einbinden des neuen Codes Up: Erweiterung des Kernels Previous: Erweiterter Code
Root on HPHEGER0
3/3/1999