版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gh201030460222/article/details/83067155 </div>
<div id="content_views" class="markdown_views prism-atom-one-dark">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
<h1><a name="t0"></a><a id="wpa_supplicant_0" target="_blank"></a>wpa_supplicant整体通信架构</h1>
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连接的四次握手处理。
wpa_supplicant整体通信架构
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet">
</div>