Estou usando o kernel Linux 3.3 e estou tentando usar o utilitário wpa_cli
para monitorar o status da minha conexão WiFi. Estou usando um dongle Wi-Fi da Edimax para se conectar a um ponto de acesso sem fio.
Normalmente vejo algo assim:
# wpa_cli status
Selected interface 'wlan0'
wpa_state=SCANNING
ip_address=XXX.XXX.XXX.XXX
address=XX:XX:XX:XX:XX:XX
Ou a mesma coisa, mas com wpa_state=COMPLETED
.
Analisar a saída deste texto permite-me ver se a minha conexão sem fio está ativa ou digitalizada. No entanto, notei que depois de desligar meu ponto de acesso wpa_state=COMPLETED
ainda está sendo retornado. Usando o comando:
# iwlist wlan0 scanning
Força uma varredura e wpa_state
estará correto.
Força uma varredura e wpa_state
ocasionalmente estará correto, mas geralmente não.
Eu estou querendo saber se eu tenho uma configuração incorreta em algum lugar, ou se há uma maneira mais eficiente de fazer isso (eu estou essencialmente apenas querendo ver se a minha interface tem uma conexão ativa ou não). Aqui está o /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=
}
Eu preferiria não forçar uma varredura toda vez, mas deixaria os módulos driver / kernel lidar com isso. Esta é a minha primeira vez trabalhando com WiFi no Linux, então acho que parece que eu configurei algo incorretamente. Alguém pode me apontar na direção certa?
Atualização:
Após algumas investigações posteriores, acredito que algo estranho está acontecendo, fazendo com que o kernel retorne uma versão em cache da lista de APs. Eu estou usando o driver RTL8192cu
, então eu comecei a depurar isso. Acho que meu problema pode estar relacionado a este , mas não exatamente o mesmo bug que eu tenho um kernel mais recente que o kernel 2.6 usado lá.
Atualização 2:
Acredito que o problema pode estar em algum lugar no kernel. No arquivo net/mac80211/scan.c
, na linha 214 na função ieee80211_scan_rx
, vejo um bssid
do BSS
do meu AP aparecer (quando o AP tiver energia) e ser colocado via ieee80211_rx_bss_put
(here ). Neste ponto, ele é retornado nos resultados da varredura e wpa_supplicant
faz com que a camada MLME
no kernel seja autenticada e se conecte com esse AP. No entanto, depois de desconectar a energia do AP, eu nunca vejo a MLME
camada desistir de que é atomic_t
segure esse BSS
. Isso faz com que o BSS
nunca seja desvinculado da função
cfg80211_bss_expire
no final de uma varredura ( cfg80211_wext_giwscan
), no arquivo net/wireless/scan.c
, linha 205 ( aqui ).
Existe alguma configuração com o wpa_supplicant que eu preciso adicionar para que o MLME
layer decrement seja mantido no BSS
, ou isso é claramente um bug do kernel?
Eu já tentei:
# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2
e não resolvi o meu problema.