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