  Mini-HOWTO Machines Multi-Ethernet
  Don Becker, becker@cesdis.gsfc.nasa.gov
  5 aout 1995

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

  11..  IInnttrroodduuccttiioonn

  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.

  22..  LLeess ddiiffffeerreenntteess ssoolluuttiioonnss

  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.

  33..  TTrraannssmmeettttrree ddeess ppaarraammeettrreess aauu nnooyyaauu

  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.
     IIRRQQ
        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.

     aaddrreessssee--EE//SS
        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.

     ppaarraamm11,,ppaarraamm22
        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.

     nnoomm
        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.

  33..11..  CCoonnffiigguurreerr vvoottrree cchhaarrggeeuurr

  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.

  44..  MMooddiiffiieerr llee nnooyyaauu

  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.

  55..  NNootteess ssuurr llaa ddeetteeccttiioonn ddee qquueellqquueess ccaarrtteess ppaarrttiiccuulliieerreess

  55..11..  CCaarrtteess LLaannccee//PPCCNNEETT

  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.

  55..22..  LLaa 33CC550099 eenn mmooddee IISSAA

  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.

  55..33..  LLaa 33CC557799 EEIISSAA eett llaa 33CC550099 eenn mmooddee EEIISSAA

  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, becker@cesdis.gsfc.nasa.gov

