web-dev-qa-db-ja.com

nl80211ライブラリとcfg80211の仕組み

nl80211cfg80211がどのように機能するかについて詳しく知りたい。関数フロー、nl80211wpa_supplicantiwなどのネットワークツールと対話する方法。

Plzは、参照するための便利なリンクまたは書籍をいくつか提案します。

43
Rafal

ユーザースペースからワイヤレスドライバーを制御できるようにするために、カーネルとユーザースペース間の通信プロセスが使用されますIPC.

  • 最初は、ベンダー依存APIを使用するioctlが使用されました。
  • 1996年、Jean Tourrilhesは wireless extensions (WEまたはWEXT)を作成します。

ワイヤレス拡張機能(WE)は、一般的なワイヤレスLANに固有のユーザー空間の構成と統計をドライバーが公開できるようにする汎用APIです。

  • 2006年、John Linvilleは mac80211 を作成し、Johannes Bergは cfg80211 および nl80211 を作成します。ともに、無線拡張機能を置き換えることを目的としています。

    +-------------+
    |             |
    |  Userspace  |
    |             |
    +-------------+
          ^
    - - - | - - - - 
          | nl80211
          v
    +-------------+
    |             |
    |  cfg80211   |
    |             |
    +-------------+
    +-------------+
    |             |
    |  mac80211   |
    |   driver    |
    |             |
    +-------------+
    

重要な点は、nl80211/cfg80211/mac80211がioctlを使用しなくなったことです。 netlink を使用します。

そのため、 iwhostapd 、または wpa_supplicant などのツールは、いくつかのネットリンクライブラリを使用します( libnl または libnl-tiny )およびもちろん nl80211.h であるネットリンクインターフェイスパブリックヘッダー。

あまりドキュメントはありませんが、 libnl documentation を読んでから iwソースコード を読むことをお勧めします(iwはlibnlを使用するため)。

58
jml

nl80211およびcfg80211がシステムの他の部分(user spacekernel、およびhardware)とどのように機能するかについてのもう少し詳細な図。

  • nl80211は、ユーザー空間ソフトウェア(iwwpa_supplicantなど)とカーネル(cfg80211およびmac80211カーネルモジュール、および特定のドライバーとの間のインターフェイスです。 )。
  • WiFiドライバーとハードウェアは、Full-MACまたはSoft-MACです( Wireless_network_interface_controller を参照)。
  • cfg80211_opsは、Full-MACドライバーとmac80211モジュールがcfg80211モジュールに登録する一連の操作です。
  • ieee80211_opsは、Soft-MACドライバーがmac80211モジュールに登録する一連の操作です。

enter image description here

33
artm

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メッセージを作成します。

5
eyalsh