wpa_supplicant整體通信架構
wpa_supplicant的啟動flow目前網絡上已經有一堆了,就不列舉了,這裡主要說一下啟動時,interface有哪些,作用如何,以及整體上下的通信。
wpa_supplicant在啟動時,會初始化三個interface,用于跟上下層進行通信,其中有driver interface、L2 interface、 control interface。
三個interface的作用如下:
1, init driver interface:處理kernel與wpa_supplicant之間的cmd跟event
2, init L2 interface: 處理EAPOL Frame與kernel通信(密碼認證4次握手過程)
3, init control interface: 處理上層與wpa_supplicant cmd與event通信
以Android wpa_supplicant為例:
當啟動wpa_supplicant時,會建立3個socket,分别為:/data/system/wpa_supplicant/wlan0、/data/misc/wifi/sockets/wlan0、/data/misc/wifi/sockets/p2p0,其中/data/misc/wifi/sockets/wlan0與/data/misc/wifi/sockets/p2p0是同級關系,隻是功能不一樣,這裡隻說明一下wlan0即可。
此時,
control interface ---->> /data/system/wpa_supplicant/wlan0
L2\driver interface ---->> /data/misc/wifi/sockets/wlan0(/data/misc/wifi/sockets/p2p0)
當上層的WifiMonitor去連接配接到wpa_supplicant時,會建立/data/misc/wifi/sockets/wpa_xxx1與/data/misc/wifi/sockets/wpa_xxx2兩個sockets,這兩個socket都連接配接到/data/system/wpa_supplicant/wlan0。
其中一個用于上層往wpa_supplicant發送指令。另一個用于監聽wpa_supplicant發上來的events。
而内部則是建立兩個socket, L2 socket與 driver socket,連接配接到/data/misc/wifi/sockets/wlan0(/data/misc/wifi/sockets/p2p0),driver socket用于wpa_supplicant與kernel driver進行指令、消息的監聽,L2 socket用于ap連接配接的四次握手處理。