web-dev-qa-db-fra.com

Comment fonctionnent les bibliothèques NL80211 et CFG80211?

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.

43
Rafal

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).

  • Au début, ioctl avec des API dépendantes du fournisseur a été utilisé.
  • En 1996, Jean Tourrilhes crée extensions sans fil (WE ou WEXT).

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).

58
jml

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).
  • Les pilotes et le matériel WiFi peuvent être Full-MAC ou Soft-MAC (voir Wireless_network_interface_controller ).
  • 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.

enter image description here

33
artm

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.

5
eyalsh