Das Verzeichnis net

Das Verzeichnis net in der Linux-Dateihierarchie ist das Repository für die Socket-Abstraktion und die Netzwerkprotokolle; diese Features enthalten eine Menge Code, weil Linux mehrere verschiedene Netzwerk-Protokolle unterstützt. Jedes Protokoll (IP, IPX und so weiter) befindet sich in einem eigenen Unterverzeichnis; das Verzeichnis für IP heißt ipv4, weil es die Version 4 dieses Protokolls repräsentiert. Der neue Standard (der derzeit noch nicht besonders weit verbreitet ist) heißt ipv6 und ist in Linux ebenfalls implementiert. Unix-Domänen-Sockets werden als ein weiteres Netzwerk-Protokoll behandelt; die Implementation finden Sie im Unterverzeichnis unix.

Die Netzwerk-Implementation in Linux basiert auf den gleichen Datei-Operationen wie bei Gerätedateien. Dies ist nur natürlich, weil Netzwerk-Verbindungen (Sockets) von normalen Dateideskriptoren repräsentiert werden. Die Datei socket.c ist das Zuhause der Socket-Datei-Operationen. Sie verteilt die Systemaufrufe über eine struct proto_ops-Struktur an eines der Netzwerk-Protokolle. Diese Struktur wird von jedem Netzwerk-Protokoll definiert, um Systemaufrufe auf die jeweiligen Datenverarbeitungsoperationen auf niedriger Ebene abzubilden.

Nicht jedes Unterverzeichnis in net dient zur Definition einer Protokollfamilie. Es gibt einige Ausnahmen: core, bridge, ethernet, sunrpc und khttpd.

Die Dateien in core implementieren generische Netzwerk-Funktionen wie den Umgang mit Geräten, Firewalls, Multicasting und Aliasnamen; dazu gehören auch die Verwaltung von Socket-Buffern (core/skbuff.c) und die Socket-Operationen, die unabhängig vom zugrundeliegenden Protokoll sind (core/sock.c). Die geräteunabhängige Datenverwaltung, die dem gerätespezifischen Code nahesteht, ist in core/dev.c definiert.

Die Verzeichnisse ethernet und bridge implementieren bestimmte Funktionalitäten niedriger Ebene, konkret die Ethernet-Hilfsfunktionen, die in Kapitel 14 beschrieben wurden, sowie das Bridging.

sunrpc und khttpd sind merkwürdig, weil sie auf der Kernel-Ebene Implementationen von Aufgaben enthalten, die normalerweise im User-Space ausgeführt werden.

In sunrpc finden Sie Hilfsfunktionen für den Kernel-NFS-Server (der RPC-basiert ist), während khttpd einen Kernel-Space-Webserver implementiert. Diese Dienste sind in den Kernel-Space verlegt worden, um den zusätzlichen Aufwand durch Systemaufrufe und Kontextwechsel während zeitkritischer Aufgaben zu vermeiden. Beide haben in diesem Modus gute Performance bewiesen. Das khttpd-Subsystem ist allerdings durch TUX abgelöst worden, einen Webserver, der derzeit den Rekord als schnellster Webserver der Welt hält. TUX wird voraussichtlich in die 2.5-Kernel-Reihe integriert werden.

Die beiden verbleibenden Quelldateien in net heißen sysctl_net.c und netsyms.c. Erstere ist das Backend des sysctl-Mechanismus[1], letztere ist lediglich eine Liste von EXPORT_SYMBOL-Deklarationen. Es gibt mehrere solcher Dateien im Kernel, üblicherweise eine je Hauptverzeichnis.

Fußnoten

[1]

sysctl ist in diesem Buch nicht beschrieben worden; interessierte Leser können sich Alessandros Beschreibung dieses Mechanismus unter http://www.linux.it/kerneldocs/sysctl anschauen.