【转】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:

【转】wpa_supplicant与wpa_cli之间通信过程的更多相关文章

  1. tcp/ip 卷一 读书笔记(5)arp和rarp 同网段和不同网段之间的通信过程

    arp和rarp 同网段和不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4. 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址 ...

  2. Web浏览器与Web服务器之间的通信过程

     HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1:建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...

  3. http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤

    http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1)    建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成 ...

  4. 网络中两台主机的通信过程(TCP)

    两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...

  5. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  6. C#利用服务器实现客户端之间通信

    这两天在学习C#,C#高级编程真的是厚厚的一本书QAQ. 昨天看了一下里面的通信部分(其实还没怎么看),看了网上一些人的博客,自己在他们的博客基础上写了一个通信. 先来讲述下我自己对于整个Socket ...

  7. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  8. Java线程之间通信

    用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...

  9. WCF入门教程二[WCF应用的通信过程]

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

随机推荐

  1. 怎么在js中,访问viewbag,viewdata等等的值

    在js中要访问viewbag,viewdata存储的值, var ss='@ViewBag.name'; 一定要加引号,单双随便,还有, ViewBag一定要写规范,不然会编译错误! 成功者的秘诀就是 ...

  2. linux搭建微型git服务器

    1.安装git和git-core yum install git git-core -y 2.创建仓库 mkdir /home/git cd /home/git git init 3.设置可以远程pu ...

  3. css2 [lang|=en] 误区

    [lang|=en] w3c说明:css2选择器,选择以en开头的的lang属性. w3c的这个解释是有误区的,en开头,但是en后面必须要有-,也就是说是选择的是en-开头

  4. http错误码大全?

    响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行.响应码分五种类型,由它们的第一位数字表示:1.1xx:信息,请求收到,继续处理2.2xx:成功,行为被成功地接受.理解和采纳3 ...

  5. 170105、MySQL 性能优化的最佳 20+ 条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  6. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  7. 用PHP调用Oracle存储过程方法

    //建立一个TEST表CREATE TABLE TEST (  ID        NUMBER(16)        NOT NULL,  NAME      VARCHAR2(30)      N ...

  8. php 中文繁简体转换

    <?php $testC = new TestC (); $testC->index (); class TestC { private $utf8_gb2312; private $ut ...

  9. 【转】创建SVN仓库的步骤

    转载地址:http://www.cnblogs.com/ivan0626/p/3783053.html   今天在客户现场联调,两个开发人员之间的代码想用SVN来管理,所以就临时在本地机器上搭建一个S ...

  10. .net 之缓存

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...