Mini-HOWTO Machines Multi-Ethernet
 Don Becker, [email protected]
 5 aout 1995

 Ce mini-Howto explique comment configurer Linux pour qu'il reconnaisse
 plusieurs cartes Ethernet sur une meme machine.

 11..  IInnttrroodduuccttiioonn

 Dans le cas de la plupart des distributions classiques  de  Linux,  il
 suffit   d'ajouter  la  ligne  suivante  au  debut  de  votre  fichier
 /etc/lilo.conf et de relancer lilo :

 append = "ether=0,0,eth1"

 C'est tout ce que vous avez a faire. Lors du prochain  redemarrage  de
 la machine, Linux devrait reconnaitre la seconde carte.

 22..  LLeess ddiiffffeerreenntteess ssoolluuttiioonnss

 Par  defaut,  le noyau Linux ne recherche qu'une seule carte Ethernet,
 et ne va pas plus loin des qu'il en a trouve une. Il y a trois  facons
 de  contraindre  le noyau a rechercher des cartes supplementaires. Par
 ordre de simplicite (et de souplesse) croissante :

 +o  fournir des parametres au noyau lors du demarrage ;

 +o  configurer   le   chargeur   pour    qu'il    fournisse    lui-meme
    systematiquement ces parametres au noyau ;

 +o  modifier  les tables de detection des cartes Ethernet du noyau dans
    le fichier drivers/net/Space.c (et recompiler le noyau apres coup).

 Dans  la  plupart  des cas, c'est la deuxieme solution qui convient le
 mieux, et correspond a ce que nous avons decrit en  introduction.  Les
 deux  premieres  solutions  reposent  sur  le passage de parametres au
 noyaux et  sont  decrites  dans  la  section  suivante.  La  troisieme
 solution est decrite ensuite.

 33..  TTrraannssmmeettttrree ddeess ppaarraammeettrreess aauu nnooyyaauu

 Le  noyau  Linux  admet  qu'on  lui  fournisse  un  certain  nombre de
 parametres lors de son  lancement.  Le  plus  souvent  ces  parametres
 decrivent  des  aspects  de  la  configuration  qui  ne  peuvent  etre
 determines qu'au moment du demarrage.  Pour  les  cartes  reseaux,  le
 parametre est le suivant :

 ether=IRQ,adresse-E/S,param1,param2,nom

 Les  valeurs  numeriques admises peuvent etre exprimees en decimal, en
 octal (precedees par un '0') ou en hexadecimal (precedees  par  '0x').
 Le  premier argument qui n'est pas une valeur numerique est pris comme
 _n_o_m du peripherique (ici  une  carte  reseau).  Les  parametres  vides
 (entre  virgules)  ont zero comme valeur par defaut, et les parametres
 manquants avant le nom ne sont pas modifies.
    IIRRQQ
       Ce parametre indique l'IRQ (ligne d'interruption)  a  configurer
       (pour  les cartes admettant un parametrage logiciel de l'IRQ) ou
       a utiliser  (pour  celles  ou  l'IRQ  est  configuree  avec  des
       cavaliers  sur  la  carte).  Une  valeur  nulle  (0)  indique de
       demander a la carte quelle IRQ utiliser (si elle le  permet)  ou
       d'utiliser l'autoIRQ si la carte ne le permet pas.

    aaddrreessssee--EE//SS
       Ce  parametre  indique  l'adresse  d'entree/sortie a tester. Une
       valeur  nulle  (0)  demande  le  test  de  toutes  les  adresses
       d'entree/sortie raisonnables. Celles-ci sont determinees d'apres
       une  carte  des  zones  d'entree/sortie  habituelles  pour   les
       differents  types  de  peripherique.  Cette  carte des zones est
       ignoree si une adresse d'entree/sortie  est  specifiee.  Utilise
       avec  le  parametre reserve=_b_a_s_e,_t_a_i_l_l_e,... (-- Se reporter a la
       documentation _L_i_l_o.--) ceci permet d'empecher l'auto-test  d'une
       zone  d'entree/sortie  par d'autres pilotes et d'eviter ainsi le
       dysfonctionnement d'un peripherique qui  se  trouverait  pertube
       par ces tests.

    ppaarraamm11,,ppaarraamm22
       Au  depart,  ces  parametres  permettaient  d'indiquer l'adresse
       d'une zone de memoire partagee pour les cartes  qui  utilisaient
       cette technique, comme la WD8013. Leur utilisation a ensuite ete
       etendue a la  transmission  d'autres  informations  propres  aux
       differents types de cartes.

    nnoomm
       Ce  parametre  indique  le  nom  d'un peripherique predefini. Le
       noyau standard definit ainsi au moins "eth0", "eth1", "eth2"  et
       "eth3".  D'autres  noms peuvent etre predefinis (pour PPP, SLIP,
       etc.)  mais  ils  ont  une  semantique  differente  (pour  toute
       precision, se reporter aux FAQ et HOWTO correspondants).

 Deux  methodes  peuvent  etre utilisees pour fournir ces parametres au
 noyau Linux lors de son lancement. La methode habituelle  est  de  les
 indiquer  directement  apres  le  nom  de  l'image  noyau  a  charger.
 L'exemple suivant permet de tester les quatre emplacements possibles :

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

 Pour  eviter  d'avoir  a  taper  ceci  a chaque demarrage, il est plus
 pratique de configurer votre chargeur.

 33..11..  CCoonnffiigguurreerr vvoottrree cchhaarrggeeuurr

 Il est suppose dans ce qui suit que vous utilisez  le  chargeur  Linux
 standard _L_i_l_o.

 Il est bien evidemment penible d'avoir a taper une serie de parametres
 lors de chaque demarrage, et de plus cela empecherait tout redemarrage
 involontaire  de  s'effectuer  correctement  (--  Bien  que ce type de
 redemarrage ne se produise pas sous Linux  ;-)(_N_._D_._T_.).--)  .  L'ajout
 d'une   ligne   append   a   votre   fichier   de  configuration  _L_i_l_o
 (/etc/lilo.conf) vous permet de fournir automatiquement ces parametres
 au  noyau  (n'oubliez  pas  de  relancer lilo pour mettre a jour votre
 configuration).

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

 Cet  exemple  est   equivalent   au   precedent   (test   des   quatre
 emplacements),  en utilisant cette fois _L_i_l_o pour transmettre a chaque
 demarrage ces parametres au noyau.

 44..  MMooddiiffiieerr llee nnooyyaauu

 Si vous pouvez configurer votre systeme sans toucher au code source du
 noyau, nous vous recommandons fortement de faire ainsi (cf. supra). Il
 est difficile de garder une trace d'une modification apportee au  code
 source  et  cela  complique  grandement  les  mises  a  jour du noyau.
 Toutefois, cela s'impose dans les situations suivantes :

 +o  lorsque vous avez besoin de plus de quatre cartes  (seules  eth0  a
    eth3 sont definies dans le source drivers/net/Space.c) ;

 +o  vous  devez  resteindre  les types de peripheriques recherches a un
    sous-ensemble precis de types de  cartes  quand,  par  exemple,  le
    mecanisme de detection confond des types de cartes differents ;

 +o  quand  vous  voulez  utiliser  un  nom de peripherique different de
    eth_x.

 55..  NNootteess ssuurr llaa ddeetteeccttiioonn ddee qquueellqquueess ccaarrtteess ppaarrttiiccuulliieerreess

 55..11..  CCaarrtteess LLaannccee//PPCCNNEETT

 Le pilote Lance a besoin de tampons DMA en memoire basse, ce qui  fait
 que  la  procedure  de  detection des cartes Lance est specifique a ce
 type  de  cartes,  et  effectuee  avant  la   detection   des   autres
 peripheriques  reseaux.  L'avantage est que les cartes Lance multiples
 sont automatiquement detectees par cette procedure, l'inconvenient est
 que  le pilote Lance ignore (pour le moment) les parametres _L_i_l_o telle
 l'IRQ.

 55..22..  LLaa 33CC550099 eenn mmooddee IISSAA

 La 3C509 presente la caracteristique unique de permettre une detection
 vraiment  sure par le bus ISA. C'est une caracteristique interessante,
 mais malheureusement pour les situations  qui  nous  interessent  ici,
 cela  ne  fait  pas  tres  bon  menage  avec  les autres mecanismes de
 detection.

 Le probleme le plus important est qu'il est difficile de savoir quelle
 carte  sera  reconnue  en  premier,  l'ordre  dependant  de  l'adresse
 Ethernet des cartes. Cela signifie que la carte avec l'adresse la plus
 basse  se  verra  affectee  a  eth0,  et  ainsi  de suite. Si la carte
 correspondant a eth0 est retiree, toutes les autres cartes voient leur
 nom de peripherique decale d'une unite vers eth0.
 Un  probleme  lie est qu'il n'est pas possible de laisser une premiere
 carte inactive, ou une carte  active  a  une  adresse  ou  a  une  IRQ
 differentes de celles indiquees dans l'EEPROM, ou encore de configurer
 une carte a une adresse specifique.

 55..33..  LLaa 33CC557799 EEIISSAA eett llaa 33CC550099 eenn mmooddee EEIISSAA

 Les noyaux de version  anterieure  a  la  1.1.25  ne  detecteront  pas
 correctement   les   cartes  multiples  en  mode  EISA.  Si  plusieurs
 peripheriques eth_x sont indiques, la _m_e_m_e carte  3C509  sera  detectee
 plusieurs fois. La solution est de specifier l'adresse d'entree/sortie
 directement. Les noyaux de version ulterieure detecteront correctement
 plusieurs cartes en mode EISA, et detecteront aussi des cartes en mode
 ISA supplementaires, une fois  toutes  les  adresses  potentielles  de
 cartes en mode EISA testees.

      Don Becker, [email protected]