WPA_CLI는 액세스 포인트가 연결되어 있지만 연결되어서는 안 된다고 표시합니다.

WPA_CLI는 액세스 포인트가 연결되어 있지만 연결되어서는 안 된다고 표시합니다.

저는 Linux 커널 3.3을 사용하고 있으며 이 wpa_cli유틸리티를 사용하여 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의 함수 라인 214에서 ieee80211_scan_rx내 AP의 bssid모양을 확인하고 BSS(AP에 전원이 공급될 때) 전달합니다 ieee80211_rx_bss_put(여기). 이 시점에서 스캔 결과로 반환되어 커널의 계층이 인증되고 AP에 연결됩니다 wpa_supplicant. 그러나 MLME전원을 끈 후 레이어가 MLMEAP atomic_t제어 를 포기하는 것을 본 적이 없습니다 BSS. 이로 인해 BSS파일의 205번째 줄에서 scan()이 끝날 때 함수의 링크가 취소되지 않습니다(cfg80211_bss_expirecfg80211_wext_giwscannet/wireless/scan.c여기).

MLME계속 유지 하려면 wpa_supplicant 구성을 추가해야 합니까 BSS, 아니면 분명히 커널 버그입니까?

난 노력 했어:

# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2

그리고 그것은 아직 내 문제를 해결하지 못했습니다.

답변1

많은 조사 끝에 문제가 커널 rtlwifi드라이버에 있다는 것을 발견했습니다. 드라이버가 rtl8192cu함수를 호출하여 누락된 비콘을 처리해야 하는 것 같은데 ieee80211_beacon_loss호출을 찾을 수 없습니다. IEEE80211_HW_BEACON_FILTER드라이버에 대한 지원을 제거하고 rtlwifi문제가 해결되었습니다.

이것수리하다본질적으로 내가 변경한 내용과 이에 대한 의견은 동일합니다.문서내가 이 답변을 얻은 이유 중 일부입니다.

관련 정보