九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
wpa_supplicant 初始化流程分析
1. 啟動(dòng)命令

wpa supplicant 在啟動(dòng)時(shí),啟動(dòng)命令可以帶有很多參數(shù),目前我們的啟動(dòng)命令如下:
wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt

wpa_supplicant對(duì)于啟動(dòng)命令帶的參數(shù),用了兩個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)保存,
一個(gè)是 wpa_params, 另一個(gè)是wpa_interface.
這主要是考慮到wpa_supplicant是可以同時(shí)支持多個(gè)網(wǎng)絡(luò)接口的。
wpa_params數(shù)據(jù)結(jié)構(gòu)主要記錄與網(wǎng)絡(luò)接口無(wú)關(guān)的一些參數(shù)設(shè)置。
而每一個(gè)網(wǎng)絡(luò)接口就用一個(gè)wpa_interface數(shù)據(jù)結(jié)構(gòu)來(lái)記錄。
在啟動(dòng)命令行中,可以用-N來(lái)指定將要描述一個(gè)新的網(wǎng)絡(luò)接口,對(duì)于一個(gè)新的網(wǎng)絡(luò)接口,可以用下面六個(gè)參數(shù)描述:
-i<ifname> : 網(wǎng)絡(luò)接口名稱

-c<conf>: 配置文件名稱
-C<ctrl_intf>: 控制接口名稱
-D<driver>: 驅(qū)動(dòng)類型
-p<driver_param>: 驅(qū)動(dòng)參數(shù)
-b<br_ifname>: 橋接口名稱

2. wpa_supplicant 初始化流程

2.1. main()函數(shù):


在這個(gè)函數(shù)中,主要做了四件事。
a.
解析命令行傳進(jìn)的參數(shù)。
b.
調(diào)用wpa_supplicant_init()函數(shù),做wpa_supplicant的初始化工作。
c.
調(diào)用wpa_supplicant_add_iface()函數(shù),增加網(wǎng)絡(luò)接口。
d.
調(diào)用wpa_supplicant_run()函數(shù),讓wpa_supplicant真正的run起來(lái)。

2.2. wpa_supplicant_init()函數(shù):

a.

打開(kāi)debug 文件。
b.
注冊(cè)EAP peer方法。
c.
申請(qǐng)wpa_global內(nèi)存,該數(shù)據(jù)結(jié)構(gòu)作為統(tǒng)領(lǐng)其他數(shù)據(jù)結(jié)構(gòu)的一個(gè)核心, 主要包括四個(gè)部分:
wpa_supplicant *ifaces
   /*每個(gè)網(wǎng)絡(luò)接口都有一個(gè)對(duì)應(yīng)的wpa_supplicant數(shù)據(jù)結(jié)構(gòu),該指針指向最近加入的一個(gè),在wpa_supplicant數(shù)據(jù)結(jié)構(gòu)中有指針指向next*/
wpa_params params
   /*啟動(dòng)命令行中帶的通用的參數(shù)*/
ctrl_iface_global_priv *ctrl_iface
/*global 的控制接口*/
ctrl_iface_dbus_priv *dbus_ctrl_iface
  /*dbus 的控制接口*/
d.
設(shè)置wpa_global中的wpa_params中的參數(shù)。
e.
調(diào)用eloop_init函數(shù)將全局變量eloop中的user_data指針指向wpa_global。
f.
調(diào)用wpa_supplicant_global_ctrl_iface_init函數(shù)初始化global 控制接口。
g.
調(diào)用wpa_supplicant_dbus_ctrl_iface_init函數(shù)初始化dbus 控制接口。
h.
將該daemon的pid寫(xiě)入pid_file中。

2.3. wpa_supplicant_add_iface()函數(shù):

