lsdk无线驱动与管理层的接口
在linux的应用层,有wlanconfig 和iwconfig,iwpriv三个命令来配置和管理无线接口,在内核里有三种不同的处理方式与三者对应。
Wlanconfig 主要是创建虚拟接口; iwconfig 和iwpriv则可以配置无线接口。
当然还有hostpad也会对无线虚拟接口进行配置。
命令 | Ioctl号 | 驱动对应的函数 | 应用的dev |
wlanconfig | SIOCDEVPRIVATE 0x89FF,这是设备的私有接口。 | Ath_ioctl() | Wifi0和wifi1这种物理接口。 |
Iwconfig/iwpriv/iwlist | SIOCIWFIRST---SIOCIWLAST (0x8B00—0x8BFF) | Linux/net/dev.c下的wext_handle_ioctl;然后是dev->wireless_handlers | Wifi0和athX两种类型的接口。 |
|
|
|
|
与wlanconfig命令相关的接口
Wlanconfig命令应用于wifi0这一类的物理接口,它的ioctl关键字是由linux系统提供的SIOCDEVPRIVATE(0x89FF), 专门为设备设计的私有接口,由dev->ndo_do_ioctl进行处理。
在设备一级的驱动里wifi0对应的处理函数ath_ioctl对应wlanconfig命令的处理。
athdev_net_ops是wifi0硬件接口的操作接口。
Iwlist和iwconfig
Iw系列命令有iwconfig iwlist和iwpriv三种。
dev->wireless_handlers 这是net_device专门用于处理无线配置的接口。
dev->wireless_handlers=ieee80211_iw_handler_def
ieee80211_iw_handler_def这个结构有相应的驱动给出。
iwlist和iwconfig是比较简单,它们的第二级命令都对应一个SIOCIWFIRST --- SIOCIWLAST之间的命令字。
如iwlist ath1channel的命令,对应的IOCTL是:SIOCGIWFREQ(0x8B05)。
其中它有standard和private两种,iwlist和iwconfig使用standard的处理部分。
与iwpiv相关的接口
Iwpriv命令配置过程:
1. 读取出ifname接口上所有的priv信息。
2. Priv[i] 与cmdname进行对比,找出正确的priv[i].
3. 由于Priv[i].cmd有一些不是内核定义的,找到getparam或是setpram的priv,把priv[i].cmd赋值给subcmd。再使用getparam或是setpram的cmd进行ioctl操作。
Getparam在内核的处理过程如下:
iwpriv wifi0 全是与芯片有关的配置。
wifi0 Available private ioctls :
setHALparam (8BE0) : set 2 int & get 0
getHALparam (8BE1) : set 1 int & get 1 int
DMABcnRespT (0000) : set 1 int & get 0
GetDMABcnRespT (0000) : set 0 & get 1 int
SWBcnRespT (0001) : set 1 int & get 0
GetSWBcnRespT (0001) : set 0 & get 1 int
….
get_decline_addb (1091) : set 0 & get 1 int
iwpriv ath0 主要与mac层和80211协议相关的配置。