私は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
の関数行214で、ieee80211_scan_rx
私のAPのbssid
外観を確認しBSS
(APに電力が供給されたとき)、それを渡しますieee80211_rx_bss_put
(ここ)。この時点でスキャンの結果として返され、カーネルの階層が認証され、APに接続されますwpa_supplicant
。ただし、MLME
電源を切った後、レイヤーがMLME
APatomic_t
制御を放棄するのを見たことはありませんBSS
。これにより、BSS
ファイルの205行目でscan()が終了したときに関数へのリンクがキャンセルされません(cfg80211_bss_expire
cfg80211_wext_giwscan
net/wireless/scan.c
ここ)。
MLME
続行するには、wpa_supplicant設定を追加する必要がありますかBSS
、それとも明らかにカーネルのバグですか?
私は努力しました:
# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2
そしてそれはまだ私の問題を解決していません。