WPA_CLI 在不應該連接時顯示接入點
我正在使用 linux kernel 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
(此處)放置。此時,它會在掃描結果中返回,並wpa_supplicant
導致MLME
核心中的層進行身份驗證並與該 AP 連接。但是,在斷開 AP 電源後,我再也沒有看到該MLME
層放棄它對它的atomic_t
控制BSS
。這會導致在掃描結束時 ( ) 在文件中的第 205 行 (此處BSS
)中永遠不會在函式中取消連結 。cfg80211_bss_expire``cfg80211_wext_giwscan``net/wireless/scan.c
是否需要添加一些 wpa_supplicant 配置以
MLME
使其在 上保持層遞減BSS
,或者這顯然是核心錯誤?我已經嘗試過:
# wpa_cli bss_expire_age 10 # wpa_cli bss_expire_count 2
並沒有解決我的問題。
所以經過大量探勘,我發現問題出在核心的
rtlwifi
驅動程序上。對我來說,看起來rtl8192cu
司機應該負責通過呼叫函式來處理失去的信標,ieee80211_beacon_loss
但是找不到那個呼叫。我刪除了IEEE80211_HW_BEACON_FILTER
對rtlwifi
驅動程序的支持,問題已得到解決。