Debian logo [inetdoc.LINUX]

2. Identification des interfaces disponibles

Avant de pouvoir configurer une interface, il faut que le pilote de périphérique correspondant ait été chargé en mémoire. Comme une interface réseau est un dispositif matériel, c'est au niveau du noyau Linux que l'opération doit s'effectuer. Soit le pilote d'interface a été inclu dans la partie monolithique du noyau soit il est chargeable sous forme de module. C'est cette dernière solution qui est le plus souvent retenue. Un module peut être chargé ou déchargé à volonté sans avoir à redémarrer la machine. De plus, les fonctions de reconnaissance automatique des composants périphériques permettent de ne charger que les modules correspondant aux composants effectivement présents sur le système.

2.1. Comment identifier le périphérique réseau ?

Il existe une grande variété de contrôleurs réseau Ethernet. À chaque composant correspond un pilote logiciel spécifique. Qu'il s'agisse d'une carte additionnelle ou d'un composant intégré sur la carte mère, le contrôleur est toujours un périphérique connecté au bus PCI. En mode console et à partir de la connexion super-utilisateur, la commande lspci du paquet pciutils donne la liste des périphériques reliés au bus PCI. Voici quelques exemples caractéristiques.

Identification de deux contrôleurs de marque Broadcom™ intégrés sur la carte mère d'un serveur rackable Dell™. On remarque, au niveau des deux dernières lignes d'informations sur les interfaces, que le module correspondant au contrôleur BCM5704 est baptisé tg3.

# lspci -v
<snip/>
15:02.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet
        Subsystem: Dell Unknown device 0170
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 64
        Memory at df2f0000 (64-bit, non-prefetchable) [size=64K]
        Expansion ROM at <ignored> [disabled]
        Capabilities: [40] PCI-X non-bridge device
        Capabilities: [48] Power Management version 2
        Capabilities: [50] Vital Product Data <?>
        Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
        Kernel driver in use: tg3
        Kernel modules: tg3

15:02.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet
        Subsystem: Dell Unknown device 0170
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 65
        Memory at df2e0000 (64-bit, non-prefetchable) [size=64K]
        Expansion ROM at <ignored> [disabled]
        Capabilities: [40] PCI-X non-bridge device
        Capabilities: [48] Power Management version 2
        Capabilities: [50] Vital Product Data <?>
        Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
        Kernel driver in use: tg3
        Kernel modules: tg3
<snip/>

Identification d'un contrôleur de marque Intel™. Comme dans l'exemple précédent, on remarque que les deux dernières lignes d'informations indiquent le nom du module correspondant au contrôleur 82572EI : e1000.

# lspci -v
<snip/>
0c:00.0 Ethernet controller: Intel Corporation 82572EI Gigabit Ethernet Controller (Copper)
        Subsystem: Intel Corporation PRO/1000 PT Server Adapter
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at fc4e0000 (32-bit, non-prefetchable) [size=128K]
        Memory at fc4c0000 (32-bit, non-prefetchable) [size=128K]
        I/O ports at ece0 [size=32]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
        Capabilities: [e0] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting <?>
        Capabilities: [140] Device Serial Number a9-9b-19-ff-ff-17-15-00
        Kernel driver in use: e1000
        Kernel modules: e1000
<snip/>

2.2. Comment identifier le pilote logiciel ?

Comme précisé plus haut, les contrôleurs réseau utilisent des composants matériel. On retrouve donc les informations sur l'initialisation des interfaces réseau dans les messages relatifs au lancement du système d'exploitation. La commande historique dmesg (dump messages) permet d'afficher tous les messages systèmes à la console. Pour isoler les parties relatives aux interfaces réseau, on filtre cet affichage avec la commande grep en recherchant des mots clés particuliers : noms de modules, noms d'interfaces, noms de marques, etc.

Exemple de recherche basée sur le nom du module logiciel de pilotage de l'interface :

# dmesg |grep e1000
e1000: 0000:0c:00.0: e1000_probe: (PCI Express:2.5Gb/s:Width x1) 00:15:17:19:9b:a9
e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection

Exemple de recherche basée sur la marque du composant contrôleur réseau :

# dmesg |grep -i broadcom
Broadcom NetXtreme II Gigabit Ethernet Driver bnx2 v1.6.9 (December 8, 2007)
eth0: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at \
      mem f4000000, IRQ 16, node addr 00:1a:a0:01:f0:32
