日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/8 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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"
};

?

總結

以上是生活随笔為你收集整理的iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。