it-swarm.com.de

Wie funktioniert die Bibliothek nl80211 & cfg80211?

Ich möchte erfahren, wie nl80211 und cfg80211 arbeitet im Detail. Funktionsablauf, wie nl80211 Interagiere mit Netzwerkwerkzeugen wie wpa_supplicant, iw.

Bitte schlagen Sie mir einige nützliche Links oder Bücher vor, auf die ich verweisen kann.

43
Rafal

Um drahtlose Treiber vom Userspace aus steuern zu können, werden einige IPC Kommunikationsprozesse zwischen Kernel und Userspace verwendet.

  • Zunächst wurde ioctl mit herstellerabhängigen APIs verwendet.
  • 1996 erstellt Jean Tourrilhes drahtlose Erweiterungen (WE oder WEXT).

Die Wireless Extension (WE) ist eine generische API, mit der ein Treiber die Konfiguration des Benutzerbereichs und Statistiken für gängige Wireless LANs anzeigen kann.

  • Im Jahr 2006 erstellt John Linville mac80211 und Johannes Berg cfg80211 und nl80211 . Zusammen soll es drahtlose Erweiterungen ersetzen.

    +-------------+
    |             |
    |  Userspace  |
    |             |
    +-------------+
          ^
    - - - | - - - - 
          | nl80211
          v
    +-------------+
    |             |
    |  cfg80211   |
    |             |
    +-------------+
    +-------------+
    |             |
    |  mac80211   |
    |   driver    |
    |             |
    +-------------+
    

Ein wichtiger Punkt ist, dass nl80211/cfg80211/mac80211 ioctl nicht mehr verwendet, sondern netlink .

Daher verwenden Tools wie iw , hostapd oder wpa_supplicant einige Netlink-Bibliotheken (wie libnl oder libnl-tiny ) und der öffentliche Header der Netlink-Schnittstelle, natürlich nl80211.h .

Es gibt nicht so viele Dokumentationen, aber ich rate Ihnen, die libnl-Dokumentation und dann die iw-Quellcode (weil ich libnl verwende) zu lesen.

58
jml

Ein etwas detaillierteres Bild davon, wie nl80211 Und cfg80211 Mit anderen Teilen des Systems arbeiten (user space, kernel und hardware) .

  • nl80211 Ist die Schnittstelle zwischen User-Space-Software (iw, wpa_supplicant Usw.) und den Kernel-Modulen (cfg80211 Und mac80211) und bestimmte Treiber).
  • Die WLAN-Treiber und -Hardware können Full-MAC- oder Soft-MAC-Treiber sein (siehe Wireless_network_interface_controller ).
  • cfg80211_ops Ist eine Reihe von Vorgängen, die von Full-MAC-Treibern und dem Modul mac80211 Im Modul cfg80211 Registriert werden.
  • ieee80211_ops Ist eine Reihe von Vorgängen, die von Soft-MAC-Treibern im Modul mac80211 Registriert werden.

enter image description here

33
artm

Siehe meine Antwort auf Wie lerne ich die Struktur von Linux-Wireless-Treibern (mac80211)?

In wpa_supplicant Können Sie dem Code in src/drivers/driver_nl80211.c Folgen. Dies ist ein wpa_supplicant-Treiber (kein Kernel-Treiber, sondern eine im wpa_supplicant - Code verwendete Abstraktion), der libnl verwendet, um mit dem Kernel-Modul cfg80211 Zu kommunizieren. Wenn beispielsweise wpa_supplicant Einen Scan ausführt, wird wpa_driver_nl80211_scan Aufgerufen. Es erstellt die Nachricht netlink mit einem Befehl namens NL80211_CMD_TRIGGER_SCAN Und mit allen für den Scan erforderlichen Parametern.

5
eyalsh