iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数

iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数

iwpriv是处理下面的wlan_private_args的所有扩展命令,iwpriv的实现上,是这样的,
=>main
=>set_private
=>iw_get_priv_info获取wireless网卡所能处理的所有wlan_private_args类型.

dev_ioctl
=>wext_handle_ioctl
=>wireless_process_ioctl
    if (cmd == SIOCGIWPRIV && dev->wireless_handlers)
        return ioctl_standard_call(dev, ifr, cmd,
                     &iw_handler_get_private);
static int ioctl_standard_call(struct net_device *    dev,
             struct ifreq *        ifr,
             unsigned int        cmd,
             iw_handler        handler)
{
    ...
        /* Call the handler */
        ret = handler(dev, &info, &(iwr->u), extra);
            if (user_length < iwr->u.data.length) {
                kfree(extra);
                return -E2BIG;
//通知iwpriv,本wifi网卡对应的private命令还没有完,还有,这样iwpriv将会继续
//maxpriv默认为16,即将以16个为一组,一组一组的从wifi网卡驱动读取该网卡所能支持的所有private_args参数
//newpriv = realloc(priv, maxpriv * sizeof(priv[0]));继续申请,继续拷贝,知道将wifi网卡自定义的wlan_private_args参数全部
//传出到iwpriv为止.
            }
    ...
}
    /* New driver API : try to find the handler */
    handler = get_handler(dev, cmd);//获取

    if (handler) {
        /* Standard and private are not the same */
        if (cmd < SIOCIWFIRSTPRIV)
            return ioctl_standard_call(dev, ifr, cmd, handler);
        else

//如果有对应的handler,那么处理iwpriv的命令,可以我们的iwpriv都是由dev->do_ioctl完成的.
            return ioctl_private_call(dev, ifr, cmd, handler);
    }
    /* Old driver API : call driver ioctl handler */
    if (dev->do_ioctl)
//如果dev->wireless_handlers->standard和dev->wireless_handlers->private[index都不对该cmd作处理,那么由
//dev->do_ioctl = wlan_do_ioctl;我们驱动的最后处理函数wlan_do_ioctl处理.
        return dev->do_ioctl(dev, ifr, cmd);

static iw_handler get_handler(struct net_device *dev, unsigned int cmd)
{
    /* Don't "optimise" the following variable, it will crash */
    unsigned int    index;        /* *MUST* be unsigned */

    /* Check if we have some wireless handlers defined */
    if (dev->wireless_handlers == NULL)
        return NULL;

    /* Try as a standard command */
    index = cmd - SIOCIWFIRST;
    if (index < dev->wireless_handlers->num_standard)
        return dev->wireless_handlers->standard[index];

    /* Try as a private command */
    index = cmd - SIOCIWFIRSTPRIV;//

    if (index < dev->wireless_handlers->num_private)
        return dev->wireless_handlers->private[index];//该private命令的handler.
    /* Not found */
    return NULL;
}

下面wlan_private_args为本wifi网卡驱动的所能支持的所有命令,也就是iwpriv命令所能支持的所有命令

struct iw_handler_def wlan_handler_def = {
  num_standard:sizeof(wlan_handler) / sizeof(iw_handler),
  num_private:sizeof(wlan_private_handler) / sizeof(iw_handler),
  num_private_args:sizeof(wlan_private_args) / sizeof(struct iw_priv_args),
  standard:(iw_handler *) wlan_handler,
  private:(iw_handler *) wlan_private_handler,
  private_args:(struct iw_priv_args *) wlan_private_args,
#if WIRELESS_EXT > 20
  get_wireless_stats:wlan_get_wireless_stats,
#endif
};

以下为示意代码,我们的wifi网卡驱动支持如下iwpriv命令.

