Copyright © 1996 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux: Wegweiser durch das Netzwerk" dann klicken Sie hier.


Kapitel 3
Konfiguration der Hardware

Geräte, Treiber und der ganze Rest

Bis jetzt haben wir uns ziemlich ausführlich mit Netzwerk-Schnittstellen und allgemeinen Fragen der TCP/IP-Protokolle befaßt, ohne uns groß darum zu kümmern, was eigentlich genau passiert, wenn »der Netzwerk-Kode« im Kernel ein Stück Hardware anspricht. Bevor wir das jetzt nachholen, müssen wir noch ein wenig über das Konzept der Schnittstellen und Treiber sprechen.

Zuallererst ist da natürlich die Hardware selbst, zum Beispiel eine Ethernet-Karte. Das ist ein Stückchen Epoxy voller kleiner Chips mit komischen Nummern drauf, das in einem Steckplatz Ihres PC sitzt. Das ist, was wir allgemein ein Gerät nennen (engl. device).

Um die Ethernet-Karte benutzen zu können, müssen in Ihrem Linux-Kernel spezielle Funktionen vorhanden sein, die in der Lage sind, das Gerät anzusprechen. Diese Gruppe von Funktionen nennt man Gerätetreiber (device driver). Linux besitzt beispielsweise Treiber für eine ganze Reihe von Ethernet-Karten unterschiedlicher Hersteller, die einander in ihrer Funktionsweise ähneln. Sie sind als die Becker-Treiberserie bekannt, nach ihrem Autor Donald Becker benannt. Ein anderes Beispiel ist der D-Link-Treiber, der den D-Link-Taschenadapter bedient, der an den Parallelport angeschlossen wird.

Aber was meinen wir eigentlich, wenn wir sagen, ein Treiber »bediene« ein Gerät? Kommen wir noch einmal auf die oben betrachtete Ethernet-Karte zurück. Der Treiber muß in der Lage sein, mit den Logikbausteinen auf der Karte zu kommunizieren, während die Karte umgekehrt alle empfangenen Daten irgendwie beim Treiber abliefern muß.

Abbildung 3-1. Die Beziehungen zwischen Treibern, Schnittstellen und der Hardware.

In PCs findet diese Kommunikation durch einen speziellen Speicherbereich statt, der auf I/O-Register auf der Karte abgebildet wird. Alle Befehle, die der Kernel an die Karte schickt, müssen durch diese Register übermittelt werden. Dieser I/O-Speicher wird im allgemeinen mit seiner Start- oder Basisadresse angegeben. Typische Basisadressen für Ethernet-Karten sind 0x300 oder 0x360.

Für gewöhnlich brauchen Sie sich über solche Details wie Basisadressen nicht den Kopf zu zerbrechen, da der Kernel beim Booten versucht, die Position der Karte selbst herauszufinden. Dieser Vorgang heißt Autoprobing, was bedeutet, daß der Kernel verschiedene Speicheradressen ausliest und mit dem vergleicht, was herauskommen sollte, wenn eine bestimmte Ethernet-Karte installiert wäre. Allerdings kann es Ethernet-Karten geben, die der Kernel nicht automatisch erkennt; das ist bei manchen nicht hundertprozentigen Kopien von Karten anderer Hersteller der Fall. Außerdem gibt sich der Kernel beim Booten schon zufrieden, wenn er nur eine Karte gefunden hat; wenn Sie mehr als eine verwenden wollen, müssen Sie diese Karten von Hand konfigurieren.

Ein anderer Parameter, den Sie dem Kernel unter Umständen mitteilen müssen, ist der Interrupt-Kanal. Hardware-Komponenten schicken dem Kernel gewöhnlich eine Unterbrechungsanforderung, wenn sie seine Aufmerksamkeit benötigen, z. B. wenn Daten angekommen sind oder ein besonderer Zustand auftritt. In PCs können solche Unterbrechungen auf einem von 15 Interrupt-Kanälen signalisiert werden, die die Nummern 0, 1 und 3 bis 15 haben. Die einem Interrupt zugeordnete Nummer wird im Englischen interrupt request number oder kurz IRQ genannt.(1)

Wie in Kapitel 2, Aspekte der Netzwerarbeit mit TCP/IP beschrieben, spricht der Kernel ein Gerät durch eine sogenannte Schnittstelle oder Interface an. Interfaces bieten einen Satz abstrakter Funktionen, der für alle Arten von Hardware gleich ist, wie zum Beispiel das Senden oder Empfangen eines Datagramms.

