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]