linux Wireless (wext cfg80211 nl80211 mac80211 )

http://wireless.kernel.org/en/developers/Documentation/mac80211

http://stackoverflow.com/questions/21456235/how-nl80211-cfg80211-libraries-work

http://blog.csdn.net/robertsong2004/article/details/38898523

http://blog.csdn.net/robertsong2004/article/details/38900527

https://www.linux.com/blog/linux-wireless-Networking-short-walk

• cfg80211:  用于对无线设备进行配置管理。与FullMAC, mac80211和nl80211一起工作。(Kernel态)

• mac80211: 是一个driver开发者可用于为SoftMAC无线设备写驱动的框架 (Kernel态)。

• nl80211: 用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议(User态)

• WNIC : Wireless Network Interface Controller, 它总是指望硬件执行协议(如IEEE802.11)描述的功能。

• MLME: 即MAC(Media Access Control ) Layer Management Entity,它管理物理层MAC状态机。

• SoftMAC: 其MLME由软件实现,mac80211为SoftMAC实现提供了一个driver API。 即:SoftMAC设备允许对硬件执行更好地控制,允许用软件实现对802.11的帧管理,包括解析和产生802.11无线帧。目前大多数802.11设备为SoftMAC,而FullMAC设备较少。

• FullMAC:  其MLME由硬件管理,当写FullMAC无线驱动时,不需要使用mac80211。

• wpa_supplicant: 是用户空间一个应用程序,主要发起MLME命令,然后处理相关结果。

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

wext: 基于ioctl机制

cfg80211,nl80211,mac80211: 基于消息机制,使用netlink接口

像 iw, hostapd 或 wpa_supplicant 之类的工具使用一些netlink的库(如  libnl 或 libnl-tiny)和netlink 接口通用头文件,当然这是 nl80211.h.

 libnl documentation, iw source code (iw使用libnl)

Often, we can think of the Linux wireless subsystem to contain two major blocks: cfg80211 and mac80211, and they help the WiFi driver to interface with rest of the kernel and user space. In particular, cfg80211 provides configuration management services in the kernel. It also provides management interface between kernel and user space via nl80211. Both soft MAC and full MAC devices need to work with cfg80211. Mac80211 is a driver API that supports only software MAC devices. 

cfg80211

cfg80211是Linux 802.11配置API。cfg80211用于代替wext(Wireless-Extensions),nl80211用于配置一个cfg80211设备,且用于kernel与userspace间的通信。

wext现处理维护状态,没有新的功能被增加,只是修改bug。如果需要通过wext操作,则需要定义CONFIG_CFG80211_WEXT。


    • struct ieee80211_hw: 表示硬件信息和状态

    • ieee80211_alloc_hw:每个driver调用ieee80211_alloc_hw分配ieee80211_hw,且以ieee80211_ops为参数

    • ieee80211_register_hw:每个driver调用ieee80211_register_hw创建wlan0和 wmaster0,并进行各种初始化。

    • struct ieee80211_ops:每个driver实现它的成员函数,且它的成员函数都以struct ieee80211_hw做为第一个参数。在struct ieee80211_ops中定义了24个方法,以下7个方法必须实现:tx,start,stop,add_interface,remove_interface,config和configure_filter。

mac80211

mac80211是一个框架,驱动程序开发人员可以使用它来编写SoftMAC无线设备的驱动程序。它是一个driver开发者可用于为SoftMAC无线设备写驱动的框架,mac80211为SoftMAC设备实现了cfg80211回调函数,且mac80211通过cfg80211实现了向网络子系统注册和配置。配置由cfg80211通过nl80211和wext实现。

SoftMAC设备允许对硬件进行更精细的控制,允许在软件中实现802.11帧管理,包括解析和生成802.11无线帧。今天大多数的802.11设备往往是这种类型的,FullMAC设备已经变得稀少。

mac80211为SoftMAC设备实现cfg80211回调,mac80211依靠cfg80211来注册到网络子系统和配置。 配置是通过cfg80211处理,可以通过nl80211和wireless extensions。
在mac80211中MLME在station 模式(STA )下是在内核中实现的,AP模式( hostapd )下是在用户空间实现的。

如果你有支持nl80211的新的用户空间的应用程序,那你不需要wireless-extensions来支持mac80211设备。

linux Wireless (wext cfg80211 nl80211 mac80211 )_第1张图片



linux Wireless (wext cfg80211 nl80211 mac80211 )_第2张图片

linux Wireless (wext cfg80211 nl80211 mac80211 )_第3张图片


你可能感兴趣的:(wifi,cfg80211,android)