La mise en oeuvre de la partie matérielle du réseau (détection des cartes réseaux, chargement des drivers et firmwares)s'effectue normalement de façon automatique.
A l'issue de cette étape, un identifiant de la forme eth0 ou wlan0 est attribué à chaque interface et sera utilisé dans les opérations de configuration (dhcp, ... ) qui suivent.>
En cas de problème, tel que matériel, driver ou firmware non reconnu ou non disponible, la mise en oeuvre automatique échoue et une intervention manuelle est nécessaire.
Si le matériel est reconnu, les drivers et firmwares sont disponibles, la détection s'effectue automatiquement. La liste des interfaces est disponible dans le répertoire /sys/class/net
$ ls /sys/class/net/ eth0 lo wlan0
eth0 et wlan0 sont en fait des liens à partir desquels il est possible d'obtenir des informations sur la nature de la carte : pci, usb, pcmcia, ...
$ ls -la /sys/class/net total 0 lrwxrwxrwx 1 root root 0 oct. 2 20:04 eth0 -> ../../devices/pci0000:00/0000:00:1c.5/0000:05:00.0/net/eth0 lrwxrwxrwx 1 root root 0 oct. 2 20:04 lo -> ../../devices/virtual/net/lo lrwxrwxrwx 1 root root 0 oct. 2 20:04 wlan0 -> ../../devices/pci0000:00/0000:00:1c.1/0000:03:00.0/net/wlan0
Dans le cas présent, trois interfaces sont présentes : lo, eth0 et wlan0. lo (boucle locale) n'est pas une interface physique. Il reste donc deux interfaces matérielles eth0 et wlan0. Les cartes réseau eth0 et wlan0 sont des cartes pci situées respectivement aux adresses pci 05:00.0 et 03:00.0
lspci permet d'obtenir des informations détaillées sur la carte
$ lspci -s 00:05.0 -nnk 00:05.0 Ethernet controller [0200]: Intel Corporation 82540EM Gigabit Ethernet Controller [8086:100e](rev 02) Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter [8086:001e] Kernel driver in use: e1000
Pour la carte eth0, ci-dessus, d'adresse 00.05.0, on obtient les informations suivantes :
Dans le cas d'une carte aux formats usb ou pcmcia, on utilisera les commandes lsusb, lspcmcia ....
modinfo fournit des informations détaillées sur le module et ses firmwares :
# modinfo e1000
filename: /lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
version: 7.3.21-k8-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
......
# modinfo iwl3945
filename: /lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko
firmware: iwlwifi-3945-2.ucode
license: GPL
Si la tentative de détection ou de chargement automatique a échoué, l'interface n’apparaît pas dans /sys/class/net. La méthode générale pour y remédier consiste alors à
Plusieurs commandes permettent de détecter et identifier les cartes présentes :
# discover --vendor-id --model-id -t network -v Loading XML data... ata pci pcmcia scsi usb Done 8086 100e Intel Corporation 82540EM Gigabit Ethernet Controller
Dans le cas présent, les codes constructeurs et de modèle sont 8086 (intel) et 100E.
# discover --vendor-id --model-id -t network -d all -e pci 8086 100e Intel Corporation 82540EM Gigabit Ethernet Controller
Dans le cas présent, l'essai avec le format pci est concluant.
# lspci -k -nn |grep -i net
00:03.0 Ethernet controller [0200]: Intel Corporation 82540EM Gigabit Ethernet Controller [8086:100e] (rev 02)
Une fois la carte identifiée, rechercher le module correspondant dans le fichier modules.alias, à l'aide des identifiants de constructeur et de modèle :
$ cat /lib/modules/$(uname -r)/modules.alias | grep -i 8086| grep -i 100E alias pci:v00008086d0000100Esv*sd*bc*sc*i* e1000
Le nom du driver est e1000.
Vérifier que le module est présent dans /lib/modules
$ find /lib/modules -name e1000.ko
/lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
Si le module n'est pas présent, rechercher, avec apt-file ou directement sur le site de debian https://www.debian.org/distrib/packages#search_contents , si un paquet fournissant ce module est disponible :
# aptitude install apt-file
# apt-file update
$ apt-file search e1000.ko |grep -E $(uname -r)
linux-image-4.8.0-0.bpo.2-amd64: /lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
linux-image-4.8.0-0.bpo.2-amd64-dbg: /usr/lib/debug/lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
linux-image-4.8.0-0.bpo.2-amd64-unsigned: /lib/modules/4.8.0-0.bpo.2-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
Dans le cas général, comme ci-dessus, le module est présent et provient du paquet qui a installé le noyau :linux-image-$(uname -r). Dans certains cas, les modules propriétaires en particulier, les modules doivent être installés par des paquets spécifiques. Si le nom du paquet est indiqué et le module non installé, installer le paquet.
Certains paquets, en particulier les modules dkms doivent être installé à partir des sources. Leur liste peut-être obtenue avec avec
$ apt-cache rdepends module-assistant |sort
bbswitch-source
bbswitch-source
broadcom-sta-common
broadcom-sta-common
broadcom-sta-common
broadcom-sta-source
.......
Installer le module
# modprobe iwlwifi
Certains périphériques nécessitent le chargement de firmware. S'ils sont installés, ils sont automatiquement chargés par le module. Sinon, un message d'erreur est affichée par le noyau.
$ dmesg |grep firmware
[ 96.992075] iwl3945 0000:0c:00.0: firmware: failed to load iwlwifi-3945-2.ucode (-2)
[ 96.992081] iwl3945 0000:0c:00.0: Direct firmware load failed with error -2
Dans le cas présent, le chargement du firmware iwlwifi-945-2ucode par le module iwl3945 a échoué.
$ apt-file search iwlwifi-3945-2.ucode
firmware-iwlwifi: /lib/firmware/iwlwifi-3945-2.ucode
$ apt-cache policy firmware-iwlwifi
firmware-iwlwifi:
Installé : (aucun)
Candidat : 0.43
Table de version :
20160110-1~bpo8+1 0
100 http://httpredir.debian.org/debian/ jessie-backports/non-free amd64 Packages
0.43 0
500 http://httpredir.debian.org/debian/ jessie/non-free amd64 Package
# aptitude install -t jessie-backports firmware-iwlwifi
Les firmwares sont désormais installés :
# updatedb
$ locate /lib/firmware |grep iwlwifi
/lib/firmware/iwlwifi-100-5.ucode,
/lib/firmware/iwlwifi-1000-5.ucode
.....
Si les firmwares n'ont pas été chargés automatiquement à l'étape précédente, décharger / charger le module, ce qui a pour effet de charger les firmwares ou bien redémarrer le PC.
# modprobe -r iwlwifi && modprobe iwlwifi
L'adresse mac est disponible dans le fichier /sys/class/net/nom_de_l'interface/address.
Adresse de l'interface filaire eth0
$ cat /sys/class/net/eth0/address c8:60:00:b9:28:aa