Linuxでワイヤレスがどのように機能するかを知りたいです。私はドキュメントとソースコードの助けを借りてwpa_supplicant、Hostapdアプリケーションから始めました。次のプロセスと基本機能を理解しました。
- wpa_supplicant、nl80211(ドライバインタフェース)
- libnlライブラリ(ユーザースペースとカーネル間のソケット通信にnetlinkプロトコルを使用)
- cfg80211(ユーザー空間でnl80211実装を使用してユーザー空間でドライバと通信するためのカーネルインタフェース)、mac80211(ソフトウェアメディアアクセス制御層)
- ドライバ(ロード可能なドライバ、例えばath6kl - atherosドライバ)。
私は上記のソフトウェアフローを理解し、ナビゲーションを通じて開発者に自由を提供するために、MAC層がソフトウェア(人気の実装mac80211)に実装されることに気づきました。
すべてのケースでこれは本当ですか?それでは、SoftMACとhardMACの長所と短所は何ですか?カーネルのcfg80211インターフェイスはドライバと直接通信しますか? mac80211と誰がどのように通信しますか?
よろしくお願いします。
答え1
このトピックの私の理解は次のとおりです。 HardMACデバイスの利点は、基本的に基本プロトコルのMAC機能と要件がデバイスに実装され、APIを介してのみアクセスできることです。たとえば、次のようになります。 ATコマンド(仕様では基本要素と呼ばれる))。はい、これはソフトウェアを介してデバイス内で実行されるため、HardMACデバイスにはプロセッサとワイヤレストランシーバがあることがわかります。最大の利点は、MAC処理がHardMACデバイスで実行されることです。欠点は、ワイヤレスデバイスに直接アクセスできないため、カスタムアプリケーションに柔軟性がないことです。
SoftMACデバイスはPHY準拠のワイヤレストランシーバであり、一部のMAC機能(通常はAutoAck、CRC確認、自動暗号化、宛先確認など)があるため、到着したい場合はすべてのフレームタイプを読み、仕様に従って応答する必要があります。 。
cfg80211についてはよくわかりませんが、一部の内容を読んでみると、これがユーザー空間プログラムがラジオを構成できるAPIのようです。 cfg80211 APIは通常mac80211を介してドライバと通信しますが、ドライバと直接通信することもできます。