前回、N-6300が無線LAN親機(AP)に対応していないことがわかり、一旦仕切り直しとなった。
ちょっと気分転換するために無線LANドライバのSWインタフェースを調べてみる。

【関連記事】
【組込ボードで無線LAN】②(無線LANカードN-6300を組込ボードに接続するには?)
【組込ボードで無線LAN】⑧(iwのビルド:後編-1)【組込ボードで無線LAN】⑰(QCA9377-5を挿してみた)

  • SWインタフェースとは?
インターフェースとは?を読んでみた。要はAPIのこと。
ソフトウェアインターフェースは、プログラム間でデータや指示をやり取りする手順や形式を定めたもの。代表的なものとして、OSやミドルウェア、ライブラリなどの機能を外部から呼び出して利用するため規約であるAPI(Application Programming Interface)がある。

他にもABI(Application Binary Interface)やプロセス間通信の仕様なども含まれ、さらに広義にはネットワークを介してソフトウェア間で連携するための通信プロトコルや、複数のソフトウェアで共通して利用される汎用的なファイル形式などを指すこともある。
  • 無線LANドライバのSWインタフェースとは?
超ざっくり書くとこんな感じ。今回は④を整理してみる。
アプリ・ミドルウェア層
①アプリケーション
②サプリカント
カーネル層
③TCPスタック
④ネットワークミドルウェア(net_device/libnl)
⑤無線LANドライバ
⑥バスドライバ
⑦ホストCPUドライバ
  • ④ネットワークミドルウェア(net_device/libnl)
2007年頃、カーネル2.6で動作する無線LANドライバはnet_deviceが一般的だった。(以下の図はこのページから参照)
1

今回試しているIntelのN-6300もそうだが、最近はlibnlが一般的な気がする。
1

Linuxにおける無線LANのソフト構成を見ると、よりわかりやすい。
1


wpa_supplicant:STA(ステーション)として動作。802.1X/WPA認証、接続処理を担当
hostapd:SoftAP(アクセスポイント)として動作
iw:ドライバの設定、状態取得を実施
libnl:ユーザー空間とカーネル空間のI/F
cfg80211:チャンネル等の設定を担当
mac80211:スキャン、接続等のコア処理を担当
WLANドライバ:バスドライバ(SDIO、PCIe等)を制御
バスドライバ:SDIO、PCIe等のI/Fを通じてデバイスを制御

ユーザー空間では、wpa_suppliant、hostapd、iwが動作し、カーネル空間ではcfg80211、mac80211、ドライバが動作します。libnlはwpa_supplicant等のユーザー空間で動作するソフトとcfg80211とのインターフェースです。ソケットを通じてユーザー空間?カーネル空間との間でメッセージのやり取りをします。

使用するデバイスによっては、mac80211を使わないこともありますし、wpa_supplicantが直接ドライバにioctlを発行して(libnlを使わずに)制御することもあります。
これらの情報を総合的に扱っているのはLinux Wirelessだと思う。このサイトの記事で私が一番よく見るのがCRDA(Central Regulatory Domain Agent)である。CRDAはregdbと呼ばれる国(カントリーコード)毎の無線の法規制情報(利用可能チャネル、電波強度など)を管理するデータベース管理エージェントだ。これらのコンポーネント構成を理解するのにこのサイトにあった以下の図がわかりやすかった。
1
今回、④ネットワークミドルウェア(net_device/libnl)についてまとめた。次回以降②サプリカント、③TCPスタック、⑤無線LANドライバ、⑥バスドライバ、⑦ホストドライバなども深堀していきたい(順番は決めてない)。

続く
IMG_20190930_082829

スポンサードリンク