彷徨えるフジワラ

年がら年中さまよってます

ralink RT2870 の無線 LAN ネットワークドライバ問題

これまでのあらすじ:

BUFFALO の WLI-UC-GN を始めとする USB WiFi アダプタが Solaris で使用できるのは、村山さんが ralink RT2870 チップ向けにドライバを開発してくれたお陰です .... アクセスポイントに接続できネェ .... orz

アクセスポイントの検出はできているのに、いざ接続確立の段になると上手く行かない。

とりあえず原因調査の手始めに、開発版の 0.0.13/公開版の 0.8.2 で確認してみたもの、どちらの版でも接続確立できない。

同じ USB WiFi アダプタを使っているさとかずさん曰く「Solaris 11 Express では動いていますよ?」とのことだったので、OpenSolaris 134b な環境から Solaris 11(151a) な環境に "pkg image-update" してみたのだが、やはり挙動は変わらない。

"dladm scan-wifi" でのアクセスポイント検出は機能していることから、接続確立周り、おそらく認証周りが駄目なんじゃなかろうか?というのは、比較的早い段階で予想していたのだけれど、では何が駄目なの?という点はサッパリわからない。

幸い手元に 802.11g のアクセスポイントが残っていたので、試しに色々な条件での接続可否を試してみると ....

手元にある 802.11g AP が WPA 対応していない初期の安い奴だったので、802.11g AP + WPA は試せず仕舞い。
当初は:

"dladm scan-wifi" では WPA 認証形式であることが認識出来てはいるものの、実際の WPA 認証処理の実装がアレなのが原因なのでは?

という推測もあったのだが、「Solaris 11 では WPA 認証が使える」(by さとかずさん)にも関わらず、Solaris 11 環境でも接続失敗しているのは、認証系とは別な原因があることに。

しょうがないので、村山さんに送ったログを再度詳細に確認したところ、一旦接続が確立した前後のログ出力で、通信状態(?)フラグのビットマスクに 802.11n 固有の HT(High Throughput) 向けのビットが立っていることを発見。

先日の OpenSolaris 勉強会の席で、WiFi 接続が上手く行かないことを村山さんに相談した際に:

802.11n は認証手順等が大幅に変更されているので、「802.11g の高速版」と考えるのは大間違い

という話を聞いていたので、もしや?と思い、802.11n 機能を無効化したモジュールをビルドして試してみると .... 動いた!!

あぁ、そうか、やっぱり 802.11n 仕様固有の問題だったのかぁ....

じゃぁ、何でさとかずさんの環境では上手く動いていたの?と思ったら、「アクセスポイントは 802.11g でした」とのこと。802.11n有機能を要求してこないのだから、そりゃ動くわな。

というわけで、Solaris で RT2870 の USB WiFi モジュールを使用する場合に:

802.11n アクセスポイントで、且つ WPA/WPA2 認証を使用する

のであれば、802.11n 機能を無効にしたモジュールを再ビルドする必要があるので注意。

Makefile.config_gld3 中の "-DCONFIG_11N" を "-UCONFIG_11N" に変更

ちなみに、134b 〜 151a の間に GLD インタフェース仕様の変更が挟まっているので、134b 向けにビルドしたドライバモジュールは、151a = Solaris 11 上では正しく動作しない(モジュールはロードされるけど、リンク層ドライバとして attach される際に失敗する)。ドライバ配布の tar に含まれるモジュールは、134b 系仕様向けにビルドされたものなので、Solaris 11 環境で使用する場合は再ビルドが必要なので注意。

再ビルドにはカーネルソースツリーが必要だったりするので、両方のバイナリを添付してもらうように村山さんにお願いしてみようかなぁ。