Jedes Interface wird durch einen Namen bezeichnet. Diese Namen sind keine Gerätedateien im Verzeichnis /dev, sondern werden intern vom Kernel vergeben. Typische Beispiele sind eth0, eth1 usw. Die Zuordnung zwischen Schnittstellen und Geräten hängt gewöhnlich von der Reihenfolge ab, in der die Geräte konfiguriert werden; die erste Ethernet-Karte wird eth0, die nächste eth1 und so fort. Eine Ausnahme von dieser Regel sind unter anderem die SLIP-Schnittstellen, die dynamisch zugewiesen werden; das heißt, sobald eine SLIP-Verbindung hergestellt wurde, wird dem seriellen Port ein Interface zugewiesen.

Abbildung 3--1 versucht, den Zusammenhang zwischen den Hardware-Komponenten, Gerätetreibern und Schnittstellen zu verdeutlichen.

Während des Boot-Vorgangs zeigt der Kernel an, welche Geräte er erkennt und welche Schnittstellen initialisiert werden. Das folgende ist ein Ausschnitt eines typischen Boot-Vorgangs:

.
.
This processor honours the WP bit even when in supervisor mode. Good.
Swansea University Computer Society NET3.017
NET3 TCP/IP protocols stack v016
Swansea University Computer Society NET3.017
Swansea University Computer Society TCP/IP for NET3.018 
IP Protocols: IGMP, ICMP, UDP, TCP
PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.8.1-NET3.014-NEWTTY (4 channels) (6 bit encapsulation enabled)
CSLIP: code copyright 1989 Regents of the University of California
NE*000 ethercard probe at 0x340: 00 40 05 12 c6 54
eth0: NE2000 found at 0x340, using IRQ 15. ne.c:v1.10 9/23/94 
Donald Becker (becker@cesdis.gsfc.nasa.gov)
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Checking 'hlt' instruction... Ok.
Linux version 1.1.75 (okir@monad.swb.de) (gcc version 2.6.2)
#14 Mon Jan 2 09:18:46 MET 1995 …

Die Meldungen zeigen, daß der Kernel netzwerkfähig ist und Treiber für SLIP, CSLIP und PPP eingebunden wurden. Die dritte Zeile von unten besagt, daß eine NE2000-kompatible Netzwerkkarte erkannt und als Interface eth0 installiert wurde. Wenn Sie eine Ethernet-Karte installiert haben, aber keine derartige Meldung sehen, bedeutet das, daß der Kernel nicht in der Lage war, Ihre Karte zu erkennen. Dieses Problem werden wir in einem späteren Abschnitt behandeln.

Konfigurieren des Kernels

Die meisten Linux-Distributionen kommen mit Boot-Disketten einher, die mit allen gängigen Typen von PC-Hardware funktionieren. Das bedeutet, daß die Kernel auf diesen Boot-Disketten neben einer RAM-Disk auch einen ganzen Schwung Treiber enthalten, die Sie gar nicht brauchen, und die nur wertvollen Speicherplatz verschwenden. Deshalb sollten Sie auf jeden Fall einen auf Ihre Situation zugeschnittenen Kernel zusammenstellen, der nur die Treiber enthält, die Sie wirklich brauchen.

Wenn Sie ein Linux-System benutzen, sollten Sie bereits damit vertraut sein, wie man einen Kernel »baut.« Die Grundlagen dafür werden unter anderem in dem Buch »Linux -- Wegweiser zur Installation und Konfiguration« von Matt Welsh und Lar Kaufman beschrieben, weswegen wir uns hier nur mit den Optionen befassen werden, die den Netzwerkteil betreffen. Außerdem liegt den Kernel-Quellen eine README-Datei bei, die Ihnen eine »Quick and Dirty«-Einführung in die grundlegenden Dinge der Kernel-Konfiguration gibt.

Wenn Sie make config aufrufen, werden Sie zuerst nach allgemeinen Einstellungen gefragt, beispielsweise, ob Sie Treiber für IDE-Platten benötigen oder nicht. Unter anderem bietet Ihnen das Konfigurations-Skript Unterstützung für TCP/IP-Networking an. Diese Frage müssen Sie mit Ja (y) beantworten, um einen netzwerkfähigen Kernel zu erhalten.

Kerneloptionen in Linux 1.0 und höher

Nachdem Ihnen das Skript verschiedene Optionen wie a. a. SCSI-Treiber angeboten hat, folgt ein Abschnitt zur Netzwerk-Konfiguration. Eine typische Liste von Optionen, wie sie Kernel der Reihen 1.0 und 1.1 anbieten, sieht etwa so aus:

* 
* Network device support 
* 
Network device support? (CONFIG_ETHERCARDS) [y]

Trotz des etwas irreführenden Makronamens in Klammern müssen Sie diese Frage grundsätzlich mit y beantworten, falls Sie irgendeine Art von Netzwerk-Treibern einbinden wollen, sei es Ethernet, SLIP oder PPP. Wenn Sie mit Ja antworten, wird zunächst die grundlegende Funktionalität für Ethernet-Karten zu Verfügung gestellt. Andere Treiber müssen ausdrücklich aktiviert werden.

