单独拿出来,分析以下上层应用与wpa_supplicant   wpa_supplicant与kernel 的socket交互。

关联上层应用与wpa_supplicant的socket的创建、连接流程分析

[-->./wpa_supplicant/ctrl_iface_unix.c]

1.wpa_supplicant初始化时,在wpa_supplicant_ctrl_iface_init方法中,会通过priv->sock = socket(PF_UNIX, SOCK_DGRAM, 0); 创建了一个socket,然后bind到指定的地址中的路径(/data/misc/wifi/sockets/p2p0)。

这之后,便会把socket的fd保存到eloop_run中发rfds中了。由select监听变化。

2.然后在打开wifi之后,应用层会去连接wpa_supplicant,在wifi.c:: wifi_connect_to_supplicant--->wifi_connect_on_socket_path方法中,会创建ctrl_conn与monitor_conn来和wpa_supplicant交互,它们各自通过wpa_ctrl_open方法创建了一个socket(它们的目的端地址路径都是/data/misc/wifi/sockets/p2p0,可在wifi_connect_to_supplicant方法中打log查看)。然后,通过bind、connect方法与wpa_supplicant初始化时创建的priv->sock建立了连接。

ps:之前已经讨论过monitor_conn的作用是监听wpa_supplicant传递过来的消息。为什么呢,其实是因为通过wpa_ctrl_attach(monitor_conn[index])语句,将monitor_conn中的socket信息(包括源端地址)保存到wpa_supplicant的某个链表结构中,这样wpa_supplicant就能通过socket发送消息给上层应用了。

贴出部分log:

//wpa_supplicant初始化时,创建的socket关联的路径
D/wpa_supplicant(): cb---addr.sun_path is wpa_/data/misc/wifi/sockets
D/wpa_supplicant(): cb---addr.sun_path is /data/misc/wifi/sockets/p2p0
D/wpa_supplicant(): cb---addr.sun_path is wpa_wlan0
//创建ctrl_conn和monitor_conn时,socket关联的源端、目的端地址
I/wpa_ctrl(): cb---fd is , ctrl->local.sun_path is /data/misc/wifi/sockets/wpa_ctrl_595-, ctrl->dest.sun_path is /data/misc/wifi/sockets/p2p0
I/wpa_ctrl(): cb---fd is , ctrl->local.sun_path is /data/misc/wifi/sockets/wpa_ctrl_595-, ctrl->dest.sun_path is /data/misc/wifi/sockets/p2p0

关联kernel与wpa_supplicant的socket的创建流程分析        ---可参考” wpa_supplicant与kernel交互"

因为在”保存驱动接口”,select_driver方法中调用了global_init方法(会根据用户态的结构体wpa_driver_nl80211_ops中查找对应方法,即nl80211_global_init)。

在nl80211_global_init方法中,有两条关键语句:

//(1) 初始化netlink,并注册事件接收函数
global->netlink = netlink_init(cfg); //(2) 此global->ioctl_sock用作为ioctl命令的fd
global->ioctl_sock = socket(PF_INET, SOCK_DGRAM, );

(1)netlink_init方法中创建了一个socket,并添加到eloop_run方法中的rfds中。用于从kernel态发送事件给用户态

netlink->sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
......
eloop_register_read_sock(netlink->sock, netlink_receive, netlink,NULL); 

(2)该socket用于从用户态发送请求给kernel态

上层应用与wpa_supplicant,wpa_supplicant与kernel 相关socket创建交互分析的更多相关文章

  1. Linux kernel 之 socket 创建过程分析

    重要结构体 struct socket 结构体 // 普通的 BSD 标准 socket 结构体 // socket_state: socket 状态, 连接?不连接? // type: socket ...

  2. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  3. List 接口以及实现类和相关类源码分析

    List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除( ...

  4. Linux Kernel ‘/net/socket.c’本地信息泄露漏洞

    漏洞名称: Linux Kernel ‘/net/socket.c’本地信息泄露漏洞 CNNVD编号: CNNVD-201312-037 发布时间: 2013-12-04 更新时间: 2013-12- ...

  5. wxWidgets的安装编译、相关配置、问题分析处理

    wxWidgets的安装编译.相关配置.问题分析处理 一.介绍部分 (win7 下的 GUI 效果图见 本篇文章的最后部分截图2张) wxWidgets是一个开源的跨平台的C++构架库(framewo ...

  6. Android Camera 通过V4L2与kernel driver的完整交互过程

    http://blog.chinaunix.net/uid-26215986-id-3552456.html 原文地址:Android Camera 通过V4L2与kernel driver的完整交互 ...

  7. Mysql基础(一):Mysql初识、基本指令、数据库密码相关、创建用户及授权

    来源:https://www.cnblogs.com/liubing8/p/11432534.html 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 ...

  8. 数据库01 /Mysql初识、基本指令、数据库密码相关、创建用户及授权

    数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 2. 数据库管理系统/DBMS ...

  9. kvm三个kernel相关的调优

    今天在杭州参加淘宝嘉年华技术沙龙,主题是虚拟化和云计算,三个讲演: 淘宝网子团分享淘宝kvm技术的使用 华为的杨晓伟介绍虚拟化技术 阿里云郑永升介绍弹性云计算技术 其中KVM 调优,三点值得关注的: ...

随机推荐

  1. CentOS7 使用chrony搭建集群中的时间同步服务

    一.集群环境: 系统:CentOS7-minimal 集群中的两台主机ip:10.132.226.103/24  10.132.226.104/24 二.CentOS7中时间相关命令timedatec ...

  2. 简单的mongo小工具 python

    #!/bin/python #coding=utf-8 ### eg : mgotool.py -i 127.0.0.1 -p 10001 -a xxxxx -u root -rc #import s ...

  3. JS 原型总结

    参考: (从内存角度)简单类型与复杂类型及原型链

  4. gg_pie

    gg_pie gg_pie PeRl 今天尝试了一下用ggplot2画饼图,转换一下极坐标就可以实现,但是和以前画heatmap的时候不一样的是,我们在卷坐标的时候需要让数据集中在一个坐标轴上. 另一 ...

  5. 四则运算_EX

    在原有四则运算基础上,除整数以外要支持真分数运算(验证正确性) 一次出的题避免相互重复 可定制出题数目 #include <stdio.h>#include <stdlib.h> ...

  6. 笔记Equals的位置区别

    String name=“add”: //值相同或不同时,效果相同 boolean flay=name.equals("add"): boolean flay2="add ...

  7. 一起来写段JS drag代码

    http://www.cnblogs.com/275095923/archive/2010/12/09/1901352.html

  8. Caliburn.Micro 杰的入门教程5,Window Manager 窗口管理器

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...

  9. Uber优步北京第二、三组奖励政策

    优步北京第二.三组: 定义为​2015年6月1日至今激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最 ...

  10. 全国Uber优步司机奖励政策 (12月28日-1月3日)

    本周已经公开奖励整的城市有:北 京.成 都.重 庆.上 海.深 圳.长 沙.佛 山.广 州.苏 州.杭 州.南 京.宁 波.青 岛.天 津.西 安.武 汉.厦 门,可按CTRL+F,搜城市名快速查找. ...