static const struct iw_priv_args wlan_private_args[] = {
     "extscan"
     "hostcmd"
     "arpfilter"
     "regrdwr"
     "sdcmd52rw"
     "sdcmd53rw"
     "setgetconf"
     "getcis"
     "scantype"
     "deauth"
     "getNF"
     "getRSSI"
     "bgscan"
     "enable11d"
     "adhocgrate"
     "sdioclock"
     "wmm"
     "uapsdnullgen"
     "setcoalescing"
     "adhocgprot"
     "setpowercons"
     "wmm_qosinfo"
     "lolisteninter"
     "fwwakeupmethod"
     "psnullinterval"
     "bcnmisto"
     "adhocawakepd"
     "moduletype"
     "autodeepsleep"
     "enhanceps"
     "wakeupmt"
     "setrxant"
     "settxant"
     "authalgs"
     "encryptionmode"
     "setregioncode"
     "setlisteninter"
     "setmultipledtim"
     "setbcnavg"
     "setdataavg
     "associate"
     "getregioncode"
     "getlisteninter"
     "getmultipledtim"
     "gettxrate"
     "getbcnavg"
     "getdataavg"
     "getrxant"
     "gettxant"
     "gettsf"
     "wpssession"
     "deepsleep"
     "adhocstop"
     "radioon"
     "radiooff"
     "rmaeskey"
     "crypto_test"
     "reasso-on"
     "reasso-off"
     "wlanidle-on"
     "wlanidle-off"
     "sleepparams"
     "requesttpc"
     "powercap"
     "measreq"
     "bca-ts"
     "scanmode"
     "getadhocstatus"
     "setgenie"
     "getgenie"
     "qstatus"
     "ts_status"
     "setaeskey"
     "getaeskey"
     "version"
     "verext"
     "setwpaie"
     "setband"
     "setadhocch"
     "chanswann"
     "getband"
     "getadhocch"
     "getlog"
     "tpccfg"
     "scanprobes"
     "ledgpio"
     "sleeppd"
     "rateadapt"
     "getSNR"
     "getrate"
     "getrxinfo"
     "atimwindow"
     "bcninterval"
     "sdiopullctrl"
     "scantime"
     "sysclock"
     "txcontrol"
     "hscfg"
     "hssetpara"
     "inactoext"
     "dbgscfg"
     "drvdbg"
     "drvdelaymax"
     "intfctrl"
     "setquietie"
     ""
     "setuserscan"
     "getscantable"
     "setmrvltlv"
     "getassocrsp"
     "addts"
     "delts"
     "qconfig"
     "qstats"
     "txpktstats"
     "getcfptable"
     "mefcfg"
     "getmem"
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP登录表单提交前端验证,form表单提交前先用ajax进行验证(前端)

确 定var csrfToken Yii::$app->request->csrfToken?>;var reg /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;var regNum /^\d{6}$/;function check_form() {n false;//全局变量&#xff0c;以便下面做判断var dirversNum $(#dirversNum).val();var archivesNu…

用鼠标去控制物体移动的方法

using UnityEngine; using System.Collections;public class hero : MonoBehaviour {private bool isMouseDown false;private Vector3 lastMousePositionVector3.zero;void Update () {PlayerControler();}public void PlayerControler(){//将像素位置转换成世界坐标轴的位置…

php获取flash上传视频文件大小,如何获取flash文件(.swf文件)的长度和宽度

Flash文件一般是可以缩放的&#xff0c;但缩放显示会一影响flash的效果&#xff0c;比如动作变慢或变快。要想以最佳状态显示&#xff0c;就需要获取flash文件的长度和宽度&#xff0c;因此要使用方法&#xff1a;引入该文件Require(‘swfheader.class.php’);创建一个类的实例…

mx播放器有没有投屏功能_无线投屏、即插即用,投影仪其实可以更智能:明基 E580T...

无论是简单的办公室会议还是小型的线下活动&#xff0c;投影仪都是必不可少的利器&#xff1a;既能有不错的显示效果&#xff0c;也不用受屏幕尺寸的约束。尽管越来越多的智能电视可供电脑连接&#xff0c;但真正派上用场的时候&#xff0c;拎箱就走的投影仪显然是最佳选择。很…

特殊矩阵-对角矩阵

2019独角兽企业重金招聘Python工程师标准>>> 挖坑。 转载于:https://my.oschina.net/aslanjia/blog/651503

php常见漏洞修复,phpstudy漏洞修复方法

一.通过修改服务器环境内php.ini文件&#xff0c;将“expose_php On”修改成“expose_php Off”然后重启php即可。二.若无需要可以将一些php的危险函数禁用&#xff0c;打开/etc/php.ini文件&#xff0c;查找到 disable_functions&#xff0c;添加需禁用的以下函数名&#xf…

vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10

后期会在博客首发更新&#xff1a;http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 网上的方法多种&#xff0c;有让安装扩展插件的&#xff0c;有让在程序里面添加Http系列的组件&#xff0c;有其它其它的&#xff0c;可是。。。…

matlab脚本 定时停止_一触即发是什么软件?它是手机上极其强大的一款脚本辅助精灵...

一触即发app是手机上极其强大的一款免root的脚本辅助软件&#xff0c;堪称一键秒杀脚本精灵&#xff0c;除自动化、运行、管理外&#xff0c;还提供了脚本制作文字教程/视频教程&#xff0c;学习社区和图色处理、定时执行、王者荣耀、变量等命令参数和多点找色、多点找图、京东…

php无限极,php实现无限极分类 - MyClassPHP-Colin主页 - OSCHINA - 中文开源技术交流社区...

/*** 无限分类* param [type] $model 一个模型对象* param integer $pid 上级ID* param array &$categorys 一个保存结果的数组* param integer $spac 空格循环次数* return [type] array*/function data2array($model null , $pid 0 , &$categorys array() , $spac…

Graph(2014辽宁ACM省赛)

问题 F: Graph 时间限制: 1 Sec 内存限制: 128 MB提交: 30 解决: 5[提交][状态][论坛]题目描写叙述 Your task is to judge whether a regular polygon can be drawn only by straightedge and compass. The length of the straightedge is infinite. The width of the compa…

笔记本电脑处理器_高通提示低成本5G芯片更强大的笔记本电脑处理器

高通公司总裁克里斯蒂亚诺阿蒙(Cristiano Amon)在今天的柏林IFA贸易展览会的虚拟主题演讲中说&#xff0c;我们将很快看到更便宜的5G手机&#xff0c;以及更多具有更好应用兼容性的Windows-on-Snapdragon笔记本电脑。欧洲主要的电子产品展览会IFA今年被分成​​几个小组活动&am…

php分布式的锁,laravel分布式并发锁

环境要求1.PHP > 72.composer3.redis(必须支持lua)4.prediscomposer 安装redis 安装predis 安装composer require predis/predislock 安装第一步, 安装alravel-lockcomposer require nabao/laravel-lock第二步, 生成配置文件php artisan vendor:publish --provider"Loc…

linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API&#xff0c;具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现。#include int gpio_request(unsigned gpio, const char *label);获得并占有 GPIO port 的使用权&#xff0c;由参数 gpio 指定具体 port。非空的label指针有助于诊断。主要告…

为什么6lowpan 要有四个地址_大型监控网络系统如何规划ip地址

本文转自网络对于监控项目来说&#xff0c;很多故障的原因都是跟ip地址设置不当有关&#xff0c;如ip冲突&#xff0c;或者有几路监控图像没有显示等&#xff0c;都是跟ip有一定关联&#xff0c;合理的分配ip地址十分重要。一、为什么要合理分配IP对于小型监控项目来说&#xf…

php 伪静态规则,在线将Apache Rewrite Rules伪静态规则转换为Nginx Rewrite伪静态规则...

一般php的开发者本地使用的都是使用apache服务器&#xff0c;使用伪静态的时候每次都需要转换成nginx rewrite规则&#xff0c;于是做了个在线将Apache htaccess Rewrite伪静态规则自动转换为Nginx Rewrite伪静态规则的工具使用这个工具可以自动的把下面的apache伪静态规则自动…

JAVA中的命令模式实例教程

原文链接 作者&#xff1a;Pankaj Kumar 译者&#xff1a;f0tlo <1357654289qq.com> 命令模式是一种行为模式&#xff0c;因此&#xff0c;它处理的是对象的行为。命令模式为系统中不同的对象提供中性化的交流媒介。根据GoF的定义&#xff0c;命令模式是&#xff1a; 通…

bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇

[toc] 背景介绍 一般情况下&#xff0c;出于省电、权限、合理性等因素考虑&#xff0c;给人的感觉是很多奇怪的需求安卓可以实现&#xff0c;但是iOS就无法实现&#xff01;今天要介绍的需求也有这种感觉&#xff0c;就是“当 APP 处于后台或锁屏状态时&#xff0c;依旧可以监听…

windows php5.3升级,Windows10系统将PHPNOW升级PHP版本为5.3.5

Windows 10发布很久了&#xff0c;现在大多数人都在使用&#xff0c;在WIN10中使用PHPNOW&#xff0c;觉得自带的PHP版本有点低&#xff0c;所以就想升级下&#xff0c;在网上搜索了一些方法&#xff0c;然后结合自己的实际操作&#xff0c;在这里分享下。1、首先要下载PHP5.3.…

在Microsoft Word中,Node是如何替代宏的

最近的30年来&#xff0c;宏&#xff08;macros&#xff09;成为了Microsoft Word的关键卖点。WordBASIC最初是在1989年引入的&#xff0c;它能够让受过极少培训的打字员都能进行计算机编程&#xff0c;从而简化他们的日常工作。\\在那个时代&#xff0c;竞争非常激烈。除了Wor…

igs无法分配驱动器映射表_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...

如果计算机硬盘出现问题&#xff0c;有时不是硬件上出现了错误&#xff0c;很可能只是逻辑上出现了问题&#xff0c;这时就可以使用DiskPart来快速解决。在Windows 10上&#xff0c;当外部存储(例如U盘、可移动硬盘或SD卡)由于数据损坏或其他问题而停止工作时&#xff0c;可以使…