Networking

WPA_CLI 在不應該連接時顯示接入點

  • May 27, 2016

我正在使用 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_FILTERrtlwifi驅動程序的支持,問題已得到解決。

更新檔與我所做的更改基本相同,並且此文件中的註釋是導致我獲得此答案的部分原因。

引用自:https://unix.stackexchange.com/questions/284186