【转】wpa_supplicant与wpa_cli之间通信过程

转自:http://blog.chinaunix.net/uid-26585427-id-4051479.html

wpa_supplicant编译:

1. wpa_supplicant/Android.mk :

-- wpa_cli

-- wpa_supplicant

-- libwpa_client.so

2. hostapd/Android.mk :

-- hostapd_cli

-- hostapd

  从通信层次上划分,wpa_supplicant提供向上的控制接口 control interface,用于与其他模块(如UI)进行通信,其他模块可以通过control interface 来获取信息或下发命令。wpa_supplicant通过socket通信机制实现下行接口,与内核进行通信,获取信息或下发命令。

上行接口:

wpa_supplicant提供两种方式的上行接口。一种基于传统dbus机制实现与其他进程间的IPC通信;另一种通过Unix domain socket机制实现进程间的IPC通信。

(1)   Dbus

(2)   Socket

该接口主要在文件”wpa_ctrl.h”,“wpa_ctrl.c”,“ctrl_iface_unix.c”,“ctrl_iface.h”和“ctrl_iface.c”实现。

1. “wpa_ctrl.h”,“wpa_ctrl.c”完成对control interface的封装,对外提供统一的接口。其主要的工作是通过Unix domainsocket建立一个controlinterface 的client结点,与作为server的wpa_supplicant结点通信。

wpa_supplicant 提供两种由外部模块获取信息的方式:一种是外部模块通过发送request 命令然后获取response的问答模式,另一种是wpa_supplicant主动向外部发送event事件,由外部模块监听接收。

一般的常用做法是外部模块通过调用wpa_ctrl_open()两次,分别建立两个control interface接口。一个为ctrl interface,用于发送命令,获取信息。然后,将另外一个接口作为参数,调用wpa_ctrl_attach,成为 monitor interface,用于监听接收来自于wpa_supplicant的event事件。此举可以降低通信的耦合性,避免response和event的相互干扰。

2. “ctrl_iface_unix.c”实现wpa_supplicant的Unix domain socket通信机制中server结点,完成对client结点的响应。

3. “ctrl_iface.h”和“ctrl_iface.c”主要实现了各种request命令的底层处理函数。

下行接口:

wpa_supplicant提供的下行接口主要用于和kernel(driver)进行通信,下发命令和获取信息。

wpa_supplicant下行接口主要包括三种重要的接口:

1.    PF_INET socket接口,主要用于向kernel 发送ioctl命令,控制并获取相应信息。

2.    PF_NETLINK socket接口,主要用于接收kernel发送上来的event 事件。

3.    PF_PACKET socket接口,主要用于向driver传递802.1X报文。

(1)“driver.h”,“drivers.c”主要用于封装底层差异对外显示一个相同的wpa_driver_ops接口。wpa_supplicant可支持atheros, broadcom, madwifi, ndis,nl80211, wext等多种驱动。

(2)“driver_nl80211.c”实现了nl80211形式的wpa_driver_ops,并创建了PF_INET socket接口和PF_NETLINK socket接口,然后通过这两个接口完成与kernel的信息交互。

wpa_driver_nl80211_event_receive函数

:处理kernel主动发送的event事件的 callback 函数 */

(3)“l2_packet.h”和“l2_packet_linux.c”主要用于实现PF_PACKET socket接口,通过该接口,wpa_supplicant可以直接将802.1X packet发送到L2层,而不经过TCP/IP协议栈。

Wpa_wupplicant Main Flow:

Wpa_supplicant Structure Diagram:

最新文章

  1. MySQL存储过程与存储函数的区别
  2. 研究Mysql优化得出一些建设性的方案
  3. JavaScript验证函数大全
  4. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.1 Index用户列表]
  5. CSS图片翻转例子
  6. team geek
  7. 【bzoj3514】Codechef MARCH14 GERALD07加强版
  8. Android项目中gen文件下R文件无法生成的解决的方法
  9. java poi 导出Excel文件
  10. linuxmint卸载软件
  11. day17:递归函数
  12. C++/MFC-线程优先级
  13. MPD软件工作坊北京站:技术创新与研发效率带来的前沿思考
  14. Jmeter分布式压力测试
  15. JAVA循环语句
  16. orika实现对象复制
  17. CodeBlocks 17.12 工程如何引用其他文件夹的头文件和源程序
  18. 使用jquery插件validate制作的表单验证案例
  19. 使用matplotlib绘图(二)之柱状图
  20. JS回调函数(深入篇)

热门文章

  1. font-family styles
  2. 。。。IO流学习之二。。。
  3. Windows Phone 二十一、联系人存储
  4. 【C#】时间戳转换
  5. 移动设备如何打开RMS加密的文档
  6. YII2.0 Activeform表单组件的使用方法
  7. 二十八、Java基础--------正则表达式
  8. vbs 中文字符串
  9. 【转】Git图形化界面客户端大汇总
  10. springMVC下集成active MQ发送邮件