【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
無線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ドライバ、⑥バスドライバ、⑦ホストドライバなどもどこかで深堀したいと思います。
ITスキルを身につけると条件の良い転職が可能になる
スクールでさらなるスキルアップをしたり、ITスキルを身につけると条件の良い転職が可能になります。当ブログがそのキッカケになったら幸いです。