免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2505 | 回复: 0
打印 上一主题 下一主题

WIFI ioctl调用(从应用程序到内核再到WIFI网卡驱动) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-07 16:22 |只看该作者 |倒序浏览

/*
*By Neil Chiao (
neilchiao at gmail.com
)
*转载请注明出处:
neilengineer.cublog.cn

*
www.xinxingwan.com
*/




WIFI ioctl中SIOCSIWSCAN命令从应用程序到内核再到驱动
应用程序中:
ioctl(skfd, SIOCSIWSCAN , &wrq);
其中,#define SIOCSIWSCAN 0x8B18
socket的ioctl先看net/socket.c的sock_ioctl
对于无线:
0x8B00 ~ 0x8BFF  调用net/core/dev.c --> dev_ioctl
dev_ioctl中执行到default中,最后调用了wireless_process_ioctl
对wireless_process_ioctl,又跑到了default中,如果有handler,最后到ioctl_standard_call中;
没有handler时,使用老的接口(dev->do_ioctl)。
   handler = get_handler(dev, cmd);
   if(handler != NULL) {
    /* Standard and private are not the same */
    if(cmd do_ioctl) {
    return dev->do_ioctl(dev, ifr, cmd);
   }
有handler时,在具体WIFI驱动中,有类似如下实现:
netdev->wireless_handlers = (struct iw_handler_def *)&iwctl_handler_def;
const struct iw_handler_def iwctl_handler_def =
{
......
.get_wireless_stats = &iwctl_get_wireless_stats,
.standard = (iw_handler *) iwctl_handler,
......
}
static const iw_handler  iwctl_handler[] =
{
(iw_handler) iwctl_commit,      // SIOCSIWCOMMIT     
......
......
(iw_handler) iwctl_giwrange,  // SIOCGIWRANGE
......
......
#if WIRELESS_EXT > 13
(iw_handler) iwctl_siwscan,         // SIOCSIWSCAN  
(iw_handler) iwctl_giwscan,         // SIOCGIWSCAN   
#else
(iw_handler) NULL,
(iw_handler) NULL,
#endif
......
};

rt_ioctl_siwessid






本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91522/showart_2143234.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP