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,在 function 的第 214 行ieee80211_scan_rx,我看到我的 AP 中出現了一個bssidBSS當 AP 有電時)並通過ieee80211_rx_bss_put(這裡)。此時,它會在掃描結果中返回,並wpa_supplicant導致MLME核心中的層進行身份驗證並與該 AP 連接。然而,在斷開 AP 電源後,我從未看到該MLME層放棄對其的atomic_t控制BSS。這會導致在掃描 ( ) 結束時BSS永遠不會取消函數中的鏈接 ,位於 file 的第 205 行(cfg80211_bss_expirecfg80211_wext_giwscannet/wireless/scan.c這裡)。

是否需要添加一些 wpa_supplicant 配置才能使其MLME保留在 上BSS,或者這顯然是一個內核錯誤?

我已經嘗試過:

# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2

並且還沒有解決我的問題。

答案1

經過大量挖掘後,我發現問題出在內核的rtlwifi驅動程式。對我來說,驅動程式似乎rtl8192cu應該透過呼叫 函數 來負責處理遺失的信標ieee80211_beacon_loss,但找不到該呼叫。我刪除了對IEEE80211_HW_BEACON_FILTER驅動程式的支持rtlwifi,問題已解決。

修補本質上與我所做的更改以及此中的評論相同文件是導致我得到這個答案的部分原因。

相關內容