0

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 行目 (ここでは ) で関数内のリンクが決して解除されません 。bssidBSSieee80211_rx_bss_putwpa_supplicantMLMEMLMEatomic_tBSSBSScfg80211_bss_expirecfg80211_wext_giwscannet/wireless/scan.c

具体的には、「ホールド」に使用されるアトミックが、AP からの電力除去時にデクリメントされない理由を知りたいです。BSSこれにより、Linux は切断に十分なビーコンを見逃すことになりますか? または、wpa_supplicant を使用していくつかの構成を追加する必要がありますMLMEBSS?これは明らかにカーネルのバグですか?

私はすでに試しました:

# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2

私の問題は解決していません。

4

1 に答える 1