Wie funktionieren die Bibliothek nl80211 und cfg80211?

Lesezeit: 3 Minuten

Benutzeravatar von Rafal
Raffael

Ich möchte lernen, wie nl80211 und cfg80211 arbeitet ausführlich. Funktionsablauf, wie nl80211 interagieren mit Netzwerk-Tools wie wpa_supplicant, iw.

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

  • Diese Frage ist off-topic. Siehe Hilfecenter

    – Sigissaft

    18. März 2017 um 6:27 Uhr


Benutzeravatar von jmlemetayer
jmlmetayer

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

  • Anfangs ioctl mit herstellerabhängigen APIs verwendet.
  • 1996 kreiert Jean Tourrilhes drahtlose Erweiterungen (WIR oder WEXT).

Die Wireless Extension (WE) ist eine generische API, die es einem Treiber ermöglicht, die Konfiguration des Benutzerbereichs und Statistiken zu zeigen, die für gängige Wireless LANs spezifisch sind.

  • 2006 kreiert John Linville mac80211 und Johannes Berg kreiert cfg80211 und nl80211. Zusammen soll es drahtlose Nebenstellen ersetzen.

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

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

Also Werkzeuge wie iw, hostapd oder der wpa_supplicant Verwenden Sie einige Netlink-Bibliotheken (wie z libnl oder libnl-winzig) und den öffentlichen Header der Netlink-Schnittstelle, der natürlich ist nl80211.h.

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

  • nl80211 fungiert als Schnittstelle zwischen Userspace und Kernelspace. Ich habe Schwierigkeiten zu verstehen, an welchem ​​​​Punkt der Kontrollfluss vom Userspace zum Kernelspace geht

    – Raffal

    3. Februar 2014 um 4:15 Uhr

  • Hast du gelesen Dies. Netlink kann mit einem Socket zwischen dem Kernel und dem User Space verglichen werden. So kann der Benutzer es auf Anfrage-Antwort-Weise verwenden (z iw dev wlan0 link) und/oder auf Event-Weise (zB iw dev wlan0 event).

    – jmlemetayer

    3. Februar 2014 um 10:33 Uhr

  • danke für den Link, aber ich habe diese Seite durchgesehen … für die Interaktion zwischen Benutzer und Kernel-Space wird ein Socket erstellt … aber wenn es darum geht, den Code zu verfolgen, kann ich ihn nicht vom User-Space zum Kernel-Space verfolgen ….wenn jemand helfen kann, antworten Sie bitte bald

    – Raffal

    4. Februar 2014 um 4:58 Uhr

  • Sie können in der suchen linux-wireless-Mailingliste oder versuchen Sie sogar, sie zu fragen. Wenn Sie eine Antwort erhalten haben, posten Sie sie bitte, ich bin sehr daran interessiert und habe jetzt nicht genug Zeit dafür!

    – jmlemetayer

    4. Februar 2014 um 6:35 Uhr

  • ^ Link ist tot, hier ist eine archivierte Version: web.archive.org/web/20160316163624/http://…

    – Schurke

    29. April 2019 um 15:49 Uhr

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

  • nl80211 ist die Schnittstelle zwischen Userspace-Software (iw, wpa_supplicantusw.) und der Kernel (cfg80211 und mac80211 Kernel-Module und spezifische Treiber).
  • Die WLAN-Treiber und -Hardware können 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 anmelden cfg80211 Modul.
  • ieee80211_ops ist eine Reihe von Operationen, bei denen sich Soft-MAC-Treiber registrieren mac80211 Modul.

Geben Sie hier die Bildbeschreibung ein

  • lspci -k | grep -A 3 -i “network” gibt mir “Kernel driver in use: iwlwifi” zurück. Dann modinfo iwlwifi | grep hängt davon ab, gibt mir “cfg80211” zurück. Aber wie kann ich nach nl80211 und mac80211 suchen. Woher weiß ich auch, ob der Treiber den AP-Modus unterstützt oder nicht?

    – Informationen verstopft

    19. März 2017 um 12:56 Uhr


Benutzeravatar von eyalsh
eyalsch

Siehe meine Antwort auf How to Learn the Structure of Linux Wireless Drivers (mac80211)?

Im wpa_supplicantkönnen Sie dem Code folgen src/drivers/driver_nl80211.c. Dies ist ein wpa_supplicant-Treiber (kein Kernel-Treiber, sondern eine Abstraktion, die in wpa_supplicant Code), der verwendet libnl mit dem Kernel zu kommunizieren cfg80211 Modul. Wann wpa_supplicant gibt dann zum Beispiel einen Scan aus wpa_driver_nl80211_scan wird angerufen. Es baut die netlink Nachricht mit einem aufgerufenen Befehl NL80211_CMD_TRIGGER_SCAN und mit allen für den Scan erforderlichen Parametern.

Ich habe ein grundlegendes Code-Flussdiagramm für den Wireless-Stack in Linux erstellt,
den ganzen Weg von wpa_supplicant > cfg80211 > mac80211 > ath9k_htc.

Der Code wurde für den Linux-Kernel 5.4.31 verfolgt.

Hier ist der Verknüpfung.

1408650cookie-checkWie funktionieren die Bibliothek nl80211 und cfg80211?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy