wpa_cli
저는 Linux 커널 3.3을 사용하고 있으며 이 유틸리티를 사용하여 WiFi 연결 상태를 모니터링하려고 합니다 . Edimax WiFi 동글을 사용하여 무선 액세스 포인트에 연결하고 있습니다.
일반적으로 다음과 같은 내용이 표시됩니다.
# wpa_cli status
Selected interface 'wlan0'
wpa_state=SCANNING
ip_address=XXX.XXX.XXX.XXX
address=XX:XX:XX:XX:XX:XX
아니면 똑같지만 wpa_state=COMPLETED
.
이 텍스트 출력을 구문 분석하면 무선 연결이 활성 상태인지 검색 중인지 확인할 수 있습니다. 그러나 전원을 끈 후에도 액세스 포인트가 wpa_state=COMPLETED
여전히 반환되는 것을 확인했습니다 . 다음 명령을 사용합니다.
# iwlist wlan0 scanning
강제로 스캔하면 wpa_state
정확해집니다.
강제로 스캔하여 wpa_state
가끔 정확할 수도 있지만 대개는 그렇지 않습니다.
어딘가에 잘못된 구성이 있는지, 아니면 이 작업을 수행하는 더 효율적인 방법이 있는지 궁금합니다(본질적으로 내 인터페이스에 활성 연결이 있는지 확인하고 싶습니다). 여기 있습니다 /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=
}
매번 검사를 강제로 수행하지 않고 대신 드라이버/커널 모듈이 이를 처리하도록 하는 것을 선호합니다. Linux에서 WiFi를 사용하여 작업하는 것은 이번이 처음이므로 뭔가 잘못 구성한 것 같습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
업데이트:
좀 더 자세히 조사한 결과 커널이 AP 목록의 캐시된 버전을 반환하게 만드는 이상한 일이 발생하고 있다고 생각됩니다. 저는 RTL8192cu
드라이버를 사용하고 있어서 디버깅을 시작했습니다. 내 문제가 다음과 관련이 있을 수 있다고 생각합니다.이것, 그러나 거기에 사용된 2.6 커널보다 최신 커널이 있기 때문에 정확한 버그는 아닙니다.
업데이트 2:
내 믿음은 문제가 커널 어딘가에 있을 수 있다는 것입니다. 파일 net/mac80211/scan.c
의 function 214번 라인에서 내 AP의 ieee80211_scan_rx
a가 bssid
나타나고 BSS
(AP에 전원이 공급될 때) 다음을 통해 연결됩니다 ieee80211_rx_bss_put
(여기). 이 시점에서 스캔 결과로 반환되며 커널의 계층이 해당 AP를 인증하고 연결하게 wpa_supplicant
됩니다 . 그러나 AP 전원을 분리한 후에는 레이어가 해당 기능을 포기하는 것을 MLME
결코 볼 수 없습니다 . 이로 인해 스캔 이 끝날 때( ) 파일의 205행(MLME
atomic_t
BSS
BSS
cfg80211_bss_expire
cfg80211_wext_giwscan
net/wireless/scan.c
여기).
MLME
레이어를 감소시키기 위해 추가해야 하는 wpa_supplicant에 대한 일부 구성이 있습니까 BSS
? 아니면 분명히 커널 버그입니까?
나는 이미 시도했습니다:
# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2
내 문제를 해결하지 못했습니다.