linux Wireless基础知识(cfg80211 mac80211 nl80211)

1. 基本概念

• 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命令,然后处理相关结果。

2. cfg80211

cfg80211是Linux 802.11配置API。cfg80211用于代码wext(Wireless-Extensions),nl80211用于配置一个cfg80211设 备,且用于kernel与userspace间的通信。wext现处理维护状态,没有新的功能被增加,只是修改bug。如果需要通过wext操作,则需要 定义CONFIG_CFG80211_WEXT。

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

wext: 基于ioctl机制

• 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。

3. mac80211

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

mac80211在体系结构中的位置如下图所示:

4. socket

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

点赞
收藏

评论区

加载中...

相关推荐

无线AP以及其与无线路由器的区别

它是传统有线网络中的集线器,也是组建小型无线局域网时最常用的设备。AP(https://www.ruijie.com.cn/cp/wx/)相当于连接有线网络和无线网络的桥梁,主要作用是将所有无线网络客户端连接在一起,然后将无线网络连接到以太网。大

Linux系统与服务构建运维

Linux系统与服务构建运维1x初级,项目三FTP服务的使用配置YUM源将CD设备进行连接!(https://img2020.cnblogs.com/blog/1893874/202005/189387420200508194528832718337495.png)将CD设备挂载

Android的Framework分析

大家都知道android是基于linux的kernel上的。android可以运行在intel,高通,nvidia等硬件平台。但是涉及到一些GPU,显卡和一些设备的驱动问题,因为这些驱动都不是开源的,google位了兼容这些设备厂商的驱动源码,提出了硬件抽象层HAL的概念。HAL层对上为framework和native开发提供统一的API接口,为下层驱动的

Android蓝牙连接汽车OBD设备

//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");

Linux 无线网络断开的解决方案

Linux系统用着用着突然发现电脑上的WiFi图标不见了,电脑无法连接到无线网。这可急坏了,找遍设置也没找到哪里可以重新打开无线网,感觉就像是凭空消失了一样。折腾了一天,终于把无线网络恢复正常了。这篇文章就来梳理一下在Linux上修复无线网络的一些简单常用的操作。首先,我们可以使用rfkill命令查看无线设备的状态。$

Airfoil for mac,无限音乐同步软件

AIrfoil是一款Mac平台上的音频传输工具,它可以将Mac上的音频传输到其他设备上,如无线音箱、AppleTV、iOS设备等...

linux Wireless基础知识(cfg80211 mac80211 nl80211) - HelloWorld