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
正しい場合もありますが、通常 (99%) 正しくありません。
これが私のもの/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=
}
いくつかの調査の結果、カーネルがキャッシュされたバージョンの AP リストを返すという奇妙なことが起こっていると思われます。RTL8192cu
ドライバーを使用しています。私はすでにこの問題を見てきましたが、それは私のものと同じではありません。
私の考えでは、問題はカーネルのどこかにある可能性があります。ファイルnet/mac80211/scan.c
の function の 214 行目で、APの が表示され(AP に電力が供給されている場合)、( hereieee80211_scan_rx
を介して) 入力されることがわかります。この時点で、スキャン結果で返され、カーネル内のレイヤーが認証され、その AP に接続されます。ただし、AP の電源を切断した後、レイヤーがその保持を放棄することはありません。これにより、スキャンの最後 ( ) のファイルの 205 行目 (ここでは ) で関数内のリンクが決して解除されません
。bssid
BSS
ieee80211_rx_bss_put
wpa_supplicant
MLME
MLME
atomic_t
BSS
BSS
cfg80211_bss_expire
cfg80211_wext_giwscan
net/wireless/scan.c
具体的には、「ホールド」に使用されるアトミックが、AP からの電力除去時にデクリメントされない理由を知りたいです。BSS
これにより、Linux は切断に十分なビーコンを見逃すことになりますか? または、wpa_supplicant を使用していくつかの構成を追加する必要がありますMLME
かBSS
?これは明らかにカーネルのバグですか?
私はすでに試しました:
# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2
私の問題は解決していません。