Je travaille sur une carte embarquée personnalisée avec trois interfaces Ethernet :
- eth0 et eth1 sont intégrés au CPU (un TI AM3356)
- eth2 est réalisé avec une puce LAN9512 intégrée (en utilisant le pilote smsc95xx), connectée par USB.
Au démarrage, je veux faire apparaître eth0 et eth1. sans une adresse IP (ils sont utilisés pour l'Ethernet industriel), et faire apparaître eth2 avec une adresse IP (elle est utilisée pour la communication réseau standard).
Mon /etc/network/interfaces
ressemblait à l'origine à ceci :
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
pre-up ifconfig $IFACE up
post-down ifconfig $IFACE down
auto eth1
iface eth1 inet manual
pre-up ifconfig $IFACE up
post-down ifconfig $IFACE down
auto eth2
iface eth2 inet static
address 10.1.1.10
netmask 255.255.255.0
gateway 10.1.1.20
Cela fait apparaître les trois interfaces réseau (et la carte de bouclage), mais n'affecte pas l'adresse IP spécifiée à eth2.
En regardant dans le bootlog, j'obtiens le message
ip : Impossible de trouver le périphérique 'eth2'.
...et juste après, un message du pilote smsc95xx indiquant qu'il a enregistré eth2. Je présume donc que c'est parce que eth2 n'est pas disponible lorsque le script d'init tente de lui attribuer l'adresse IP (mais apparaît juste après).
Si je le fais ifup eth2
une fois que la carte est démarrée, l'adresse IP est correctement attribuée automatiquement.
J'ai essayé de bidouiller avec quelques pre-up
et ce qui suit semble fonctionner parfaitement :
auto eth2
iface eth2 inet static
address 10.1.1.10
netmask 255.255.255.0
gateway 10.1.1.20
pre-up while [ ! -e /sys/class/net/eth2 ]; do sleep 1; done;
Mais cela ressemble trop à un piratage (et bloquera également le système si eth2 n'apparaît jamais).
Existe-t-il un moyen "correct" pour que l'attribution d'IP attende que l'interface soit réellement présente ? - ou dois-je créer un script personnalisé pour y parvenir ?
Notez que je travaille sur un Linux embarqué (noyau 3.18.9-rt5, construit avec PTXDist), en utilisant BusyBox, donc je n'ai peut-être pas accès à tous les outils sophistiqués qui sont disponibles.