WPA_CLI muestra el punto de acceso como conectado cuando no debería

WPA_CLI muestra el punto de acceso como conectado cuando no debería

Estoy usando Linux Kernel 3.3 e intento usar la wpa_cliutilidad para monitorear el estado de mi conexión WiFi. Estoy usando un dongle WiFi de Edimax para conectarme a un punto de acceso inalámbrico.

Normalmente veo algo como esto:

# wpa_cli status
Selected interface 'wlan0'
wpa_state=SCANNING
ip_address=XXX.XXX.XXX.XXX
address=XX:XX:XX:XX:XX:XX

O lo mismo pero con wpa_state=COMPLETED.

Analizar la salida de este texto me permite ver si mi conexión inalámbrica está activa o escaneando. Sin embargo, he notado que después de apagar mi punto de acceso wpa_state=COMPLETEDtodavía se devuelve. Usando el comando:

# iwlist wlan0 scanning

Fuerza un escaneo y wpa_stateserá correcto.

Fuerza un escaneo y wpa_stateocasionalmente será correcto, pero generalmente no.

Me pregunto si tengo una configuración incorrecta en alguna parte, o si hay una manera más eficiente de hacer esto (básicamente solo quiero ver si mi interfaz tiene una conexión activa o no). Aquí está /etc/wpa_supplicant.conf:

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
country=US


network={
    ssid="myssid"
    psk="mypsk"
    key_mgmt=WPA-PSK
    eap=
}

Preferiría no forzar un escaneo cada vez, sino dejar que los módulos del controlador/kernel se encarguen de eso. Esta es la primera vez que trabajo con WiFi en Linux, así que creo que es probable que haya configurado algo incorrectamente. ¿Alguien puede indicarme la dirección correcta?

Actualizar:

Después de investigar un poco más, creo que está sucediendo algo extraño que hace que el kernel devuelva una versión almacenada en caché de la lista de AP. Estoy usando el RTL8192cucontrolador, así que comencé a depurarlo. Creo que mi problema puede estar relacionado coneste, pero no es exactamente el mismo error, ya que tengo un kernel más reciente que el kernel 2.6 que se usa allí.

Actualización 2:

Mi creencia es que el problema puede estar en algún lugar del núcleo. En el archivo net/mac80211/scan.c, en la línea 214 de la función ieee80211_scan_rx, veo que aparece un bssidmensaje BSSde mi AP (cuando el AP tiene energía) y se coloca a través de ieee80211_rx_bss_put(aquí). En este punto, se devuelve en los resultados del escaneo y wpa_supplicanthace que la MLMEcapa en el kernel se autentique y se conecte con ese AP. Sin embargo, después de desconectar la alimentación del AP, nunca veo que la MLMEcapa renuncie atomic_ta su control BSS. Esto hace que BSSnunca se desvincule en la función cfg80211_bss_expireal final de un escaneo ( cfg80211_wext_giwscan), en el archivo net/wireless/scan.c, línea 205 (aquí).

¿Hay alguna configuración con wpa_supplicant que necesito agregar para que la MLMEcapa disminuya y se mantenga en el BSS, o es claramente un error del kernel?

Ya lo he probado:

# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2

y no he resuelto mi problema.

Respuesta1

Entonces, después de investigar mucho, descubrí que el problema se debía al rtlwificontrolador del kernel. Para mí, parece que rtl8192cuse suponía que el conductor era responsable de manejar las balizas perdidas llamando a la función ieee80211_beacon_loss, pero esa llamada no se encuentra por ninguna parte. Eliminé la compatibilidad con IEEE80211_HW_BEACON_FILTERel rtlwificontrolador y el problema se solucionó.

Esteparcheson esencialmente los mismos cambios que hice, y los comentarios en estearchivoson parte de lo que me llevó a esta respuesta.

información relacionada