Wie funktionieren die nl80211-Bibliothek und cfg80211?

Lesezeit: 3 Minuten

Benutzeravatar von Rafal
Raffael

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.

  • 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 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 (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


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

Benutzeravatar von eyalsh
eyalsch

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

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

1444210cookie-checkWie funktionieren die nl80211-Bibliothek und cfg80211?

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

Privacy policy