WiFi: «iw reg set US» n'a aucun effet

13

En essayant de diagnostiquer les abandons WiFi, j'ai découvert que le domaine réglementaire de mon interface WiFi est défini sur "monde" (00), et le changer pour ma région (US) devrait aider à résoudre le problème. Cependant, chaque tentative que j'ai faite pour le faire a été ignorée.

La course iw reg set USn'a pas d'effet évident:

$ 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)

Après une longue recherche sur le sujet sur Google, il semble que ce qui est censé se produire soit iw reg setque le noyau émette un événement udev, ce qui provoque crdason exécution et crache les informations réglementaires pertinentes. Cependant, comme je peux le dire udevadm, cet événement n'est jamais émis. L'absence de cet événement est corroborée par le kluge suivant qui ne fonctionne pas:

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

Le message d'erreur vient de crda. Le noyau n'acceptera les modifications de la réglementation WiFi que s'il a émis un événement / demande udev à leur sujet et attend une réponse. Depuis l' crdaéchec, le noyau ne s'y attendait clairement pas, suggérant qu'aucun événement udev n'a été émis.

L'interface WiFi est un Intel 7265D; dont le pilote du noyau est iwlmvm. J'ai crdaet wireless-regdbinstallé, et /etc/default/crdacontient REGDOMAIN=US. La suppression et le rechargement du iwlmvmpilote n'ont aucun effet.

Des suggestions de quoi vérifier de plus?

ewhac
la source
1
Avez-vous vérifié le journal du noyau pour voir si des modifications ont été apportées? J'obtiens la même sortie que vous sur stdout, mais mes journaux indiquent que le domaine réglementaire a bien été mis à jour.
saiarcot895
Je ne trouve rien dans la dmesgsortie ou dans aucun des journaux pour suggérer que toute tentative a été faite pour changer le domaine réglementaire. Le seul message à cet effet apparaît lors du premier chargement du pilote, signalant: "DFS master region: unset"
ewhac
1
Votre solution sonne bien. Veuillez le déplacer vers une réponse plutôt qu'une modification dans la question. Vous pouvez également accepter votre propre réponse.
roaima

Réponses:

11

J'ai essayé de revoir ce problème hier, et j'ai toujours le problème même avec le noyau 4.6.3. L'installation manuelle de la dernière image du micrologiciel n'a pas non plus aidé. Cependant, essayer iw reg set USun deuxième ordinateur portable exécutant le même noyau a bien fonctionné.

La machine à problème est un Thinkpad X1 Carbon (Gen.3), qui possède une carte WiFi Intel 7265D; la machine qui fonctionne est un Thinkpad T440p, qui a un Intel 7260. Je conclus donc qu'il y a un bug dans le pilote ou le firmware du 7265D.

solution de contournement

J'ai également découvert une solution de contournement pour le 7265D. N'oubliez pas qu'il s'agit d'une solution de contournement qui peut provoquer des conflits si / lorsqu'un correctif réel est publié:

  • Supprimez tous les pilotes du noyau WiFi et les modules dépendants:
    sudo modprobe -r iwlmvm
  • Installez le cfg80211module du noyau, en utilisant un paramètre du noyau pour forcer le domaine réglementaire (dans ce cas, «US»):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Réinstallez les pilotes du noyau WiFi:
    sudo modprobe iwlmvm

Vous devriez maintenant voir l'interface WiFi configurée pour le domaine réglementaire américain (ou autre):

$ 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)

Mise à jour 2016.11.17: corrigé dans la série du noyau 4.8

J'ai vérifié à nouveau ce problème aujourd'hui pour la première fois après avoir mis à jour il y a quelques semaines un noyau 4.8.x, et j'ai découvert que l'interface WiFi semble maintenant accepter correctement le domaine réglementaire. Cela s'est produit dans ou avant la version 4.8.5 du noyau.

$ 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
la source
Cela n'a pas fonctionné pour mon Intel Wireless 7265D, il y a des discussions sur Internet mentionnant que le paramètre 00-World est codé en dur dans le firmware ou le matériel verrouillé.
CMCDragonkai
6

Après quelques recherches sur le code, j'ai découvert le problème:

Le périphérique Intel WiFi apparaît comme un périphérique "autogéré", de sorte que le jeu de paramètres iw ne lui sera pas appliqué.

Il vous suffit de régler le iwlwifiparamètre lar_disable=1:

  1. Soit manuellement: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Automatiquement: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
Philippe
la source
Je vous remercie; Je vais essayer ça. BTW, qu'est-ce que "LAR"? Est-ce ce truc d'évitement radar pour la bande des 5 GHz?
ewhac
Le fichier /etc/modprobe.d/iwlwifi.confpeut exister, il est donc préférable de l'ajouter. Soit utiliser à la >>place de >ou echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(obtient les privilèges root selon les besoins).
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
la source
Veuillez faire une description du code présenté. Aidez les utilisateurs à apprendre à pêcher, non seulement donnez-leur un poisson.
NotAnUnixNazi
Je sais que cela ne répond pas à la question et Jan a peut-être raison. Mais c'est une astuce dans le bon sens de la prise de conscience des fichiers sous-jacents utilisés. En plus de cela, je n'ai pas ce dossier /lib/crda/regulatory.bin
JackGrinningCat