SLIP (serial line) support? (CONFIG_SLIP) [y]  SLIP compressed headers 
(SL_COMPRESSED) [y] PPP (point-to-point) support (CONFIG_PPP) [y] PLIP 
(parallel port) support (CONFIG_PLIP) [n]

Diese Fragen betreffen die verschiedenen Protokolle, die von Linux auf der Verbindungsebene (link layer) bereitgestellt werden. SLIP erlaubt Ihnen, IP-Datagramme über serielle Leitungen zu transportieren. Die Option »compressed headers« stellt zusätzliche Unterstützung für CSLIP bereit, eine SLIP-Variante, die TCP/IP-Header auf bis zu drei Byte komprimieren kann. Es sei darauf hingewiesen, daß diese Kernel-Option CSLIP beim Verbindungsaufbau nicht automatisch einschaltet; sie stellt bloß die notwendige Funktionalität zur Verfügung.

PPP ist ein weiteres Protokoll, um Netzverkehr über serielle Leitungen zu übertragen. Es ist wesentlich flexibler als SLIP, da es nicht auf IP beschränkt ist. Grundsätzlich ist PPP auch in der Lage, beispielsweise IPX zu transportieren; das ist allerdings noch nicht implementiert. Da es den PPP-Treiber noch nicht allzulange gibt, fehlt diese Option in älteren Kernel-Versionen.

PLIP bietet die Möglichkeit, IP-Datagramme über parallele Verbindungen zu übertragen. Es wird häufig zur Kommunikation mit PCs verwendet, die DOS fahren.

Die folgenden Fragen befassen sich mit Ethernet-Karten verschiedener Hersteller. Da ständig neue Treiber entwickelt werden, verändert sich die genaue Struktur dieses Abschnitts ständig. Sie sollten sich dadurch nicht irritieren lassen. Wenn Sie einen Kernel zusammenstellen wollen, der auf mehr als einer Maschine laufen soll, können Sie auch mehr als einen Treiber auswählen.

NE2000/NE1000 support (CONFIG_NE2000) [y]
WD80*3 support (CONFIG_WD80x3) [n]
SMC Ultra support (CONFIG_ULTRA) [n]
3c501 support (CONFIG_EL1) [n]
3c503 support (CONFIG_EL2) [n]
3c509/3c579 support (CONFIG_EL3) [n]
HP PCLAN support (CONFIG_HPLAN) [n]
AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG_LANCE) [n]
AT1700 support (CONFIG_AT1700) [n]
DEPCA support (CONFIG_DEPCA) [n]
D-Link DE600 pocket adaptor support (CONFIG_DE600) [y]
AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [n]
*
* CD-ROM drivers
*
…

Im Abschnitt über Dateisysteme fragt das Konfigurations-Skript Sie schließlich, ob Sie Unterstützung für NFS, das Netzwerk-Dateisystem (Network File System) wünschen. NFS erlaubt Ihnen, Dateisysteme an verschiedene Maschinen zu exportieren, so daß die Dateien auf diesen Rechnern erscheinen, als befänden sie sich auf einer ganz normalen lokalen Festplatte.

NFS filesystem support (CONFIG_NFS_FS) [y]

Kerneloptionen in Linux 1.1.14 und höher

Seit Version 1.1.14, die unter anderem Alpha-Unterstützung für IPX einführte, hat sich die Konfigurations-Prozedur geringfügig verändert. Der Teil, der sich mit allgemeinen Optionen befaßt, fragt Sie nun, ob Sie überhaupt irgendeine Art von Unterstützung für TCP/IP wünschen. Dem folgt unmittelbar eine Reihe von Fragen über verschiedene Netzwerk-Optionen.

*
* Networking options
* TCP/IP networking (CONFIG_INET) [y]

Um TCP/IP -- Networking (FIXME) zu benutzen, müssen Sie diese Frage mit Ja (y) beantworten. Wenn Sie mit n antworten, haben Sie aber immer noch die Möglichkeit, IPX-Unterstützung einzubinden.

IP forwarding/gatewaying (CONFIG_IP_FORWARD) [n]

Diese Option müssen Sie einschalten, wenn Ihr System als Gateway zwischen zwei Ethernets oder einem Ethernet und einer SLIP-Verbindung usw. dienen soll. Obwohl es nicht schadet, IP-Forwarding grundsätzlich bereitzustellen, möchten Sie vielleicht darauf verzichten, um Ihr System als sogenannten Firewall (wörtlich: Brandschutzmauer) zu konfigurieren. Firewalls sind Rechner, die zwischen zwei oder mehreren Netzen sitzen, aber keine Pakete vom einen ins andere routen. Sie werden häufig dazu benutzt, um beispielsweise Mitarbeitern einer Firma Zugang zum Internet zu bieten, aber gleichzeitig die Risiken für das firmeninterne Netz zu begrenzen. Benutzer können sich auf dem Firewall einloggen und Internet-Dienste benutzen, aber alle anderen Maschinen sind vor Angriffen von außen geschützt, da hereinkommende Verbindungen nur bis zum Firewall kommen.(2)