該函數(shù)根據(jù)啟動(dòng)命令行中帶有的參數(shù)增加網(wǎng)絡(luò)接口, 有幾個(gè)就增加幾個(gè)。
a.
因?yàn)閣pa_supplicant是與網(wǎng)絡(luò)接口對(duì)應(yīng)的重要的數(shù)據(jù)結(jié)構(gòu),所以,首先分配一個(gè)wpa_supplicant數(shù)據(jù)結(jié)構(gòu)的內(nèi)存。
b.
調(diào)用wpa_supplicant_init_iface() 函數(shù)來(lái)做網(wǎng)絡(luò)接口的初始工作,主要包括:
設(shè)置驅(qū)動(dòng)類型,默認(rèn)是wext;
讀取配置文件,并將其中的信息設(shè)置到wpa_supplicant數(shù)據(jù)結(jié)構(gòu)中的conf 指針指向的數(shù)據(jù)結(jié)構(gòu),它是一個(gè)wpa_config類型;
命令行設(shè)置的控制接口ctrl_interface和驅(qū)動(dòng)參數(shù)driver_param覆蓋配置文件里設(shè)置,命令行中的優(yōu)先;
拷貝網(wǎng)絡(luò)接口名稱和橋接口名稱到wpa_config數(shù)據(jù)結(jié)構(gòu);
對(duì) 于網(wǎng)絡(luò)配置塊有兩個(gè)鏈表描述它,一個(gè)是 config->ssid,它按照配置文件中的順序依次掛載在這個(gè)鏈表上,還有一個(gè)是pssid,它是一個(gè)二級(jí)指針,指向一個(gè)指針數(shù)組,該指針數(shù)組 按照優(yōu)先級(jí)從高到底的順序依次保存wpa_ssid指針,相同優(yōu)先級(jí)的在同一鏈表中掛載。
c.
調(diào)用wpa_supplicant_init_iface2() 函數(shù),主要包括:
調(diào)用wpa_supplicant_init_eapol()函數(shù)來(lái)初始化eapol;
調(diào)用相應(yīng)類型的driver的init()函數(shù);
設(shè)置driver的param參數(shù);
調(diào)用wpa_drv_get_ifname()函數(shù)獲得網(wǎng)絡(luò)接口的名稱,對(duì)于wext類型的driver,沒(méi)有這個(gè)接口函數(shù);
調(diào)用wpa_supplicant_init_wpa()函數(shù)來(lái)初始化wpa,并做相應(yīng)的初始化工作;
調(diào)用wpa_supplicant_driver_init()函數(shù),來(lái)初始化driver接口參數(shù);在該函數(shù)的最后,會(huì)
wpa_s->prev_scan_ssid = BROADCAST_SSID_SCAN;

wpa_supplicant_req_scan(wpa_s, interface_count, 100000);


來(lái)主動(dòng)發(fā)起scan,
調(diào)用wpa_supplicant_ctrl_iface_init()函數(shù),來(lái)初始化控制接口;對(duì)于UNIX SOCKET這種方式,其本地socket文件是由配置文件里的ctrl_interface參數(shù)指定的路徑加上網(wǎng)絡(luò)接口名稱;

2.4. wpa_supplicant_run()函數(shù):

初始化完成之后,讓wpa_supplicant的main event loop run起來(lái)。
在 wpa_supplicant中,有許多與外界通信的socket,它們都是需要注冊(cè)到eloop event模塊中的,具體地說(shuō),就是在eloop_sock_table中增加一項(xiàng)記錄,其中包括了sock_fd, handle, eloop_data, user_data。
eloop event模塊就是將這些socket組織起來(lái),統(tǒng)一管理,然后在eloop_run中利用select機(jī)制來(lái)管理socket的通信。

3. wpa_supplicant 的對(duì)外接口分析

對(duì)于wpa_supplicant模塊的對(duì)外接口,主要有以下幾種:
3.1
. global control interface: 用于配置(增加或刪除)網(wǎng)絡(luò)接口。
3.2
. ctrl interface: 與其他外部模塊交互的控制接口。
例 如,在初始化時(shí),android 平臺(tái)的wifi.c中的 wifi_connect_to_supplicant函數(shù)調(diào)用wpa_ctrl_open函數(shù)創(chuàng)建兩個(gè)socket,一個(gè)是ctrl interface,另一個(gè)就是monitor interface,monitor interface這個(gè)接口用于監(jiān)測(cè)從wpa_supplicant發(fā)出的event事件。
這兩個(gè)socket創(chuàng)建成功后,monitor interface 會(huì)發(fā)送ATTACH到wpa_supplicant模塊,wpa_supplicant模塊收到后,會(huì)將該客戶端的socket信息記錄下來(lái),用于以后發(fā)送事件時(shí)用(由于用的是DGRAM的方式)。
3.3
. socket for ioctl: 發(fā)送命令到kernel space。
3.4
. socket (netlink) for interact between kernel and userspace(AF_NETLINK, NETLINK_ROUTE): 接受kernel發(fā)送上來(lái)的event。
3.5
. socket for l2 packet(PF_PACKET): 處理802.1x報(bào)文。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
android wpa_supplicant 流程分析
wifi詳解(一)
hostapd 0.4.8 筆記
Raspberry Pi樹(shù)莓派無(wú)線網(wǎng)卡配置[多重方法備選]
瘋狂的技術(shù)宅手機(jī)改wifi天線變身超級(jí)wifi密碼掃描儀
手把手教你通過(guò)串口調(diào)試模塊連接wifi
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服