Linux 无线驱动接口 wext 和 nl80211

Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口。

最早的一套API由HP公司员工Jean Tourrilhes于1997年开发,全称为Linux Wireless Extensions。一般缩写为WE或wext。Wireless Extension (WE)是一组通用的API,能在用户空间对通用Wireless LANs进行配置和统计。它的好处在于仅通过一组单一的工具就能对各种各样的Wireless LANs进行管理,不过它们是什么类型,只要其驱动支持Wireless Extension就行;另一个好处就是不用重启驱动或Linux就能改变这些参数。

 Wireless Tools for Linux是一个Linux命令行工具包,用来设置支持Linux Wireless Extension的无线设备。Wireless Tools (WT)就是用来操作Wireless Extensions的工具集,它们使用字符界面,虽然粗糙,但支持所有Wireless Extension。虽然还有很多其他管理Wireless Extensions的工具,但Wireless Tools是参考实现,它包括以下工具:

iwconfig:设置基本无线参数

iwlist:扫描、列出频率,比特率,密钥等

iwspy:获取每个节点链接的质量

iwpriv:操作Wireless Extensions 特定驱动

ifrename: 基于各种静态标准命名接口

 wext的接口实现上,应用层采用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作。无线驱动事件到应用层的传递采用的netlink socket技术,一种netlink route消息技术。

 

nl80211(供用户空间进程使用以操作那些利用cfg80211 API开发的无线网卡驱动)接口是由开发者Johannes Berg实现的,他也是cfg80211(无线协议栈配置接口,在无线驱动接口和mac80211之间的接口)和mac80211的维护者。无论是用户层访问驱动还是驱动事件通知应用层,nl80211接口都采用的netlink技术。

从WE发展到nl80211有如下几个原因:

1)ioctl的原型为int ioctl(int fd,unsigned long cmd,...),最后省略号代表它支持可变个数的参数。但对于一个经过严格定义的系统调用来说,支持可变个数参数的做法似乎显得有些随性。ioctl的参数不仅个数不固定,其参数类型也无法通过函数原型来加以说明。这同样对于一个严谨的系统调用来说,也是不可接受的。同时使用netlink技术在应用层和内核层数据交换上相比ioctl方式具有优势。

2)随着802.11n协议以及P2P,WPS无线规范的加入,协议的很多功能可以在应用层实现,增加了很多应用层与驱动层间的API接口和事件。WEXT接口不方便功能扩展的缺点,nl80211可以完全支持wext的所有功能,又可以在不修改内核的情况下增加命令字和事件。

 

 

你可能感兴趣的:(Linux 无线驱动接口 wext 和 nl80211)