*
* (it is safe to leave these untouched)
*
PC/TCP compatibility mode (CONFIG_INET_PCTCP) [n]

Diese Option umgeht eine Inkompatibilität mit einigen Versionen von PC/TCP, einer kommerziellen TCP/IP-Implementation für DOS-basierte PCs. Wenn Sie diese Option einschalten, können Sie immer noch mit normalen UNIX-Maschinen kommunizieren; allerdings kann der Durchsatz über langsame Verbindungen wie SLIP etwas darunter leiden.

Reverse ARP (CONFIG_INET_RARP) [n]

Diese Funktion stellt RARP, das Reverse Address Resolution Protocol, bereit. RARP bedeutet soviel wie »umgekehrte Adreßauflösung« und wird von X-Terminals und ähnlichem benutzt, um beim Booten die eigene IP-Adresse herauszufinden. Sie sollten RARP nur dann einschalten, wenn Sie diese Art von Geräten bedienen wollen. Neuere Versionen der Netzwerk-Utilities enthalten ein Programm names rarp, das Ihnen erlaubt, Systeme in den RARP-Cache des Kernels einzutragen.

Assume subnets are local (CONFIG_INET_SNARL) [y]

Wenn Sie Daten über eine TCP-Verbindung transportieren, muß der Kernel sie in kleinere Pakete zerteilen, bevor er sie an die IP-Schicht weiterreicht. Ist das Zielsystem über ein lokales Netz wie ein Ethernet erreichbar, werden größere Pakete benutzt als für Systeme, die nur über langsame Weitverbindungen erreichbar sind.(3) Wenn Sie SNARL nicht einschalten, nimmt der Kernel an, daß nur solche IP-Netze wirklich lokal sind, zu denen er ein direktes Interface hat. Betrachten Sie andererseits die Groucho-Marx-Universität: Hier sind alle Teilnetze durch einen schnellen Backbone miteinander verbunden, aber die meisten Rechner sind nur an ein oder höchstens zwei Subnetze direkt angeschlossen. Mit SNARL nimmt der Kernel nun an, daß alle Subnetze lokal sind, und verwendet immer große Pakete, wenn er mit einem anderen Rechner auf dem Campus spricht.

Wenn Sie SNARL wählen, aber trotzdem für einige ausgewählte Rechner kleinere Pakete verwenden wollen (beispielsweise weil die Daten über eine SLIP-Leitung gehen), können Sie die mtu-Option des route-Kommandos verwenden, das am Ende dieses Kapitels kurz angesprochen wird.

Disable NAGLE algorithm (normally enabled) (CONFIG_TCP_NAGLE_OFF) [n]

Die Regel von Nagle ist eine Heuristik, um die Erzeugung besonders kleiner IP-Pakete, auch Tinygrams genannt, zu vermeiden. Tinygrams werden unter anderem von interaktiven Programmen erzeugt, die einzelne Tastenanschläge übertragen, wie telnet oder rlogin. Tinygrams sind insbesondere auf Verbindungen wie SLIP oder PPP, die eine recht niedrige Bandbreite haben, eine ziemliche Verschwendung. Der Algorithmus von Nagle versucht sie zu vermeiden, indem er die Übertragung von TCP-Daten unter bestimmten Umständen kurzfristig verzögert. Sie sollten nur dann auf Nagles Algorithmus verzichten, wenn schwere Probleme durch Paketverluste auftreten.

The IPX protocol (CONFIG_IPX) [n]

Diese Option stellt Unterstützung für IPX, ein von Novell Networking benutztes Protokoll, bereit. Es befindet sich derzeit noch in der Entwicklung. Der Hauptnutzen von IPX wird sein, daß Sie eines Tages Daten mit IPX-basierten DOS-Utilities austauschen und Verkehr zwischen Novell-Netzen beispielsweise über eine PPP-Verbindung routen können. Unterstützung für die höheren Novell-Protokolle wie NCP ist dagegen nicht in Sicht, da die nötigen Spezifikationen nur zu erklecklichen Preisen und gegen eine Non-Disclosure-Vereinbarung erhältlich sind.

Seit der Version 1.1.16 unterstützt Linux einen weiteren Treibertyp, den Dummy-Treiber. Die folgende Frage taucht am Anfang des Abschnitts über Gerätetreiber auf:

Dummy net driver support (CONFIG_DUMMY) [y]

