Je veux savoir comment nl80211
et cfg80211
travaille en détail. Flux de fonctions, comment nl80211
interagir avec des outils réseau comme wpa_supplicant
, iw
.
Veuillez me suggérer des liens utiles ou des livres à consulter.
Pour pouvoir contrôler les pilotes sans fil à partir de l'espace utilisateur, certains processus de communication IPC entre le noyau et l'espace utilisateur sont utilisés).
ioctl
avec des API dépendantes du fournisseur a été utilisé.L'extension sans fil (WE) est une API générique permettant à un pilote d'exposer à la configuration de l'espace utilisateur et aux statistiques spécifiques aux réseaux locaux sans fil courants.
En 2006, John Linville crée mac80211 et Johannes Berg crée cfg80211 et nl80211 . Ensemble, il est destiné à remplacer les extensions sans fil.
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
Un point important est que nl80211/cfg80211/mac80211 n'utilise plus ioctl, ils utilisent netlink .
Ainsi, des outils tels que iw , hostapd ou wpa_supplicant utilisent certaines bibliothèques netlink (comme libnl ou libnl-tiny ) et l'en-tête public de l'interface netlink qui est bien sûr nl80211.h .
Il n'y a pas tellement de documentations, mais je vous conseille de lire la documentation libnl puis le iw source code (car iw use libnl).
Une image un peu plus détaillée de la façon dont nl80211
et cfg80211
fonctionne avec d'autres parties du système (user space
, kernel
et hardware
).
nl80211
est l'interface entre les logiciels de l'espace utilisateur (iw
, wpa_supplicant
, etc.) et le noyau (cfg80211
et mac80211
modules du noyau et pilotes spécifiques).cfg80211_ops
est un ensemble d'opérations que les pilotes Full-MAC et mac80211
module s'inscrire à cfg80211
module.ieee80211_ops
est un ensemble d'opérations que les pilotes Soft-MAC enregistrent sur mac80211
module.Voir ma réponse à Comment apprendre la structure des pilotes sans fil Linux (mac80211)?
Dans wpa_supplicant
, vous pouvez suivre le code dans src/drivers/driver_nl80211.c
. Il s'agit d'un pilote wpa_supplicant (pas un pilote de noyau mais une abstraction utilisée dans wpa_supplicant
code) qui utilise libnl
pour communiquer avec le noyau cfg80211
module. Quand wpa_supplicant
émet un scan par exemple puis wpa_driver_nl80211_scan
est appelé. Il crée le message netlink
avec une commande appelée NL80211_CMD_TRIGGER_SCAN
et avec tous les paramètres requis pour le scan.