nl80211
とcfg80211
がどのように機能するかについて詳しく知りたい。関数フロー、nl80211
がwpa_supplicant
、iw
などのネットワークツールと対話する方法。
Plzは、参照するための便利なリンクまたは書籍をいくつか提案します。
ユーザースペースからワイヤレスドライバーを制御できるようにするために、カーネルとユーザースペース間の通信プロセスが使用されますIPC.
ioctl
が使用されました。ワイヤレス拡張機能(WE)は、一般的なワイヤレスLANに固有のユーザー空間の構成と統計をドライバーが公開できるようにする汎用APIです。
2006年、John Linvilleは mac80211 を作成し、Johannes Bergは cfg80211 および nl80211 を作成します。ともに、無線拡張機能を置き換えることを目的としています。
+-------------+
| |
| Userspace |
| |
+-------------+
^
- - - | - - - -
| nl80211
v
+-------------+
| |
| cfg80211 |
| |
+-------------+
+-------------+
| |
| mac80211 |
| driver |
| |
+-------------+
重要な点は、nl80211/cfg80211/mac80211がioctlを使用しなくなったことです。 netlink を使用します。
そのため、 iw 、 hostapd 、または wpa_supplicant などのツールは、いくつかのネットリンクライブラリを使用します( libnl または libnl-tiny )およびもちろん nl80211.h であるネットリンクインターフェイスパブリックヘッダー。
あまりドキュメントはありませんが、 libnl documentation を読んでから iwソースコード を読むことをお勧めします(iwはlibnlを使用するため)。
nl80211
およびcfg80211
がシステムの他の部分(user space
、kernel
、およびhardware
)とどのように機能するかについてのもう少し詳細な図。
nl80211
は、ユーザー空間ソフトウェア(iw
、wpa_supplicant
など)とカーネル(cfg80211
およびmac80211
カーネルモジュール、および特定のドライバーとの間のインターフェイスです。 )。cfg80211_ops
は、Full-MACドライバーとmac80211
モジュールがcfg80211
モジュールに登録する一連の操作です。ieee80211_ops
は、Soft-MACドライバーがmac80211
モジュールに登録する一連の操作です。Linuxワイヤレスドライバーの構造を学習する方法(mac80211)への返信を参照してください?
wpa_supplicant
では、src/drivers/driver_nl80211.c
のコードをフォローできます。これは、libnl
を使用してカーネルwpa_supplicant
モジュールと通信するwpa_supplicantドライバー(カーネルドライバーではなく、cfg80211
コードで使用される抽象化)です。たとえば、wpa_supplicant
がスキャンを発行すると、wpa_driver_nl80211_scan
が呼び出されます。 NL80211_CMD_TRIGGER_SCAN
というコマンドとスキャンに必要なすべてのパラメーターを使用して、netlink
メッセージを作成します。