Der Dummy-Treiber tut nicht besonders viel, wie der Name auch schon ahnen läßt, ist aber auf einem Rechner ohne Netzanbindung oder mit nur einer SLIP-Verbindung sehr nützlich. Er ist im wesentlichen ein maskiertes Loopback-Interface. Der Grund, eine solche Schnittstelle zu haben, ist folgender: Auf einer Maschine, die SLIP, aber kein Ethernet hat, wünscht man sich eine Schnittstelle, die die ganze Zeit Ihre IP-Adresse trägt, und nicht nur, wenn die SLIP-Verbindung aktiv ist. Wir werden auf diese Frage noch etwas ausführlicher in Abschnitt Die Dummy-Schnittstelle in Kapitel 5 zurückkommen.

Eine Tour durch die Netzwerk-Geräte

Der Linux-Kernel unterstützt eine Anzahl von Treibern für unterschiedliche Arten von Hardware. Dieser Abschnitt gibt Ihnen einen kurzen Überblick der vorhandenen Treiber-Familien und der für sie reservierten Interface-Namen. Die meisten Treiber unterstützen mehrere Schnittstellen. In diesem Falle werden die Namen durchnumeriert, z. B. als eth0, eth1 usw.

lo
Das Loopback-Interface. Es kann einerseits zum Testen verwendet werden, wird aber auch von einigen Applikationen wie INN benutzt, um Daten darüber auszutauschen. Es funktioniert wie eine Art Schleife, die jedes empfangene Datagramm umgehend an die Netzwerkschicht Ihres Systems zurückreicht. Jeder Kernel besitzt eine solche Schnittstelle, und es ist im allgemeinen auch nicht sinnvoll, mehr oder weniger zu haben.
eth0, eth1, …
Ethernet-Geräte. Dies ist der generische Name für die meisten Ethernet-Karten.
dl0, dl1, …
Diese Schnittstellen bedienen den D-Link DE-600 Pocket-Adapter. Er unterscheidet sich von gewöhnlichen Ethernet-Geräten dadurch, daß er durch den Parallelport angesteuert wird. Ab der Kernel-Revision 1.1 ist dieser Name allerdings obsolet; der DE-600 wird jetzt auch als eth0, eth1 etc. registriert.
sl0, sl1, …
SLIP-Schnittstellen. Die Namen werden in der Reihenfolge vergeben, in der serielle Ports für die SLIP-Nutzung belegt werden, d. h. die erste serielle Verbindung, die für SLIP konfiguriert wird, erhält den Namen sl0, die nächste sl1 usf. Per Voreinstellung unterstützt der Kernel bis zu vier SLIP-Interfaces.
ppp0, ppp1, …
PPP-Schnittstellen. Sie werden wie SLIP-Kanäle auch erst dann zugeteilt, wenn ein serieller Port in den PPP-Modus geschaltet wird. Zur Zeit werden bis zu vier Interfaces unterstützt.
plip0, plip1, …
PLIP-Schnittstellen. PLIP überträgt IP-Pakete über den Parallelport. Bis zu drei PLIP-Interfaces werden unterstützt. Sie werden vom PLIP-Treiber während des Bootens reserviert und den einzelnen Parallelports statisch zugeordnet.

In Zukunft werden für andere Treiber wie ISDN oder Amateurfunk (Ham-Radio) weitere Namen eingeführt werden.

In den folgenden Abschnitten werden wir uns im einzelnen mit den oben aufgeführten Treibern beschäftigen.

Ethernet-Installation

Wie bereits mehrfach erwähnt, stellt Linux Ethernet-Treiber für Karten diverser Hersteller bereit. Die meisten Treiber stammen von Donald Becker (becker@cesdis.gsfc.nasa.gov), der eine Treiber-Familie für Karten geschrieben hat, die auf dem Chip NSC 8390 von National Semiconductor basieren. Daneben gibt es Treiber für einige Produkte von D-Link, unter anderem für den bereits erwähnten Pocket-Adapter. Dieser Treiber wurde von Bjørn Ekwall geschrieben (erreichbar als bj0rn@blox.se -- Vorsicht, der Buchstabe 0 ist eine Null). Der DEPCA-Treiber stammt von David C. Davies. In jüngster Zeit hat David für DEC auch einen Treiber für die Digital EtherWorks 3-Karte geschrieben, der von DEC unter der GNU-Lizenz freigegeben wurde.(4)

Verkabelung

Falls Sie das erste Mal in Ihrem Leben ein Ethernet installieren, sind hier einige Worte über die Verkabelung angebracht. Ethernet ist sehr pingelig, was den korrekten Anschluß der Kabel angeht. Das Kabel muß an beiden Enden mit einem 50 Ohm-Widerstand abgeschlossen werden, und es dürfen keine Verzweigungen auftreten (d. h. drei sternförmig verbundene Kabel). Wenn Sie das gängige dünne Koaxialkabel mit den T-förmigen BNC-Verbindern benutzen, müssen diese Verbinder direkt auf die Karte aufgesteckt werden; Sie sollten unter keinen Umständen ein Verlängerungskabel einfügen.