eth2: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at \
      mem f8000000, IRQ 16, node addr 00:1a:a0:01:f0:30

Avec un peu plus d'expérience, on peut naviguer dans les menus de configuration du noyau Linux et consulter le catalogue des interfaces réseau disponibles par catégories de liaisons. Pour les interfaces gigabit Ethernet, on obtient la liste suivante :

2.3. Comment charger et valider le pilote logiciel ?

Avec une distribution GNU/Linux moderne, le chargement des modules de pilotage des interfaces réseau se fait automatiquement. Il s'agit justement d'un point fort du noyau Linux ; il ne charge en mémoire que les pilotes correspondant aux composants effectivement présents sur le système. Cette section présente les opérations manuelles de chargement et déchargement de pilote de contrôleur réseau.

Le chargement manuel d'un module s'effectue avec la commande modprobe et la validation du résultat avec les commandes dmesg et ifconfig. De plus, on peut vérifier la présence du pilote dans la liste des modules chargé avec la commande lsmod.

[Avertissement] Avertissement

Pour tester les manipulations ci-dessous à partir d'une configuration déjà établie, il faut :

  • désactiver la configuration de l'interface : /etc/init.d/networking stop,

  • retrouver le pilote de l'interface dans la liste des modules : lsmod,

  • décharger le module pilote de cette même interface : rmmod <module_carte>,

  • Attention ! lors du (re)chargement du module pilote de l'interface, les scripts de configuration de l'interface sont automatiquement relancés. Le système effectue une opération identique à la commande : /etc/init.d/networking start.

Enfin, si le pilote de carte est chargé dans la partie monolithique du noyau, toute manipulation de module est impossible.

En reprenant l'exemple du contrôleur de marque Intel™, on peut effectuer les manipulations suivantes :

  • Identification du module et relevé du nom de l'interface : eth1

    # dmesg |grep e1000
    e1000: 0000:0c:00.0: e1000_probe: (PCI Express:2.5Gb/s:Width x1) 00:15:17:19:9b:a9
    e1000: eth2: e1000_probe: Intel(R) PRO/1000 Network Connection
    
  • Interface non configurée : sans indicateur UP et sans adresse IP.

    # ifconfig eth1
    eth2      Link encap:Ethernet  HWaddr 00:15:17:19:9b:a9
              BROADCAST MULTICAST  MTU:1500  Metric:1
    <snip/>
    
  • Déchargement du module de pilotage de l'interface.

    # modprobe -rv e1000
    rmmod /lib/modules/2.6.24.3/kernel/drivers/net/e1000/e1000.ko
    
  • Chargement du module de pilotage de l'interface.

    # modprobe -v e1000
    insmod /lib/modules/2.6.24.3/kernel/drivers/net/e1000/e1000.ko
    
  • Consultation des messages systèmes avec la commande dmesg.

    ACPI: PCI Interrupt 0000:0c:00.0[A] -> GSI 16 (level, low) -> IRQ 16
    PCI: Setting latency timer of device 0000:0c:00.0 to 64
    e1000: 0000:0c:00.0: e1000_probe: (PCI Express:2.5Gb/s:Width x1) 00:15:17:19:9b:a9
    e1000: eth2: e1000_probe: Intel(R) PRO/1000 Network Connection
    

2.4. Comment visualiser l'état du lien ?

Même avec une configuration correcte de l'interface, il est possible que les communications soient bloquées si le lien physique entre l'hôte et l'équipement réseau n'est pas actif. Sur les liaisons utilisant des câbles en paires torsadées cuivre, on peut visualiser l'état du lien à l'aide de la commande mii-tool.

# mii-tool -v
eth0: negotiated 1000baseT-FD flow-control, link ok1
  product info: vendor 00:08:18, model 54 rev 6
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD2
  advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
  link partner: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD3

1

Le lien entre l'interface eth0 et l'équipement réseau est actif et le débit négocié est de 1000Mbps en mode Full-Duplex avec contrôle de flux.

2

Les débits possibles sur cette interface sont : 1000Mbps en mode Full-Duplex, 100Mbps en mode Full-Duplex, 100Mbps en mode Half-Duplex, 10Mbps en mode Full-Duplex et 10Mbps en mode Half-Duplex.

3

Les débits offerts par l'équipement réseau sont identiques à ceux disponibles sur l'interface de l'hôte.

Pour aller plus loin dans l'étude des caractéristiques techniques des réseaux locaux, il est conseillé de lire l'article Technologie Ethernet.