3.4 Linux Wi-Fi编程API介绍
最后更新于:2022-04-02 06:02:29
前面小节一直在介绍Wi-Fi规范方面的内容。从本节开始,我们将向读者介绍Linux平台中Wi-Fi编程方面的知识。
* * * * *
**提醒**:相比前文而言,本节内容读起来将显得较为轻松。但从笔者个人经验来说,编程只不过是规范的某种实现,掌握规范才是理解无线网络技术的核心。这也是本书内容组织和编排的指导原则。希望读者能认真体会。
* * * * *
Linux平台上目前常用的专门针对无线网络设备编程的API有两套[40],
* 最早的一套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的参数不仅个数不固定,其参数类型也无法通过函数原型来加以说明。这同样对于一个严谨的系统调用来说,也是不可接受的。
* * * * *
本节将重点介绍用户空间中的Wi-Fi API:wext和nl80211。不过在介绍它们之前,笔者先请读者思考这样一个问题:
**为什么Wi-Fi需要在用户空间进行编程呢?**
* * * * *
**答案**:
目前的无线网卡分为两种,一种为SoftMAC。这类网卡中,MLME的处理基本上在软件层(即驱动或用户空间),这样可带来较大的灵活性。另外,一些认证相关的操作,也可由软件来控制。另一种网卡称之为FullMAC。这类网卡的MLME全在硬件处理。相比SoftMAC而言,其灵活性很小。所以目前市面上SoftMAC网卡占绝大多数,而cfg80211就仅支持SoftMAC类型的网卡。
* * * * *
';