Die Länge des Kabels spielt ebenfalls eine wichtige Rolle. Bei einer Installation mit dünnem Koaxialkabel darf der Strang nicht länger als 200 Meter sein,(5) und Stecker müssen mindestens 2.5 Meter auseinander liegen. Wenn Sie einen längeren Strang benötigen, um alle Maschinen miteinander zu verbinden, müssen Sie an geeigneten Stellen sogenannte Repeater einfügen, die das Signal verstärken.

Wenn Sie sich an eine Thicknet-Installation anschließen, die das dickere Koaxialkabel (ca. 8 mm) verwendet, benötigen Sie einen Transceiver, auch Ethernet Attachment Unit genannt. Der Transceiver wird im allgemeinen über ein abgeschirmtes Kabel mit dem AUI-Port Ihrer Karte verbunden.

Unterstützte Karten

Die folgende Liste beschreibt die verbreitetsten Karten, die von Linux unterstützt werden. Eine vollständige Liste, die ungefähr dreimal so lang ist, finden Sie im Ethernet-HOWTO von Paul Gortmaker.(6) Die aktuellen HOWTOs sind per FTP auf ftp.uni-erlangen.de im Verzeichnis MIRROR.sunsite/docs erhältlich und sollten auch den meisten Linux-CDs beiliegen.

Selbst wenn Sie Ihre Karte in der folgenden Liste finden, schauen Sie bitte trotzdem ins HOWTO. Es diskutiert für einige Karten verschiedene Betriebsmodi, die die Leistung Ihrer Karte deutlich beeinflussen können.

3Com Etherlink
Sowohl 3c503 als auch 3c503/16 werden unterstützt, wie auch 3c507 und 3c509. Es gibt auch einen Treiber für die 3c501, allerdings ist die Karte so langsam, daß sich die Investition kaum lohnt. Alan Cox benutzt nach eigenem Bekunden zwei 3c501-Karten, um die Fehlertoleranz des Netzwerk-Kodes zu testen.
Novell Eagle
NE1000 und NE2000 sowie eine Reihe von Nachbauten anderer Hersteller. NE1500 und NE2100 werden ebenfalls unterstützt.
Western Digital/SMC
WD8003 und WD8013 (diese Karten entsprechen der SMC Elite bzw. SMC Elite Plus). Daneben wird die 16-Bit-Version SMC Elite Ultra unterstützt.
Hewlett Packard
HP 27252, HP 27247B, und HP J2405A.
D-Link
DE-600 Pocket-Adapter, DE-100, DE-200, DE-220T und DE-620. Daneben existiert ein Patch-Kit für die DE-650, eine PCMCIA-Karte.(7)
Digital Equipment
Die DEPCA-Karten DEPCA rev E, DE200 (32K/64K), DE201, DE202, DE210, DE100 und DE422. Außerdem seit Linux 1.1.60 auch die Etherworks-Karten DE203, DE204 und DE205.

Um eine dieser Karten mit Linux zu verwenden, können Sie einen fertigen Kernel aus einer der vielen Linux-Distributionen verwenden. Diese Kernel haben im allgemeinen Treiber für alle Karten eingebunden. Auf lange Sicht ist es allerdings besser, wenn Sie sich Ihren eigenen Kernel bauen und nur diejenigen Treiber verwenden, die Sie tatsächlich brauchen.

Ethernet-Autoprobing

Beim Booten versucht der Kernel herauszufinden, ob und was für eine Ethernet-Karte Sie installiert haben. Dabei prüfen alle Treiber nacheinander bestimmte Adressen, an denen sich eine Karte befinden kann, und gehen dabei nach dieser Reihenfolge vor:

--------------------------------------------------------------------
Karte         Geprüfte Adressen                                       
--------------------------------------------------------------------
WD/SMC        0x300, 0x280, 0x380, 0x240                              
SMC 16 Ultra  0x300, 0x280                                            
3c501         0x280                                                   
3c503         0x300, 0x310, 0x330, 0x350, 0x250, 0x280, 0x2a0, 0x2e0  
NEx000        0x300, 0x280, 0x320, 0x340, 0x360                       
HP            0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240         
DEPCA         0x300, 0x320, 0x340, 0x360                              
--------------------------------------------------------------------

Der Ethernet-Testkode hat zwei Einschränkungen: Zum einen ist es möglich, daß eine Karte nicht korrekt erkannt wird. Das ist zwar recht selten, kommt aber gelegentlich bei billigeren Kopien gängiger Marken wie NE2000 vor. Einige der WD80x3-Karten sollen dieses Problem auch haben.

Die zweite Einschränkung ist, daß der Kernel sich zufriedengibt, sobald er eine Karte gefunden hat, und sich nicht weiter um eine eventuell vorhandene, zweite Karte kümmert. Das ist durchaus beabsichtigt, da davon ausgegangen wird, daß Sie die Kontrolle darüber haben wollen, welches Interface welcher Karte zugewiesen wird.

