  Mehrere Ethernet-Karten in einem Rechner HOWTO
  Philipp JW Grau (phgrau@piak.de)
  v0.2.1-3, 7. Januar 2000

  Dieses Dokument beschreibt die Nutzung mehrerer Ethernet-Karten in
  einem Linux-Rechner.


  1.  Copyright

  Dieses Dokument ist urheberrechtlich geschtzt. Das Copyright fr die
  englische Multiple-Ethernet mini-HOWTO, auf der dieses Dokument
  basiert, liegt bei Don Becker. Das Copyright fr die deutsche Version
  liegt bei Philipp JW Grau.

  Das Dokument darf gem der GNU General Public License verbreitet
  werden. Insbesondere bedeutet dieses, da der Text sowohl ber
  elektronische wie auch physikalische Medien ohne die Zahlung von
  Lizenzgebhren verbreitet werden darf, solange dieser Copyright
  Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt
  und ausdrcklich erwnscht. Bei einer Publikation in Papierform ist
  das Deutsche Linux HOWTO Projekt hierber zu informieren.






  2.  Schnellstart: Ladbare Kernel-Module fr Netzwerkkarten



  2.1.  PCI-Karten

  PCI-Karten knnen vom Kernel sicher erkannt werden, d.h. man mu nur
  einen Eintrag in die Modul-Konfigurationsdatei /etc/conf.modules
  machen.


       alias eth1 tulip




  Hierbei steht tulip fr das gewnschte Karten-Modul


  2.2.  ISA-Karten

  Die Erkennung von ISA-Karten ist meist etwas gefhrlich, deshalb mu
  man die I/O-Adresse der Ethernetkarten angeben. Wenn mehrere Karten
  von einem Modul untersttzt werden, mu fr jede Karte die I/O-Adresse
  angegeben werden. Das sieht in /etc/conf.modules dann z.B. so aus:



       alias eth0 ne
       alias eth1 ne
       alias eth2 ne
       options ne io=0x280,0x300,0x320




  Oder fr eine einzelne Karte:



       options ne io=0x280 irq=5






  Hierbei steht ne fr das gewnschte Karten-Modul


  3.  Schnellstart: Einkompilierte Netzwerkkarten-Treiber



  Fr die meisten Anwender, die einen Kernel mit einkompilierten
  Netzwerkkarten-Treibern benutzen, sollte es reichen, folgende Zeilen
  an den Anfang der Datei /etc/lilo.conf zu schreiben und

       lilo

  aufzurufen:


       append = "ether=0,0,eth1 ether=0,0,eth2"


  Das ist alles, was zu tun ist. Wenn Linux nun neu gebootet wird,
  sollte die zweite und dritte Ethernet-Karte erkannt werden.
  Voraussetzung ist, da fr alle Netzwerkkarten die Untersttzung im
  Kernel enthalten ist.



  4.  Ladbare Kernel-Module fr Netzwerkkarten

  Fr Distributionen wie Debian und RedHat, die fast nur ladbare Device-
  Treiber nutzen, ist die Situtation etwas komplizierter und abhngig
  von der verwendeten Distribution.  Wenn man wissen mchte, ob schon
  Module geladen sind, kann man mit dem Befehl lsmod nachsehen. Man kann
  auch

       cat /proc/modules

  benutzen, das alle geladenen Module anzeigt.

  Ladbare Module werden entweder von einem Proze kerneld, der die
  Kernelanfragen fr Netzwerkschnittstellen verwaltet, oder von
  modprobe, das jedes Treiber-Modul ldt, um ein passendes zufinden,
  geladen.

  Der kerneld-Proze liest die Konfigurationsdatei /etc/conf.modules,
  die jeden Treiber beschreibt, der geladen werden soll.

  Auerdem kann man noch dem Kernel sagen, welche Module schon beim
  Booten zu laden sind. Hierzu kann man die zu ladenden Module in die
  Datei /etc/modules eintragen.



       # /etc/modules: Kernel-Module, die whrend des Bootvorganges
       #               zu laden sind
       #
       # Diese Datei sollte die Namen der Kernel-Module enthalten,
       # die beim Booten geladen werden sollen. In jeder Zeile
       # darf ein Modul stehen. Kommentare beginnen mit "#".
       # Ein Eintrag mit dem Namen "auto" fhrt dazu, da der
       # kerneld sofort gestartet wird. Der kerneld ldt dann
       # die Module je nach Bedarf. "noauto" schaltet den kerneld
       # vllig aus.

       #auto
       ne
       lp
       sg








  5.  Einkompilierte Treiber: Was gemacht wurde und wie.


  Normalerweise sucht ein gewhnlicher Linux-Kernel nach einer einzelnen
  Ethernet-Karte. Wenn diese gefunden wird, ist der Test auf
  Netzwerkkarten abgeschlossen.

  Es gibt drei Wege, um den Kernel nach weiteren Karten suchen zu
  lassen.

  1. Parameterbergabe zur Bootzeit am LILO-Prompt

  2. Konfiguration des Bootloaders, bei der die Parameter immer
     bergeben werden

  3. Modifikation der  Netzwerkkarten-Tabelle im Kernel

  Fr die meisten Anwender ist die zweite Methode das richtige
  Verfahren, und oben wurde eben dieses beschrieben.


  6.  Parameterbergabe mit dem Bootloader

  Im folgenden wird angenommen, da der Standard Linux-Bootloader LILO
  benutzt wird.

  Der Linux-Kernel kennt viele Parameter, die zur Bootzeit bergeben
  werden knnen. Die meisten Parameter spezifizieren Aspekte, die nicht
  vom Kernel selbstbestimmt werden knnen. Fr Netzwerk-Adapter werden
  die folgenden Parameter ausgewertet:



       ether=<IRQ>,<IO-ADDR>,<PARAM1>,<PARAM2>,<NAME>




  Gltige numerische Argumente knnen als dezimale, oktale (mit
  fhrender 0) oder hexadezimale (mit dem Prefix 0x) Zahl angegeben
  werden. Das erste nicht-numerische Argument wird als NAME des Devices
  genommen. Leere Argumente werden als Null angenommen, und leere
  Argumente vor dem Namen werden nicht verndert.



     IRQ
        Dieser Parameter spezifiziert den IRQ, der gesetzt werden soll,
        auf Karten, die den IRQ per Software setzen, oder der benutzte
        IRQ, auf Karten mit gejumperten IRQ.  Der Wert 0 bedeutet, da
        der IRQ wenn mglich von der Ethernetkarte gelesen werden soll,
        oder das autoIRQ genutzt werden soll, wenn die Netzwerkkarte
        keine Weg bereitstellt den IRQ zu lesen.



     IO-ADDR
        Dieser Parameter legt die Basis-I/O-Adresse fest, auf der nach
        der Karte gesucht werden soll. Ein Wert von Null sagt, da alle
        sinnvollen Adresse getestet werden sollen.

        Normalerweise wird ein reservierter Adressbereich benutzt, um zu
        entscheiden, ob eine Stelle getestet werden soll. Dieser
        Adressbereich wird ignoriert, wenn eine I/O-Adresse angegeben
        wird. Dies erlaubt dem reserve=-Parameter das Testen nach der
        Karte in einer I/O-Region zu unterbinden.




     PARAM1, PARAM2
        Ursprnglich wurden diese Parameter dazu benutzt, um die
        Speicher-Adressen fr Adapter, die Shared-Memory benutzen, wie
        der WD8013, festzulegen. Im Laufe der Zeit wurden sie erweitert,
        um anderen Treibern spezifische Optionen zu bergeben.

     NAME
        Der Name eines definierten Devices. Der Standard-Kernel
        definiert im allgemeinen eth0, eth1, eth2 und eth3. Andere
        Device-Namen z.B. fr PPP, SLIP oder einen Pocket-Ethernet-
        Adapter sind vielleicht vorhanden, gehorchen aber einer anderen
        Semantik.

  LILO stellt zwei Wege bereit, Parameter zur Bootzeit dem Kernel zu
  bergeben. Der am hufigsten genutzte Weg ist die direkte Eingabe am
  Bootprompt, hinter der Angabe des Kernelimages. Das folgende Beispiel
  aktiviert alle vier mglichen Devices.



       boot: linux ether=0,0,eth1 ether=0,0,eth2 ether=0,0,eth3




  Natrlich ist es ziemlich kompliziert, bei jedem Booten diese
  Parameter einzugeben, und erfordert unbeaufsichtigte Roboter. Man kann
  Kernel-Parameter permanent festlegen, in dem man in die
  Konfigurationsdatei von LILO, /etc/lilo.conf, eine append-Zeile
  einfgt und dann lilo aufruft, um die genderte Konfiguration zu
  aktivieren.



       append = "ether=0,0,eth1 ether=0,0,eth2 ether=0,0,eth3"






  6.1.  Hinweis

  Wenn man bei einkompilierten Treibern eine zweite/weitere Karte
  einbaut, hngt die Reihenfolge der Erkennung von der Reihenfolge in
  den Kernelsourcen ab. Also mu man eventuell die Netzwerk-Startup-
  Skripte anpassen. Der Ort fr die Anpassung der Kernelquellen wre
  wahrscheinlich drivers/net/Space.c. (Hinweis von Holger van Koll)


  7.  Modifizierung des Kernels


  Wenn mglich sollte das System ohne nderung der Kernelquellen
  konfiguriert werden. Eine nderung der Kernelquellen ist nicht
  selbstdokumentierent und fhrt zu Problemen, wenn ein Upgrade
  durchgefhrt wird. Es gibt aber ein paar Flle, bei denen die
  Modifizierung notwendig ist.


    Wenn man mehr als vier Devices bentigt. Die Datei
     drivers/net/Space.c hat nur Eintrge fr eth0 bis eth3.

    Wenn das Testen nach Karten limitiert werden mu, um Konflikten mit
     anderer Hardware vorzubeugen.

    Wenn andere Device-Namen als ethN verwendet werden sollen.

  Wenn man diesen Weg gehen will, mu man die Device-Liste in
  drivers/net/Space.c editieren. Man trage die gewnschten Werte ein.
  Wird ein neues Device eingefgt, sollte man darauf achten, da die
  Verkettung erhalten bleibt. Man sollte die vorhandenen Eintrge als
  Hilfe nutzen.



  8.  Hinweise auf spezielle Karten

  8.1.  PCI-Karten

  PCI- und EISA-Karten knnen sicher und zuverlig vom Kernel erkannt
  werden.  Deshalb finden die meisten PCI-Treiber alle untersttzten
  Karten ohne zustzliche Parameter. Die Ausnahme bilden Treiber, die
  sowohl die ISA- als auch die PCI-Versionen von Netzwerkkarten
  untersttzen: NE2000- und der ltere LANCE/PCnet-Netzwerkkarten-
  Treiber.



  8.2.  LANCE/PCnet Karten

  Der Kernel 1.2.13 und frhere Versionen des LANCE-Treiber erfordern
  spezielle DMA-Buffer im Speicher. Aus diesem Grunde ist die LANCE-
  Erkennung etwas anders und frher als andere Tests nach
  Netzwerkkarten. Erfreulicherweise kann man diesen ganzen Abschnitt
  ignorieren: mehrere LANCE-Karten werden automatisch gefunden.
  Andererseits kann der LANCE-Treiber zur Zeit noch keine LILO-Parameter
  nutzten.


  8.3.  3c509 im ISA-Modus

  Die 3c509 hat ein einzigartiges Feature, das wirklich sicheres Testen
  auf dem ISA-Bus erlaubt. Das ist prima, aber leider pat diese Methode
  nicht mit den anderen Tests zusammen.

  Der wichtigste Aspekt ist, da es schwierig ist, a priori festzulegen,
  welche Karte als erste erkannt wird.  Die Reihenfolge hngt von der
  Ethernet-Adresse der Karte ab.  Das heit, da der Ethernettkarte mit
  der niedrigsten Nummer eth0 zugewiesen wird, und der nchsten eth1,
  etc. Wenn die Karte eth0 entfernt wird, rutschen alle eine Nummer
  niedriger.

  Daraus folgt, da es nicht mglich ist, eine frhe Karte unbenutzt zu
  lassen, eine Karte auf einer Adresse oder einem IRQ verschieden von
  den EEPROM-Einstellungen zu verwenden oder eine Karte auf einer
  bestimmenten Adresse einzuschalten.



  8.4.  EISA 3c579 und 3c509 im EISA-Modus (alt)



  Kernel vor 1.1.25 testen nicht sauber auf mehrere EISA-Modus Karten.
  Wenn mehere ethN angegeben werden, wird die gleiche 3c5x9 mehrmals
  gefunden. Um dies zu umgehen, kann man die I/O-Adresse fr jede Karte
  einzeln angeben. Kernel nach 1.1.25 finden mehere EISA-Modus Karten,
  und suchen danach zustzliche ISA-Modus Karten, nach dem alle
  potentiellen EISA-Modus-Adressen getestet wurden.


  9.  Ergnzungen

  9.1.  Auswahl der Karten bei Kernel-Konfiguration

  Wenn ein neuer Kernel konfiguriert wird, sollten natrlich nur die
  Karten ausgewhlt werden, die tatschlich gebraucht werden. Vorteile:
  kleinerer Kernel.


  9.2.  Andere deutschsprachige HOWTOs

  Andere deutsche Linux-Dokumentation, insbesondere die deutschen HOWTOs
  gibt es hier:


       http://www.tu-harburg.de/dlhp/


  Verweisen mchte ich auerdem noch auf das deutsche Bridging mini-
  HOWTO von Ralph Wetzel, das beim Bau einer Brcke mit Linux sehr
  ntzlich ist.


  9.3.  Andere Verweise



    Die Seiten von Don Becker, dem Autor dieses HOWTOs und Maintainers
     der 3Com Netzwerkkarten Kernel-Module:

       http://www.scyld.com/linux_network_drivers.html



    Diagnose-Programmme fr Netzwerkkarten:

       http://www.scyld.com/diag/



































