WiFi: "iw reg set US" hat keine Auswirkung

13

Bei dem Versuch, WLAN-Aussetzer zu diagnostizieren, habe ich festgestellt, dass die Regulierungsdomäne auf meiner WLAN-Schnittstelle auf "world" (00) festgelegt ist. Wenn Sie sie in meine Region (US) ändern, kann das Problem möglicherweise behoben werden. Jeder Versuch, den ich unternommen habe, wurde jedoch ignoriert.

Laufen iw reg set UShat keine offensichtlichen Auswirkungen:

$ iw reg get
country 00: DFS-UNSET
    (2402 - 2472 @ 40), (6, 20), (N/A)
    (2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
    (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
    (5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
    (5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
    (5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
    (5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
    (57240 - 63720 @ 2160), (N/A, 0), (N/A)
$ sudo iw reg set US
$ iw reg get
country 00: DFS-UNSET
    (2402 - 2472 @ 40), (6, 20), (N/A)
    (2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
    (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
    (5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
    (5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
    (5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
    (5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
    (57240 - 63720 @ 2160), (N/A, 0), (N/A)

Nach ausgiebigem Googeln zu diesem Thema scheint es, iw reg setdass der Kernel ein udev -Ereignis auslöst, das dazu führt, dass der Kernel crdaausgeführt wird und die relevanten behördlichen Informationen ausspuckt. Soweit ich das beurteilen kann, udevadmwird dieses Ereignis jedoch nie gesendet. Die Abwesenheit dieses Ereignisses wird durch folgende nicht funktionierende Kluge bestätigt:

$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7

Die Fehlermeldung stammt von crda. Der Kernel akzeptiert Änderungen der WLAN-Richtlinien nur, wenn er ein udev-Ereignis / eine udev-Anforderung für sie gesendet hat und eine Antwort erwartet. Da dies crdafehlschlägt, hat der Kernel dies offensichtlich nicht erwartet, was darauf hindeutet, dass kein udev -Ereignis ausgegeben wurde.

Die WiFi-Schnittstelle ist ein Intel 7265D; wessen Kerneltreiber ist iwlmvm. Ich habe crdaund wireless-regdbinstalliert und /etc/default/crdaenthält REGDOMAIN=US. Das Entfernen und Neuladen des iwlmvmTreibers hat keine Auswirkung.

Irgendwelche Vorschläge, was Sie noch überprüfen sollten?

ewhac
quelle
1
Haben Sie das Kernel-Protokoll überprüft, um festzustellen, ob Änderungen vorgenommen wurden? Ich erhalte die gleiche Ausgabe wie bei stdout, aber meine Protokolle besagen, dass die Regulierungsdomäne tatsächlich aktualisiert wurde.
Saiarcot895
Ich kann nichts in der dmesgAusgabe oder in den Protokollen finden, das darauf hindeutet, dass versucht wurde, die Regulierungsdomäne zu ändern. Die einzige entsprechende Meldung wird beim erstmaligen Laden des Treibers angezeigt und lautet: "DFS-
Masterbereich
1
Ihre Lösung hört sich gut an. Bitte verschieben Sie es zu einer Antwort und nicht zu einer Bearbeitung in der Frage. Sie können dann auch Ihre eigene Antwort akzeptieren.
Roaima

Antworten:

11

Ich habe gestern versucht, dieses Problem erneut zu untersuchen, und habe immer noch das Problem, auch mit Kernel 4.6.3. Die manuelle Installation des neuesten Firmware-Images hat ebenfalls nicht geholfen. Auf iw reg set USeinem zweiten Laptop mit demselben Kernel zu arbeiten, funktionierte jedoch einwandfrei.

Die Problemmaschine ist ein Thinkpad X1 Carbon (Gen.3) mit einer Intel 7265D WiFi-Karte. Die Arbeitsmaschine ist ein Thinkpad T440p mit Intel 7260. Ich komme daher zu dem Schluss, dass der 7265D-Treiber oder die Firmware einen Fehler aufweisen.

Umgehung

Ich habe auch eine Problemumgehung für die 7265D entdeckt. Beachten Sie, dass dies eine Problemumgehung ist und zu Konflikten führen kann, wenn ein tatsächlicher Fix veröffentlicht wird:

  • Entfernen Sie alle WLAN-Kerneltreiber und abhängigen Module:
    sudo modprobe -r iwlmvm
  • Installieren Sie das cfg80211Kernelmodul mithilfe eines Kernelparameters, um die Regulierungsdomäne zu erzwingen (in diesem Fall "US"):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Installieren Sie die WLAN-Kerneltreiber neu:
    sudo modprobe iwlmvm

Sie sollten nun die WiFi-Schnittstelle sehen, die für die US-amerikanische (oder was auch immer) Regulierungsdomäne konfiguriert ist:

$ iw reg get
country US: DFS-FCC
    (2402 - 2472 @ 40), (N/A, 30), (N/A)
    (5170 - 5250 @ 80), (N/A, 17), (N/A)
    (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS
    (5490 - 5730 @ 160), (N/A, 23), (0 ms), DFS
    (5735 - 5835 @ 80), (N/A, 30), (N/A)
    (57240 - 63720 @ 2160), (N/A, 40), (N/A)

Update 2016.11.17: In Kernel 4.8 Series behoben

Ich habe dieses Problem heute zum ersten Mal überprüft, nachdem ich vor ein paar Wochen ein Update auf einen 4.8.x-Kernel durchgeführt habe, und festgestellt, dass die WLAN-Schnittstelle die Regulierungsdomäne nun offenbar ordnungsgemäß akzeptiert. Dies geschah in oder vor Kernel-Version 4.8.5.

$ iw reg get
global
country 00: DFS-UNSET
    (2402 - 2472 @ 40), (6, 20), (N/A)
    (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
    (5170 - 5250 @ 80), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 20), (0 ms), DFS, AUTO-BW, PASSIVE-SCAN
    (5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
    (5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
    (57240 - 63720 @ 2160), (N/A, 0), (N/A)

phy#0 (self-managed)
country US: DFS-UNSET
    (2402 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
    (5170 - 5250 @ 80), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5490 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5735 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5815 - 5835 @ 20), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-HT40PLUS, NO-80MHZ, NO-160MHZ, PASSIVE-SCAN
ewhac
quelle
Dies hat bei meinem Intel Wireless 7265D nicht funktioniert. Es gibt einige Internet-Threads, die erwähnen, dass die 00-World-Einstellung fest in die Firmware oder Hardware codiert ist, die gesperrt ist.
CMCDragonkai
5

Nach einigen Code-Recherchen habe ich herausgefunden, wo das Problem liegt:

Das Intel WiFi-Gerät wird als "selbstgesteuertes" Gerät angezeigt, daher wird der iw-Reg-Satz nicht auf das Gerät angewendet.

Alles was Sie tun müssen, ist den iwlwifiParameter einzustellen lar_disable=1:

  1. Entweder manuell: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Automatisch: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
Philip
quelle
Vielen Dank; Ich werde das versuchen. Übrigens, was ist "LAR"? Ist es das Radarvermeidungsding für das 5-GHz-Band?
Ewhac
Die Datei /etc/modprobe.d/iwlwifi.confexistiert möglicherweise, deshalb ist es besser, sie anzuhängen. Verwenden Sie entweder >>anstelle von >oder echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(erhält nach Bedarf Root-Berechtigungen).
Lucas
1
@ewhac unix.stackexchange.com/a/385590/3285
Evan Carroll
-2
 #!/bin/bash

echo "hello root"
git clone git://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git

echo ""
cd wireless-regdb/
sleep 3

echo ""
gedit db.txt
sleep 1

echo ""
make

echo ""
sudo rm /lib/crda/regulatory.bin

echo ""
sudo cp regulatory.bin /lib/crda/regulatory.bin

echo ""
sudo cp $USER.key.pub.pem /lib/crda/pubkeys/

echo ""
sudo iw reg get

echo ""
ip link set wlan1 down
sleep 3

echo "Boosting Tx Power To 30 Fixed"
iw dev wlan1 set txpower fixed 30mbm
sleep 3

echo "starting wlan1"
ip link set wlan1 up
sleep 2

echo "Checking wlan1 TxPower"
iw dev
sleep 3

echo "Checking Regulatory Domain"
iw reg get
sleep 2

echo "Good Luck"
Joel Cruz
quelle
Bitte beschreiben Sie den angezeigten Code. Helfen Sie Benutzern, das Fischen zu lernen, und geben Sie ihnen nicht nur einen Fisch.
Isaac
Ich weiß, es beantwortet die Frage nicht und Jan könnte recht haben. Aber es ist ein Tipp in die richtige Richtung, um die zugrunde liegenden Dateien zu kennen. Außerdem habe ich diesen Ordner nicht /lib/crda/regulatory.bin
JackGrinningCat