日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/8 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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所有扩展参数的全部內容,希望文章能夠幫你解決所遇到的問題。

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