Wenn Sie zwei Karten verwenden oder wenn der Selbsttest-Kode Ihre Karte nicht erkennt, müssen Sie dem Kernel die Basisadresse und evtl. den IRQ der Karte ausdrücklich mitteilen. Das können Sie auf zwei Arten tun.

Ein gangbarer Weg ist, die Datei drivers/net/Space.c in den Kernel-Quellen zu ändern. Diese Datei enthält alle wesentlichen Informationen über die Netzwerk-Treiber. Das ist aber nur empfehlenswert, wenn Sie sich etwas mit dem Netzwerk-Kode des Kernels auskennen. Eine wesentlich bessere Methode ist, dem Kernel diese Information beim Booten mitzuteilen. Wenn Sie lilo als Boot-Lader einsetzen, können Sie dem Kernel verschiedene Parameter direkt beim Booten oder durch die append-Option in der Datei lilo.conf übergeben. Der ether-Parameter beschreibt ein Ethernet-Gerät und hat folgendes Format:

ether=irq,base_addr,param1,param2,name

Die ersten vier Parameter sind Zahlen, während der letzte der Name des zuzuordnenden Interfaces ist. Alle numerischen Werte sind optional; wenn sie weggelassen oder auf Null gesetzt werden, wird der Kernel den Wert automatisch herauszufinden versuchen bzw. eine Voreinstellung verwenden.

Der erste Parameter legt den IRQ des Gerätes fest. Ist kein Wert angegeben, versucht der Kernel, den IRQ-Kanal selbst festzustellen. Der 3c503-Treiber hat ein spezielles Feature, das einen freien IRQ aus der Liste 5, 9, 3 und 4 auswählt und die Karte so konfiguriert, daß sie diesen Interrupt verwendet.

Der Parameter base_addr gibt die I/O-Adresse der Karte an; ein Wert von Null veranlaßt den Kernel, sie über den üblichen Autoprobing-Mechanismus zu suchen.

Die verbleibenden zwei Parameter werden von verschiedenen Treibern unterschiedlich interpretiert. Für Karten wie die WD80x3, die auf Shared Memory basieren, geben Sie die Anfangs- und Endadresse des Shared Memory-Bereichs an. Die meisten anderen Karten interpretieren param1 als den Umfang, in dem Debugging-Informationen ausgegeben werden. Werte von 1 bis 7 bezeichnen zunehmende Geschwätzigkeit, während 8 diese Informationen völlig unterdrückt. Null wählt einen Voreinstellungswert aus, der von Karte zu Karte unterschiedlich sein kann. Der 3c503-Treiber verwendet param2, um zwischen dem internen Transceiver (Voreinstellung) und einem externen Transceiver (Wert von 1) zu unterscheiden. Die erste Variante stellt die BNC-Buchse der Karte ein, die zweite den AUI-Port.

Wenn Sie zwei Karten verwenden, können Sie Linux die erste Karte automatisch erkennen lassen und die Parameter der zweiten mit lilo übergeben. Dabei müssen Sie allerdings sicherstellen, daß der Treiber die zweite Karte nicht aus Versehen zuerst findet, da sonst die andere überhaupt nicht konfiguriert wird. Das können Sie dadurch erreichen, daß Sie lilo eine reserve-Option übergeben, die den Kernel ausdrücklich anweist, den von der zweiten Karte belegten I/O-Bereich nicht zu testen.

Wenn Sie zum Beispiel Ihre zweite Karte auf die Adresse 0x300 konfiguriert haben, übergeben Sie dem Kernel folgende Parameter:

reserve=0x300,32 ether=0,0x300,eth1

Die reserve-Option stellt sicher, daß kein Treiber auf den angegebenen I/O-Bereich von 0x300 bis 0x31F zugreift, wenn er das Vorhandensein eines Geräts prüft. Diesen Parameter können Sie auch benutzen, um bei der Konfiguration Ihrer ersten Karte den Autoprobing-Mechanismus zu umgehen:

reserve=0x340,32 ether=0,0x340,eth0

Um das Autoprobing für Ihre Ethernet-Karte vollständig auszuschalten, können Sie eine Basisadresse von -1 angeben:

ether=0,-1,eth0

Der PLIP-Treiber

PLIP bedeutet Parallel Line IP und ist eine kostengünstige Art, zwei Maschinen miteinander zu vernetzen. Es verwendet den Parallelport sowie ein spezielles Kabel und erreicht Übertragungsgeschwindigkeiten von 10 bis 20 Kilobit/s.

