[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Plusieurs cartes réseaux, 1 seule pluguée : comment la configurer sur eth0?



Bonjour,

Lors d'un précédent mail (http://lists.debian.org/debian-user-french/2004/debian-user-french-200403/msg00252.html) je recherchais la solution au problème exposé dans le titre de ce mail : - soit une machine possédant plusieurs cartes réseaux fonctionnant sur les modules éventuellement différents
- 1 seule carte réseau est reliée au réseau

-> comment faire pour que cette carte réseau soit associée à l'interface eth0???

En effet, ces associations sont définies dans /etc/modules.conf (ou plus proprement dans un fichier /etc/modutils/network qui défini les alias vers les cartes réseaux suivu d'un 'update-modules')
par exemple :

$> cat /etc/modutils/network
# Chargement des modules de cartes
# Cas le plus courant
alias eth0 tg3
# Autre Carte alias eth1 e1000


En fait, comme on m'a répondu alors,
"Indépendament des alias définis dans modules.conf, linux nomme les interface eth0, eth1, etc dasn l'ordre où les modules sont chargés" Pour etre exact, il me semble que l'ordre donné dans /etc/modules.conf est respecté au boot mais si ensuite son s'amuse a remover les modules inséré ('rmmod tg3 e1000') et a les insérer à nouveau, alors l'ordre des interfaces suivra l'ordre des chargements de modules ('insmod e1000' suivi d'un 'insmod tg3' configurera eth0 sur e1000 et eth1 sur tg3, contrairement au fichier /etc/modules.conf)

En oubliant cela, avec la config decrite plus haut, si la carte e1000 est pluguée et qu'on ne fait rien, elle sera associée à l'interface eth1...
On m'a proposer pas mal d'idées :
- l'utilisation de nameif "qui permet de donner un nom à la carte en fonction de son adresse MAC" mais cela s'appliquait difficilement a mon cas,

- l' "ethernet bonding" qui consiste a
coupler tes deux interfaces sur le meme reseau pour n'en former qu'une seule et
unique. Ainsi si une de tes cartes montre des faiblesses, la seconde est
toujours la pour assurer le service. Ce concept avait l'air interessant mais semblait trop dépendant du matos utilisé.

Pour m'en sortir, j'ai créé le script suivant.
Ce script, a placer dans /etc/rcS.d/ découvre les cartes réseaux présentes sur votre système, détecte celle qui est pluggué
charge le module associé et l'associe à l'interface eth0.

Si aucune carte n'est plugguée, et bien il n'y aura pas d'interface eth0...
Dans la prochaine version du script, les interfaces non plugguées seront associées aux interfaces suivantes eth1, eth2 etc...
Si ca peut vous servir....
Remarques bienvenues.

------------------------------8<---------------------------------------------

#! /bin/sh

################################################################
# Fichier : initMultiNIConeth0
# Auteur : Sebastien Varrette <-----8<----Sebastien.Varrette-----8<----@imag.fr>
# 05 Mar 2004
#
# Description : Initialisation de l'interface eth0 sur la carte
# reseau qui est reellement pluguee
#
# Contexte : une machine possedant 1 ou plusieurs cartes reseaux
# dont une seule est pluguee. Le but de ce script est de configurer
# l'interface eth0 sur cette carte.
# Il y a découverte automatique des cartes réseaux présentes et
# des modules  associés
# J'ai personnellement placé ce script dans /etc/init.d/  avec un
# lien dessus dans /etc/rcS.d/S36.... #
################################################################
# Version du script
version=0.1

#################################################################
# Verifie que les executables passes en argument sont presents
# Interface :
#    $@ contient une liste de binaire dont on verifie la presence
#################################################################
check_bin() {
   for BIN in $@; do
   if [ -z `which $BIN` ]; then
       echo "*** Error : command $BIN is required but unavailable ***"
       echo "You should run 'apt-get install $BIN'"
exit 1 fi
   done
}

#####################################################
# Verifie si l'interface eth0 est pluguee ou non
# A ce niveau, ethtool doit fonctionner correctement
#####################################################
checkPlugged() {
   PLUG=`ethtool eth0 | grep detected | cut -d ' ' -f 3`
   echo "check plug status for card $MODULE... $PLUG"
if [ $PLUG = "yes" ]; then exit 1
   fi
}


#################################
# Affichage du mode d'utilisation
#################################
print_usage() {
   echo "Usage : initMultiNIConeth0"
   echo "        initMultiNIConeth0 -h"
   echo "Available Options : "
   echo "        -h : affiche l'aide"
}

#####################
# Affichage de l'aide
#####################
print_help() {
echo "--------------------------------------------------------------------" echo "initMultiNIConeth0 : Initialization of interface eth0 on the network"
   echo "card which is really plugged"
   echo "Author : Sebastien Varrette <Sebastien.Varrette@imag.fr>"
   echo "Version : $version"
echo "Context : a machine with one or more NIC and only one of them is plugged" echo " This script loads the correct module and associates it to eth0"
   print_usage
echo "--------------------------------------------------------------------"
}

##################### --- Debut du script --- ###################

if [ $# -ge 1 ]; then
   case $1 in
   -h*) print_help
       exit 1;;
start|stop);; *) print_usage
       exit 1;;
esac shift
fi

# Verification des commandes requises
check_bin discover ethtool

# on liste les cartes reseaux disponibles et les modules associes
echo "Discover network cards and associated modules..."
MODULE_LIST=`/sbin/discover --enable=pci -f "%m " ethernet`

# on supprime les modules qui sont eventuellement deja initialises
echo "Remove network modules previously loaded"
rmmod $MODULE_LIST 2>/dev/null

# Pour chaque module, on l'insere et on verifie si la carte associe est
# pluguee. Si oui, on est super content et on sort
for MODULE in $MODULE_LIST; do
   echo "Load module $MODULE"
   insmod $MODULE
   # On doit charger le mode inet par ifconfig pour que ethtool marche
   ifconfig eth0 inet up
   # il faut attendre un peu le temps que ifconfig ait configure eth0
   sleep 4
   checkPlugged
   ifconfig eth0 down
   rmmod $MODULE
done

------------------------------8<---------------------------------------------


--
Sébastien VARRETTE

------------------------------------------

#! /bin/sh

################################################################
# Fichier : initMultiNIConeth0
# Auteur : Sebastien Varrette <Sebastien.Varrette@imag.fr>
# 05 Mar 2004
#
# Description : Initialisation de l'interface eth0 sur la carte 
# reseau qui est reellement pluggue
#
# Contexte : une machine possedant 1 ou plusieurs cartes reseaux
# dont une seule est pluguee. Le but de ce script est de configurer 
# l'interface eth0 sur cette carte. 
# Il y a découverte automatique des cartes réseaux présentes et 
# des modules  associés
# J'ai personnellement placé ce script dans /etc/init.d/  avec un 
# lien dessus dans /etc/rcS.d/S36....   
#
################################################################
# Version du script
version=0.1

#################################################################
# Verifie que les executables passes en argument sont presents
# Interface : 
#    $@ contient une liste de binaire dont on verifie la presence
#################################################################
check_bin() {
    for BIN in $@; do
	if [ -z `which $BIN` ]; then
	    echo "*** Error : command $BIN is required but unavailable ***"
	    echo "You should run 'apt-get install $BIN'"
	    exit 1	    
	fi
    done
}

#####################################################
# Verifie si l'interface eth0 est pluguee ou non
# A ce niveau, ethtool doit fonctionner correctement
#####################################################
checkPlugged() {
	PLUG=`ethtool eth0 | grep detected | cut -d ' ' -f 3`
	echo "check plug status for card $MODULE... $PLUG"
	if [ $PLUG = "yes" ]; then  
		exit 1
	fi
}


#################################
# Affichage du mode d'utilisation
#################################
print_usage() {
    echo "Usage : initMultiNIConeth0"
    echo "        initMultiNIConeth0 -h"
    echo "Available Options : "
    echo "        -h : affiche l'aide"
}

#####################
# Affichage de l'aide
#####################
print_help() {
    echo "--------------------------------------------------------------------"
    echo "initMultiNIConeth0 : Initialization of interface eth0 on the network" 
    echo "card which is really plugged"
    echo "Author : Sebastien Varrette <Sebastien.Varrette@imag.fr>"
    echo "Version : $version"
    echo "Context : a machine with one or more NIC and only one of them is plugged"
    echo "    This script loads the correct module and associates it to eth0"
    print_usage
    echo "--------------------------------------------------------------------"
}

##################### --- Debut du script --- ###################

if [ $# -ge 1 ]; then 
    case $1 in
	-h*) print_help
	    exit 1;;
	start|stop);;  
	*)  print_usage
	    exit 1;;
    esac    
    shift
fi

# Verification des commandes requises
check_bin discover ethtool

# on liste les cartes reseaux disponibles et les modules associes
echo "Discover network cards and associated modules..."
MODULE_LIST=`/sbin/discover --enable=pci -f "%m " ethernet`

# on supprime les modules qui sont eventuellement deja initialises
echo "Remove network modules previously loaded"
rmmod $MODULE_LIST 2>/dev/null

# Pour chaque module, on l'insere et on verifie si la carte associe est 
# pluguee. Si oui, on est super content et on sort
for MODULE in $MODULE_LIST; do
	echo "Load module $MODULE"
	insmod $MODULE
	# On doit charger le mode inet par ifconfig pour que ethtool marche
	ifconfig eth0 inet up
	# il faut attendre un peu le temps que ifconfig ait configure eth0
	sleep 4
	checkPlugged
	ifconfig eth0 down
	rmmod $MODULE
done

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


Reply to: