WiFi: `iw reg set US` no tiene ningún efecto

13

En el proceso de tratar de diagnosticar los abandonos de WiFi, descubrí que el dominio regulador en mi interfaz WiFi está configurado en "mundo" (00), y cambiarlo a mi región (EE. UU.) Debería ayudar a solucionar el problema. Sin embargo, cada intento que hice para hacerlo ha sido ignorado.

Correr iw reg set USno tiene un efecto evidente:

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

Después de una búsqueda exhaustiva en Google sobre el tema, parece que lo que se supone que sucede es iw reg setque el kernel emite un evento udev, lo que hace crdaque se ejecute y revele la información normativa relevante. Sin embargo, cerca de lo que puedo decir udevadm, este evento nunca se emite. La ausencia de este evento es corroborada por el siguiente kluge que no funciona:

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

El mensaje de error es de crda. El kernel aceptará cambios regulatorios de WiFi solo si ha emitido un evento / solicitud de udev para ellos y espera una respuesta. Como crdafalla, el núcleo claramente no lo esperaba, lo que sugiere que no se emitió ningún evento udev.

La interfaz WiFi es una Intel 7265D; de quién es el controlador del núcleo iwlmvm. Tengo crdae wireless-regdbinstalado, y /etc/default/crdacontiene REGDOMAIN=US. Eliminar y volver a cargar el iwlmvmcontrolador no tiene ningún efecto.

¿Alguna sugerencia de qué más consultar?

ewhac
fuente
1
¿Ha revisado el registro del kernel para ver si se realizaron cambios? Estoy obteniendo el mismo resultado que usted en stdout, pero mis registros dicen que el dominio regulador se actualizó.
saiarcot895
No puedo encontrar nada en la dmesgsalida ni en ninguno de los registros que sugiera que se haya intentado cambiar el dominio regulador. El único mensaje en ese sentido aparece cuando el controlador se carga por primera vez, informando: "Región maestra DFS: sin establecer"
ewhac
1
Tu solución suena bien. Muévalo a una respuesta en lugar de editarlo en la pregunta. Entonces también puedes aceptar tu propia respuesta.
roaima

Respuestas:

11

Intenté revisar este problema ayer, y todavía tengo el problema incluso con el kernel 4.6.3. La instalación manual de la última imagen de firmware tampoco ayudó. Sin embargo, probar iw reg set USuna segunda computadora portátil con el mismo núcleo funcionó bien.

La máquina problemática es una Thinkpad X1 Carbon (Gen.3), que tiene una tarjeta WiFi Intel 7265D; la máquina de trabajo es un Thinkpad T440p, que tiene un Intel 7260. Por lo tanto, concluyo que hay un error en el controlador o firmware 7265D.

Solución alterna

También descubrí una solución para el 7265D. Tenga en cuenta que esta es una solución alternativa y puede causar conflictos si / cuando se lanza una solución real:

  • Elimine todos los controladores del kernel WiFi y los módulos dependientes:
    sudo modprobe -r iwlmvm
  • Instale el cfg80211módulo del núcleo, utilizando un parámetro del núcleo para forzar el dominio regulador (en este caso, 'EE. UU.'):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Vuelva a instalar los controladores del kernel WiFi:
    sudo modprobe iwlmvm

Ahora debería ver la interfaz WiFi configurada para el dominio regulador de EE. UU. (O lo que sea):

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

Actualización 2016.11.17: corregido en Kernel 4.8 Series

Revisé este problema nuevamente hoy por primera vez después de actualizar hace un par de semanas a un kernel 4.8.x, y descubrí que la interfaz WiFi ahora parece estar aceptando correctamente el dominio regulador. Esto sucedió en o antes de kernel rev 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
fuente
Esto no funcionó para mi Intel Wireless 7265D, hay algunos hilos en Internet que mencionan que la configuración 00-World está codificada en el firmware o hardware bloqueado.
CMCDragonkai
6

Después de una investigación de código descubrí cuál es el problema:

El dispositivo Intel WiFi aparece como un dispositivo "autogestionado", por lo que no se le aplicará el iw reg set.

Todo lo que necesita hacer es configurar el iwlwifiparámetro lar_disable=1:

  1. Ya sea manualmente: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Automáticamente: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
Philip
fuente
Gracias; Probaré eso. Por cierto, ¿qué es "LAR"? ¿Es eso lo que evita el radar para la banda de 5 GHz?
ewhac
El archivo /etc/modprobe.d/iwlwifi.confpuede existir, por lo que es mejor agregarlo. O use en >>lugar de >o echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(obtiene privilegios de root según sea necesario).
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
fuente
Por favor, haga una descripción del código presentado. Ayude a los usuarios a aprender a pescar, no solo a darles un pez.
NotAnUnixNazi
Sé que no responde la pregunta y Jan podría tener razón. Pero es un consejo en la dirección correcta de la conciencia de los archivos subyacentes utilizados. Además de eso no tengo esa carpeta /lib/crda/regulatory.bin
JackGrinningCat