ネットワーク

【無線LAN】組み込みボードで無線LANを動かしてみた(Intel N6300編)⑥SWインタフェースとは?

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

古いパソコンから抜き取ったN-6300というIntelの無線LANカードを例えばRaspberry Piみたいな組込デバイスに接続したい

こんな悩みを解決します。

今回やることは1つ。

  1. 無線LANドライバのSWインタフェースを調べてみる

バージョン情報

Linux Kernel 3.14

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が一般的でした。(以下の図はこのページから参照)

最近はlibnlが一般的な気がします。IntelのN-6300もlibnlでした。

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

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と呼ばれる国(カントリーコード)毎の無線の法規制情報(利用可能チャネル、電波強度など)を管理するデータベース管理エージェントです。これらのコンポーネント構成を理解するのにこのサイトにあった以下の図がわかりやすかったです。

まとめ

今回、④ネットワークミドルウェア(net_device/libnl)についてまとめました。

②サプリカント、③TCPスタック、⑤無線LANドライバ、⑥バスドライバ、⑦ホストドライバなどもどこかで深堀したいと思います。

 

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。