Treiberoption (-D) unter wpa_supplicant

11

Bevor wpa_supplicantdie Arbeit ausgeführt werden kann, muss die Netzwerkschnittstelle verfügbar sein und der Treiber für das Gerät muss geladen sein. wpa_supplicantermöglicht die Angabe eines Treibers mit dem Flag "-D". Ich habe dies auf einigen Systemen versucht, wpa_supplicantscheint aber den von mir angegebenen Treiber nie zu akzeptieren. Beispielsweise:

T42 ~ # lspci -v -s 02:02.0
02:02.0 Network controller: Intel Corporation PRO/Wireless 2915ABG [Calexico2] Network Connection (rev 05)
    Subsystem: Intel Corporation Device 1011
    Flags: bus master, medium devsel, latency 64, IRQ 11
    Memory at c0214000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [dc] Power Management version 2
    Kernel driver in use: ipw2200
    Kernel modules: ipw2200
T42 ~ # wpa_supplicant -D ipw2200 -i eth1 -c /root/wpafile 
Unsupported driver 'ipw2200'.
T42 ~ # 

Wenn ich jedoch wpa_supplicantohne Angabe des Treibers beginne wpa_supplicant -i eth1 -c /root/wpafile, funktioniert dies einwandfrei. Warum ist das so? In welchem ​​Fall muss außerdem der Treiber für angegeben werden wpa_supplicant?

Martin
quelle
1
Die Liste der verfügbaren Treiber umfasst (siehe Handbuch): HostAP, Prism54, Madwifi, NDISWrapper, AMTEL, IPW (Treiber 2100 und 2200), WEXT (generische drahtlose Linux-Erweiterungen), kabelgebundenes Ethernet. Zu den interessantesten zählen WEXT (das für 70% Wifi-Geräte verwendet wird), NDISWrapper, wenn Sie Windows-Treiber verwenden, die von der Linux-Kompatibilitätsschicht umhüllt sind, und Madwifi, wenn Sie Windows verwenden aircrack. Aus architektonischer Sicht verstehe ich jedoch nicht, welche Ebene diese Treiber repräsentieren.
Boris Burkov

Antworten:

13

Sie verwechseln Kerneltreiber und User-Space-Treiber. In Ihrem Fall können Sie sicherlich WEXT verwenden, aber auch nl80211 (glaube ich).

WEXT (oder WE = Wireless Extensions) ist die Modifikation, die Jean Tourrhiles 1997 für den Linux-Kernel eingeführt hat. Laut dieser von Tourrhiles selbst verfassten Webseite

Die Wireless Extension (WE) ist eine generische API, mit der ein Treiber dem Benutzerbereich, der Konfiguration und den Statistiken für gängige WLANs zugänglich machen kann. Das Schöne daran ist, dass ein einziger Toolsatz alle Varianten von WLANs unterstützen kann, unabhängig von deren Typ (sofern der Treiber die WLAN-Erweiterung unterstützt). Ein weiterer Vorteil ist, dass diese Parameter im laufenden Betrieb geändert werden können, ohne den Treiber (oder Linux) neu zu starten.

Mit anderen Worten, WEXT befindet sich oben auf Ihrem Treiber und ermöglicht es wpa_supplicant, mit ihm zu interagieren. Beachten Sie, dass wpa_supplicant und der Treiber zu verschiedenen Kernelbereichen gehören (der erste zum Benutzerbereich, der zweite zum Kernelbereich). Daher ist eine API erforderlich, die als Vermittler fungieren kann. Dies ist die Rolle, die die von Bob erwähnten sogenannten Fahrer spielen.

Auf dieser Linux-Wireless-Webseite wird dies jedoch ausdrücklich angegeben

Wird WIR weiterentwickelt?

Nein ist es nicht. Für WE werden nur Bugfixes akzeptiert.

und

Was ersetzt Wireless-Extensions?

Die Neuentwicklung sollte sich auf cfg80211 und nl80211 konzentrieren.

In der Tat, wenn eine Abfrage mein wpa_supplicant drectly (dh nicht die Manpage, sondern der Befehl

 wpa_supplicant -h

Ich bekomme (teilweise) diese Antwort:

drivers:
  wext = Linux wireless extensions (generic)
  nl80211 = Linux nl80211/cfg80211
  wired = Wired Ethernet driver
  none = no driver (RADIUS server/WPS ER)
options:....

Mit anderen Worten, getreu den Worten von Linux Wireless wurde die Unterstützung für alle anderen Treiber außer Wext und nl80211 eingestellt, und die Unterstützung für Wext wurde beibehalten, weil ...

Verwenden wir WE immer noch?

Ja, an cfg80211 und nl80211 wird noch gearbeitet, sodass WEs weiterhin verwendet werden. Alle mac80211-Treiber unterstützen WEs, da sie von mac80211 verwendet werden. Die Idee ist, langsam Dinge auf cfg80211 und nl80211 zu verschieben, die noch nicht vorhanden sind, und ihnen auch neue Funktionen hinzuzufügen.

Dies gilt für Linux Kernel 3.11.1-031101-generic.

Diejenigen von Ihnen, die hostapd verwendet haben, sind in gewisser Weise bereits darüber informiert, da der Standardtreiber für hostapd genau nl80211 ist.

MariusMatutiae
quelle