PLIP wurde ursprünglich von der Frima Crynwr Inc. entwickelt. Das Design ist ziemlich genial (oder, wenn Sie es bevorzugen, hackermäßig): Lange Zeit waren die parallelen Ports des PC nur unidirektionale Druckerschnittstellen, das heißt über die 8 Datenleitungen konnten Daten an das Peripherie-Gerät ausgegeben werden, aber nicht umgekehrt. PLIP umgeht das Problem, indem es die fünf Statusleitungen der Schnittstelle für die Eingabe verwendet. Dadurch ist es allerdings gezwungen, alle Daten in Nibbles (halben Bytes) zu übertragen. Diese Arbeitsweise wird PLIP-Modus 0 genannt. Heutzutage werden diese unidirektionalen Schnittstellen allerdings immer seltener. Aus diesem Grunde gibt es eine zweite PLIP-Variante names Modus 1, die die vollen 8 Bit des Ports nutzt.

Zur Zeit unterstützt Linux nur Modus 0. Während dies bei älteren Versionen nicht der Fall gewesen sein soll, ist der Treiber heute mit der ursprünglichen Implementation von Crynwr und dem Treiber im NCSA telnet kompatibel.(8) Um zwei Maschinen mit PLIP zu verbinden, benötigen Sie ein spezielles Kabel, das unter anderem unter der Bezeichnung »Null-Printer« und »Turbo Laplink« verkauft wird. Sie können es allerdings auch mit relativ geringem Aufwand selbst zusammenlöten, die Steckerbelegung finden Sie in Anhang A.

Der PLIP-Treiber für Linux ist das geistige Kind beinahe zahlloser Personen und wird zur Zeit von Niibe Yutaka gepflegt. In den Kernel eingebunden, reserviert er eine Netzwerkschnittstelle für jeden der möglichen Druckerports, wobei plip0 dem Port lp0 (LPT1) entspricht, plip1 dem Port lp1 etc. Die Abbildung von Schnittstellen auf Ports stellt sich zur Zeit so dar:

---------------------------
Interface  I/O-Adresse  IRQ  
---------------------------
plip0      0x3BC        7    
plip1      0x378        7    
plip2      0x278        5    
---------------------------

Wenn Sie Ihre parallele Karte anders konfiguriert haben, müssen Sie diese Werte in drivers/net/Space.c ändern und den Kernel neu übersetzen.

Diese Zuordnungen bedeuten allerdings nicht, daß Sie den parallelen Port nicht wie üblich benutzen können. Er wird erst dann vom PLIP-Treiber reserviert, wenn Sie die entsprechende Netzwerkschnittstelle aktivieren.

Die SLIP- und PPP-Treiber

SLIP (Serial Line IP) und PPP (Point-to-Point Protocol) sind weitverbreitete Protokolle, mit denen IP-Pakete über serielle Verbindungen übertragen werden können. Eine ganze Reihe von Firmen, Universitäten und Vereinen bieten Internet-Zugang über SLIP- und PPP-Verbindungen und machen so IP-basierte Dienste auch für Privatpersonen erschwinglich.

Um SLIP oder PPP einzusetzen, sind keinerlei Manipulationen am Kernel vonnöten; Sie können dafür einen ganz gewöhnlichen seriellen Port benutzen. Da die Konfiguration der seriellen Schnittstelle aber nicht unmittelbar mit TCP/IP zu tun hat, wird sie in einem gesonderten Kapitel abgehandelt. Weitergehende Informationen schlagen Sie deshalb bitte in Kapitel 4, Konfiguration der seriellen Hardware nach.


Fußnoten

(1)
Die IRQs 2 und 9 bezeichnen denselben Kanal. Der PC besitzt zwei kaskadierte Interrupt-Bausteine mit jeweils 8 Kanälen, wobei der zweite Baustein mit IRQ2 des ersten verbunden ist.
(2)
Neuere Kernel-Versionen bieten auch Unterstützung für einen Paketfilter, der z.B. den Zugriff bestimmter Hosts auf diverse Netzwerkdienst einschränken kann.
(3)
Zweck der Übung ist es, eine Fragmentierung der Pakete auf Verbindungen zu vermeiden, die keine so großen Pakete transportieren können.
(4)
Dieser Treiber läßt sich auch als ladbares Kernel-Modul einsetzen.
(5)
Aus diesem Grunde wird das »dünne« Ethernet auch oft 10base2 genannt, im Gegensatz zum Thicknet (10base5), das eine Maximallänge von 500 Metern hat, wie auch im Gegensatz zu Twisted Pair (10baseT).
(6)
Paul können Sie unter der Adresse gpg109@rsphysse.anu.edu.au erreichen.
(7)
Sie ist zusammen mit anderen Patches für Laptops auf tsx-11.mit.edu im Verzeichnis packages/laptops erhältlich.
(8)
NCSA telnet ist ein beliebtes Programm für DOS-PCs, das TCP/IP über Ethernet und PLIP bietet und telnet und ftp unterstützt.

Inhaltsverzeichnis Kapitel 2 Kapitel 4