WPA_CLI がアクセスポイントが接続されていると表示する

WPA_CLI がアクセスポイントが接続されていると表示する

wpa_cli私は Linux カーネル 3.3 を使用しており、ユーティリティを使用して 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、 APbssidBSSが表示され (AP に電源が入っているとき)、ieee80211_rx_bss_put(ここ)。この時点で、スキャン結果に返され、カーネル内のレイヤーがその AP を認証して接続します。ただし、AP の電源を切断した後、レイヤーがその の保持を放棄することはありませんwpa_supplicant。これにより、スキャンの終了時の関数 ( ) で、ファイル の205 行目 (MLMEMLMEatomic_tBSSBSScfg80211_bss_expirecfg80211_wext_giwscannet/wireless/scan.cここ)。

MLMEレイヤーの保持を減らすために wpa_supplicant で何らかの設定を追加する必要があるのでしょうかBSS、それともこれは明らかにカーネルのバグでしょうか?

すでに試しました:

# wpa_cli bss_expire_age 10
# wpa_cli bss_expire_count 2

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

答え1

いろいろ調べた結果、カーネルのドライバーに問題があることがわかりました。ドライバーは関数 を呼び出して、失われたビーコンを処理する役割を担っているようにrtlwifi見えますが、その呼び出しはどこにも見つかりません。ドライバーでのサポートを削除したところ、問題は解決しました。rtl8192cuieee80211_beacon_lossIEEE80211_HW_BEACON_FILTERrtlwifi

これパッチ基本的に私が行った変更と同じであり、このコメントはファイル私がこの答えに至った理由の一部です。

関連情報