2014-01-30 18 views
34

Ich möchte mehr darüber erfahren, wie nl80211 und cfg80211 im Detail funktioniert. Funktionsablauf, wie nl80211 interagieren mit Netzwerk-Tools wie wpa_supplicant, iw.Wie nl80211 Bibliothek & cfg80211 arbeiten?

Plz schlagen mir einige nützliche Links oder Bücher zu verweisen.

+2

Diese Frage ist off-topic. Siehe [help/on-topic] – sigjuice

Antwort

46

Um Wireless-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.
  • Im Jahr 1996 erstellt Jean Tourrilhes wireless extensions (WE oder WEXT).

die Wireless Extension (WE) ist eine generische API ein Fahrer belichten die Benutzers Raumkonfiguration und Statistiken spezifisch für gemeinsamen Wireless LANs zu ermöglichen.

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

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

Ein wichtiger Punkt ist, dass nl80211/cfg80211/mac80211 nicht mehr ioctl verwenden, verwenden sie netlink.

So Tools wie iw, hostapd oder wpa_supplicant einige netlink Bibliotheken verwenden (wie libnl oder libnl-tiny) und die netlink öffentliche Schnittstelle Header, die nl80211.h natürlich ist.

Es gibt nicht so viele Dokumentationen, aber ich rate Ihnen, die libnl documentation und dann die iw source code (weil ich libnl verwenden) zu lesen.

+0

danke für den kurzen Überblick. – Rafal

+0

nl80211 fungiert als Schnittstelle zwischen Userspace und Kernelraum ..... ich habe Schwierigkeiten zu verstehen, an welcher Stelle der Kontrollfluss vom Userspace zum Kernelraum geht – Rafal

+0

Haben Sie [dies] gelesen (http: //www.carisma.slowglass .com/~ tgr/libnl/doc/core.html # core_netlink_fundamentals). Netlink kann mit einem Socket zwischen dem Kernel und dem Benutzerbereich verglichen werden. So kann der Benutzer es in einer Anfrage-Antwort-Weise (z.B. "iw dev wlan0 link") und/oder in einer Ereignisweise (z.B. "iw dev wlan0 event") verwenden. – jml

25

Ein etwas genaueres Bild davon, wie nl80211 und cfg80211 Arbeit mit anderen Teilen des Systems (user space, kernel und hardware).

  • nl80211 ist die Schnittstelle zwischen Anwender-Space-Software (iw, wpa_supplicant, etc.) und dem Kern (cfg80211 und mac80211 Kernel-Module und spezifischen Treiber).
  • Die WiFi-Treiber und die Hardware könnten Full-MAC oder Soft-MAC sein (siehe Wireless_network_interface_controller).
  • cfg80211_ops ist eine Reihe von Operationen, die Full-MAC-Treiber und mac80211 Modul zu cfg80211 Modul zu registrieren.
  • ieee80211_ops ist eine Reihe von Operationen, die Soft-MAC-Treiber auf mac80211 Modul registrieren.

enter image description here

+0

lspci -k | grep -A 3 -i "Netzwerk" gibt mir "Kernel-Treiber im Einsatz: iwlwifi" zurück. Dann modinfo iwlwifi | grep hängt mich zurück "cfg80211". Aber wie kann ich über nl80211 und mac80211 überprüfen. Woher weiß ich, ob der Treiber den AP-Modus unterstützt oder nicht? – infoclogged

4

Siehe meine Antwort auf How to learn the structure of Linux wireless drivers (mac80211)?

In wpa_supplicant, Sie den Code in src/drivers/driver_nl80211.c folgen kann. Dies ist ein wpa_supplicant-Treiber (kein Kernel-Treiber, sondern eine Abstraktion, die in wpa_supplicant-Code verwendet wird), die libnl verwendet, um mit dem Kernmodul cfg80211 zu kommunizieren. Wenn wpa_supplicant einen Scan zum Beispiel ausgibt, dann wird wpa_driver_nl80211_scan aufgerufen. Es erstellt die netlink Nachricht mit einem Befehl mit dem Namen NL80211_CMD_TRIGGER_SCAN und mit allen für den Scan erforderlichen Parametern.