Ich möchte lernen, wie nl80211
Und cfg80211
Arbeit im Detail, wie zum Beispiel: Funktionsablauf und wie nl80211
interagiert mit Netzwerk-Tools wie wpa_supplicant
Und iw
.
Wie funktionieren die nl80211-Bibliothek und cfg80211?
Raffael
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 Benutzerbereichskonfiguration und -statistiken offenzulegen, 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 benutze).
-
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 Das. 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 (zBiw 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
, kernel
Und hardware
).
nl80211
ist die Schnittstelle zwischen Userspace-Software (iw
,wpa_supplicant
usw.) und der Kernel (cfg80211
Undmac80211
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 undmac80211
Modul anmeldencfg80211
Modul.ieee80211_ops
ist eine Reihe von Operationen, bei denen sich Soft-MAC-Treiber registrierenmac80211
Modul.
-
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
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 das Verknüpfung.
-
Wow, es ist großartig. Mit welcher Software hast du dieses Diagramm erstellt?
– Phi Nguyen
22. Juni 2020 um 4:22 Uhr
-
@ItachiTensie Ich habe keine Software verwendet, ich habe es einfach mit Google Drawings gemacht …
– Akshdeep Singh
22. Juni 2020 um 7:43 Uhr
eyalsch
Siehe meine Antwort auf How to Learn the Structure of Linux Wireless Drivers (mac80211)?
In wpa_supplicant
kö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. Wenn 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.
Diese Frage ist off-topic. Siehe Hilfecenter
– Sigissaft
18. März 2017 um 6:27 Uhr