首页 > 其他分享 >nl80211

nl80211

时间:2024-06-17 20:54:23浏览次数:13  
标签:Kernel libnl ioctl API Linux nl80211

同 wpa_supplicant、hostapd 一样,nl80211 也可以管理无线网络,不同的是 wpa_supplicant 和 hostapd 是通过 nl80211 管理无线网络。

 

Linux平台上目前常用的专门针对无线网络设备编程的API有两套

  • 最早的一套API由HP公司员工Jean Tourrilhes于1997年开发,全称为Linux Wireless Extensions。一般缩写为wex或wext。这套API使得用户空间的程序能通过ioctl函数来控制无线网卡驱动。
  • 由于利用ioctl开展编程的方式不太符合Linux驱动开发的要求,所以后来Linux又提供了cfg80211和nl80211两套编程接口用于替代wext。其中,cfg80211用于驱动开发,而nl80211 API供用户空间进程使用以操作那些利用cfg80211 API开发的无线网卡驱动。

注意:ioctl不符合Linux驱动开发要求主要体现在:

  1. ioctl的原型为int ioctl(int fd, unsigned long cmd, ...),最后三个点代表它支持可变个数的参数。但对于一个经过严格定义的系统调用来说,支持可变个数参数的做法似乎显得有些随性。
  2. ioctl的参数不仅个数不固定,其参数类型也无法通过函数原型来加以说明。这同样对于一个严谨的系统调用来说,也是不可接受的。

 

相比wext,nl80211的使用难度较大,因为在nl80211框架中,用户进程和Kernel通信的手段没有使用wext中的ioctl,而是采用了netlink机制。所以,虽然nl80211.h仅是定义了一些枚举值和有限的数据结构,但其操作却比较复杂。netlink是Linux平台上一种基于socket的IPC通信机
制,它支持:

  • 用户空间进程和Kernel通信。
  • 用户空间中进程间的通信。

不过,相比其他IPC机制,netlink最常用之处还是用户空间进程和kernel模块间的通信。鉴于netlink的复杂性,开源世界提供了几个较为完备的基于netlink编程的框架,其中最著名的就是libnl。而Android也充分发扬拿来主义,在其system/core/libnl_2目录中移植并精简了libnl项目的代码,得到一个小巧的libnl_2工程。

libnl 框架如下:

以下三个库都基于其核心库libnl。

  • libnl-route:用于和Kernel中的Routing子系统交互。
  • libnl-nf:用于和Kernel中的Netfilter子系统交互。
  • libnl-genl:用于和Kernel中的Generic Netlink模块交互。

 

标签:Kernel,libnl,ioctl,API,Linux,nl80211
From: https://www.cnblogs.com/god-of-death/p/18253177

相关文章

  • 关于 nl80211
    本文译至:http://wireless.kernel.org/en/developers/Documentation/nl80211关于nl80211nl80211是新的802.11netlink接口公共头文件。加上cfg80211它的目的是取代Wireless-Extensions。nl80211和cfg80211仍在开发中。使用nl80211的工具nl80211的使用者是:iwcrdahostapd......