(iw_handler) ieee80211_ioctl_giwtxpow, /* SIOCGIWTXPOW */ (iw_handler) ieee80211_ioctl_siwretry, /* SIOCSIWRETRY */ (iw_handler) ieee80211_ioctl_giwretry, /* SIOCGIWRETRY */ (iw_handler) ieee80211_ioctl_siwencode, /* SIOCSIWENCODE */ (iw_handler) ieee80211_ioctl_giwencode, /* SIOCGIWENCODE */ (iw_handler) ieee80211_ioctl_siwpower, /* SIOCSIWPOWER */ (iw_handler) ieee80211_ioctl_giwpower, /* SIOCGIWPOWER */ };
5.6.2 Linux Wireless Extensions处理函数(私有部分)
static const iw_handler ieee80211_priv_handlers[] = {
(iw_handler) ieee80211_ioctl_setparam, /* SIOCWFIRSTPRIV+0 */ (iw_handler) ieee80211_ioctl_getparam, /* SIOCWFIRSTPRIV+1 */ (iw_handler) ieee80211_ioctl_setkey, /* SIOCWFIRSTPRIV+2 */ (iw_handler) ieee80211_ioctl_setwmmparams, /* SIOCWFIRSTPRIV+3 */ (iw_handler) ieee80211_ioctl_delkey, /* SIOCWFIRSTPRIV+4 */ (iw_handler) ieee80211_ioctl_getwmmparams, /* SIOCWFIRSTPRIV+5 */ (iw_handler) ieee80211_ioctl_setmlme, /* SIOCWFIRSTPRIV+6 */ (iw_handler) ieee80211_ioctl_getchaninfo, /* SIOCWFIRSTPRIV+7 */ (iw_handler) ieee80211_ioctl_setoptie, /* SIOCWFIRSTPRIV+8 */ (iw_handler) ieee80211_ioctl_getoptie, /* SIOCWFIRSTPRIV+9 */ (iw_handler) ieee80211_ioctl_addmac, /* SIOCWFIRSTPRIV+10 */ (iw_handler) ieee80211_ioctl_getscanresults, /* SIOCWFIRSTPRIV+11 */ (iw_handler) ieee80211_ioctl_delmac, /* SIOCWFIRSTPRIV+12 */ (iw_handler) ieee80211_ioctl_getchanlist, /* SIOCWFIRSTPRIV+13 */ (iw_handler) ieee80211_ioctl_setchanlist, /* SIOCWFIRSTPRIV+14 */ (iw_handler) NULL, /* SIOCWFIRSTPRIV+15 */
(iw_handler) ieee80211_ioctl_chanswitch, /* SIOCWFIRSTPRIV+16 */ (iw_handler) ieee80211_ioctl_setmode, /* SIOCWFIRSTPRIV+17 */ (iw_handler) ieee80211_ioctl_getmode, /* SIOCWFIRSTPRIV+18 */ (iw_handler) ieee80211_ioctl_getappiebuf, /* SIOCWFIRSTPRIV+19 */ (iw_handler) ieee80211_ioctl_setappiebuf, /* SIOCWFIRSTPRIV+20 */
(iw_handler) NULL, /* SIOCWFIRSTPRIV+21 */ (iw_handler) ieee80211_ioctl_setfilter, /* SIOCWFIRSTPRIV+22 */
(iw_handler) NULL, /* SIOCWFIRSTPRIV+23 */ (iw_handler) ieee80211_ioctl_sendaddba, /* SIOCWFIRSTPRIV+24 */ (iw_handler) ieee80211_ioctl_getaddbastatus,/* SIOCWFIRSTPRIV+25 */ (iw_handler) ieee80211_ioctl_senddelba, /* SIOCWFIRSTPRIV+26 */
(iw_handler) NULL, /* SIOCWFIRSTPRIV+27 */ (iw_handler) ieee80211_ioctl_setaddbaresponse, /* SIOCWFIRSTPRIV+28 */ };
6 附录
6.1 Atheros的WLAN配置工具
6.1.1 wlanconfig.c
1、 使用说明
$wlanconfig wlanX create wlandev wifiX wlanmode [sta|adhoc|ap|monitor] [bssid | -bssid] [nosbeacon]
$ wlanconfig wlanX destroy
$wlanconfig wlanX list [sta | scan | chan | active | keys | caps | wme]
-bssid:指定该选项后,创建的VAP将与前面创建的VAP共用MAC地址,否则会新建一个MAC地址。
nosbeacon:对于station模式必须指定,不使用beacon机制。 2、 创建VAP
举例:$wlanconfig wlan create wlandev wifi0 wlanmode ap
处理过程:对”wifi0”接口调用ioctl(s, SIOC80211IFCREATE, ifr) 其中:
s = socket(AF_INET, SOCK_DGRAM, 0); // socket, 下同
struct ieee80211_clone_params cp = {
icp_name: “wlan”;
icp_opmode: IEEE80211_M_HOSTAP; icp_flags: IEEE80211_CLONE_BSSID }
struct ifreq ifr = {
ifr_name: “wifi0 “; ifr_data: (void *) &cp; }
3、 注销VAP
举例:$wlanconfig wlan0 destroy
处理过程:对”wlan0”接口调用ioctl(s, SIOC80211IFDESTROY, &ifr) 其中:
struct ifreq ifr = {
ifr_name: “wifi0 “; }
4、 获取Station的信息
举例:$wlanconfig wlan0 list sta
处理过程:ioctl(s, IEEE80211_IOCTL_STA_INFO, &iwr) 其中:
uint8_t buf[24*1024];
struct iwreq iwr = { ifr_name: “wlan0”; u.data.pointer: (void *)buf; u.data.length: sizeof(buf);
}; //获取信息的接收缓冲区信息,下同。
返回的buf为(struct ieee80211req_sta_info)类型; 5、 得到scan后的结果
举例:$wlanconfig wlan0 list scan
处理过程:ioctl(s, IEEE80211_IOCTL_SCAN_RESULTS, &iwr) 返回的buf为struct ieee80211req_scan_result类型。 6、 得到channel信息
举例:$wlanconfig wlan0 list chan
处理过程:ioctl(s, IEEE80211_IOCTL_GETCHANINFO, &iwr) 返回的buf为struct ieee80211req_chaninfo类型。 7、 得到激活的channel信息
举例:$wlanconfig wlan0 list active
处理过程:ioctl(s, IEEE80211_IOCTL_GETCHANLIST, &iwr) 返回的buf为struct ieee80211req_chaninfo类型。 8、 得到密钥信息
举例:$wlanconfig wlan0 list keys 处理过程:暂时没有实现 9、 得到无线模块的能力集
举例:$wlanconfig wlan0 list caps
处理过程:ioctl(s, IEEE80211_PARAM_DRIVER_CAPS, &iwr); 返回的buf为一个32位数,每一位代表一种能力。 10、 得到WME信息
举例:$wlanconfig wlan0 list wme
处理过程:分别调用ioctl,其中ID分别为: IEEE80211_WMMPARAMS_CWMIN IEEE80211_WMMPARAMS_CWMAX IEEE80211_WMMPARAMS_AIFS
IEEE80211_WMMPARAMS_TXOPLIMIT IEEE80211_WMMPARAMS_ACM 返回值为一个int类型。
IEEE80211_WMMPARAMS_NOACKPOLICY
6.2 Linux Wireless Extensions工具
Linux Wireless Extensions(LWE)的用户层配置工具之一。LWE是Linux下对无线网络配置的工具,包括内核的支持、用户层配置工具和驱动接口的支持三部分。LWE定义了一套标准的无线参数配置项,比如SSID、信道、速率等,LWE也定义了一个扩展配置参数框架,允许厂商自己定义私有配置项。LWE使用ioctl与驱动程序进行通信。目前很多无线网卡都支持LWE,而且主流的Linux发布版本,比如Redhat Linux、Ubuntu Linux都已经带了这个配置工具。
6.2.1 iwconfig
iwconfig是配置无线网卡参数(LWE定义的标准参数部分,私有部分通过iwpriv工具配置)的一个工具,不带参数调用该命令会列出系统中所有网卡,如果支持LWE则会列出详细的配置参数。
用法: iwconfig interface [essid {NN|on|off}]
[nwid {NN|on|off}]
[mode {managed|ad-hoc|...} [freq N.NNNN[k|M|G]] [channel N]
[ap {N|off|auto}] [sens N] [nick N]
[rate {N|auto|fixed}] [rts {N|auto|fixed|off}] [frag {N|auto|fixed|off}]
[key/enc {NNNN-NNNN|off}] [power {period N|timeout N}] [retry {limit N|lifetime N}] [txpower N {mW|dBm}] [commit] 举例:假设无线网卡的接口名为ath0 设置SSID:
iwconfig ath0 essid “Test_SSID” 设置信道: iwconfig ath0 chann 5 设置速率: iwconfig ath0 rate 11M 设置WEP密钥: iwconfig ath0 key s:12345
6.2.2 iwlist
iwlist是获取无线网卡配置信息的一个工具。 用法: iwlist [interface] scanning [interface] frequency [interface] channel [interface] bitrate [interface] rate
[interface] encryption [interface] key [interface] power [interface] txpower
[interface] retry [interface] ap
[interface] accesspoints [interface] peers [interface] event 举例: 扫描AP: iwlist ath0 scan 查看信道: iwlist ath0 chann 查看速率: iwlist ath0 rate 查看WEP密钥: iwlist ath0 key
6.3 iwpriv
iwpriv是配置无线网卡私有参数的一个工具,根据底层驱动的不同,私有配置参数也不一样。不带参数调用iwpriv将列出各个网络接口卡所支持的私有参数。
用法:
iwpriv interface [private-command [private-arguments]]
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Atherose pb42无线AP简要分析 (2)(5)在线全文阅读。
相关推荐: