android wifi-wpa_supplicant_源码分析(三)

二、无线信息传递——user space下的hostapd至kernel space的信息传递 系列说明  上一篇文章说明了hostapd代码的初始化,程序信息处理框架以及hostapd的回调处理机制,以此大致了解hostapd的程序执行流程。   这一篇我们对hostapd怎么将配置信息传递至kernel环境下,使无线驱动能运用这些user space下的配置信息进行组帧这个问题进行解答。   接下来三篇为一个系列,主要针对以下3点进行一个顺序的描述: 1、无线驱动信息传递框架:说明无线 阅读详情

三、wpa_driver_ops内部定义很多函数指针,通过这些定义的函数指针,WPAS能隔离上层使用者和具体的driver。
    const struct wpa_driver_ops wpa_driver_nl80211_ops = {
        .name = "nl80211",        //driver wrapper的名称
        .desc = "Linux nl80211/cfg80211",    //描述信息
        .get_bssid = wpa_driver_nl80211_get_bssid,    //用于获取 bssid
        .get_ssid = wpa_driver_nl80211_get_ssid,
        .set_key = driver_nl80211_set_key,
        .scan2 = driver_nl80211_scan2,    //扫描函数
        .sched_scan = wpa_driver_nl80211_sched_scan,
        .stop_sched_scan = wpa_driver_nl80211_stop_sched_scan,
        .get_scan_results2 = wpa_driver_nl80211_get_scan_results,    //获取扫描结果
        .deauthenticate = driver_nl80211_deauthenticate,
        .authenticate = driver_nl80211_authenticate,    //触发 authentication 操作
        .associate = wpa_driver_nl80211_associate,    //触发 association 操作
        .global_init = nl80211_global_init,    //driver wrapper 全局初始化函数,该函数的返回值保存在 wpa_global 成员变量 drv_pri 数组中
        .global_deinit = nl80211_global_deinit,
        .init2 = wpa_driver_nl80211_init,    //driver wrapper 初始化函数
        .deinit = driver_nl80211_deinit,
        .get_capa = wpa_driver_nl80211_get_capa,
        .set_operstate = wpa_driver_nl80211_set_operstate,
        .set_supp_port = wpa_driver_nl80211_set_supp_port,
        .set_country = wpa_driver_nl80211_set_country,
        .get_country = wpa_driver_nl80211_get_country,
        .set_ap = wpa_driver_nl80211_set_ap,
        .set_acl = wpa_driver_nl80211_set_acl,
        .if_add = wpa_driver_nl80211_if_add,
        .if_remove = driver_nl80211_if_remove,
        .send_mlme = driver_nl80211_send_mlme,
        .get_hw_feature_data = wpa_driver_nl80211_get_hw_feature_data,
        .sta_add = wpa_driver_nl80211_sta_add,
        .sta_remove = driver_nl80211_sta_remove,
        .hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol,
        .sta_set_flags = wpa_driver_nl80211_sta_set_flags,
        .hapd_init = i802_init,
        .hapd_deinit = i802_deinit,
        .set_wds_sta = i802_set_wds_sta,
        .get_seqnum = i802_get_seqnum,
        .flush = i802_flush,
        .get_inact_sec = i802_get_inact_sec,
        .sta_clear_stats = i802_sta_clear_stats,
        .set_rts = i802_set_rts,
        .set_frag = i802_set_frag,
        .set_tx_queue_params = i802_set_tx_queue_params,
        .set_sta_vlan = driver_nl80211_set_sta_vlan,
        .sta_deauth = i802_sta_deauth,
        .sta_disassoc = i802_sta_disassoc,
        .read_sta_data = driver_nl80211_read_sta_data,
        .set_freq = i802_set_freq,
        .send_action = driver_nl80211_send_action,
        .send_action_cancel_wait = wpa_driver_nl80211_send_action_cancel_wait,
        .remain_on_channel = wpa_driver_nl80211_remain_on_channel,
        .cancel_remain_on_channel =    wpa_driver_nl80211_cancel_remain_on_channel,
        .probe_req_report = driver_nl80211_probe_req_report,
        .deinit_ap = wpa_driver_nl80211_deinit_ap,
        .deinit_p2p_cli = wpa_driver_nl80211_deinit_p2p_cli,
        .resume = wpa_driver_nl80211_resume,
        .send_ft_action = nl80211_send_ft_action,
        .signal_monitor = nl80211_signal_monitor,
        .signal_poll = nl80211_signal_poll,
        .send_frame = nl80211_send_frame,
        .shared_freq = wpa_driver_nl80211_shared_freq,
        .set_param = nl80211_set_param,
        .get_radio_name = nl80211_get_radio_name,
        .add_pmkid = nl80211_add_pmkid,
        .remove_pmkid = nl80211_remove_pmkid,
        .flush_pmkid = nl80211_flush_pmkid,
        .set_rekey_info = nl80211_set_rekey_info,
        .poll_client = nl80211_poll_client,
        .set_p2p_powersave = nl80211_set_p2p_powersave,
        .start_dfs_cac = nl80211_start_radar_detection,
        .stop_ap = wpa_driver_nl80211_stop_ap,
    #ifdef CONFIG_TDLS
        .send_tdls_mgmt = nl80211_send_tdls_mgmt,
        .tdls_oper = nl80211_tdls_oper,
    #endif /* CONFIG_TDLS */
        .update_ft_ies = wpa_driver_nl80211_update_ft_ies,
        .get_mac_addr = wpa_driver_nl80211_get_macaddr,
        .get_survey = wpa_driver_nl80211_get_survey,
        .status = wpa_driver_nl80211_status,
        .switch_channel = nl80211_switch_channel,
    #ifdef ANDROID_P2P
        .set_noa = wpa_driver_set_p2p_noa,
        .get_noa = wpa_driver_get_p2p_noa,
        .set_ap_wps_ie = wpa_driver_set_ap_wps_p2p_ie,
    #endif /* ANDROID_P2P */
    #ifdef ANDROID
        .driver_cmd = wpa_driver_nl80211_driver_cmd,    //用于处理和具体驱动相关的命令
    #endif /* ANDROID */
        .vendor_cmd = nl80211_vendor_cmd,
        .set_qos_map = nl80211_set_qos_map,
        .set_wowlan = nl80211_set_wowlan,
        .roaming = nl80211_roaming,
        .set_mac_addr = nl80211_set_mac_addr,
    };

linux基于802.11的wifi扫描流程 对于从kernel to user的通讯,采用的是广播的形式,只要user program监听了,都能收到。netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息。Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。基本解析原理同wpa_parse_wpa_ie_rsn,差异之处为具体协议。 阅读详情

相关推荐

安卓15 wifi 打开源码分析-从上层到wifi驱动及wpa_supplicant启动

以高通 wifi 驱动为例,insmod 的时候会调用 hdd_driver 的 init 函数,其会调用对外的字符设备驱动提供的 write 函数wlan_hdd_state_ctrl_param_write。一般在 boot 阶段 wifi 驱动已经安装了,这里主要是调用字符设备驱动写接口告诉 hdd_driver wifi 打开了。wifi 设置获取到 WifiManager 这个代理调用setWifiEnabled 打开 wifi。向状态机发送CMD_WIFI_TOGGLED 消息。

通信开发 1507

【转载】wifi详解(一)

作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。

茫茫大士的专栏 611

Android wifi探究二:Wifi framework层源码分析

上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客非常肤浅的支出了wifi代码的结构,仅此而已,那么这篇博客,将尝试梳理wifi的java层框架。

阳光玻璃杯 1万+

用户层调用nl80211的例子

nl80211 是基于 802.11 netlink 的用户空间接口,用于无线硬件的新 cfg80211 配置系统。它们一起旨在取代旧的无线扩展。

dengxinfa的博客 3426

Android wifi源码分析(二) Wifi关闭流程

接着上一篇,这篇说一下Wifi的关闭流程。 由上一篇可以知道,framework层提供的wifi开关接口都是**setWifiEnabled**,只是参数不同而已。*true*表示开启wifi、*false*表示关闭wifi。

奋斗的菜鸟ing 3300

Android 5.1系统源码Wifi模块中wifiSettings源码分析

在谷歌提供的安卓源码中,网址如下:http://androidxref.com ,初学者学习,分析,留疑问,并且长期更新,修改错误,补充。 安卓的系统wifi模块,一般在设置----->Wifi中 WifiSettings显示的就是打开wifi的那个界面

leafact的专栏 1万+

Android Wi-Fi源码分析之wpa_supplicant初始化(一)

一. wpa_supplicant配置编译将对应的平台的wpa_supplicant包解压改名为wpa_supplicant_8替换掉external下的wpa_supplicant_8目录 执行: source build/envsetup.sh lunch qiyang_6dq-user根据平台定制所需要的wpa_supplican版本, 修改: BoardConfig.mk

迷之月光的专栏 5453

【Android-WIFI】(五) Roaming机制HAL层源码分析

我们首先来看看 wpa_supplicant 进程的初始化。在 wpa_supplicant 进程的 main 函数中,初始化了 wpa_global 对象供整个进程使用。wpa_supplicant 进程主要是向上接受上层关于 WiFi 的请求,然后向下层内核驱动发送通信。所以这里通过 IO 多路复用来轮询监听相应的事件。wpa_global 中的 每一个 wpa_supplicant 对象都是一个 wpa_supplicant 接口,其中都配置了对应的驱动接口。可选驱动如上图所示。

CHENDONGHAO1105的博客 1221

Wifi模块—源码分析Wifi启动(Android P)

一、前言 Android P在wifi这块改动挺大的,Wifi到AndoidO之后不再使用jni,所以AndroidP也一样不再使用jni来实现Java代码与本地的C/C++代码交互,而是使用HIDL,Hardware Interface Define Language。摒弃了以前的hardware/libhardware_legacy/wifi/wifi.c作为底层接口,所以得重新梳理下整个w...

BOJUE01的专栏 2604

Wifi wpa_supplicant 到驱动的联系

Int wpa_driver_wext_scan(void *priv, const u8 *ssid,size_t ssid_len)中的LINE1174:if(ioctl(drv->ioctl_sock,SIOCSIWWSCAN,&iwr) < 0)从这里可以看出wpa_supplicant是通过IOCTL来调用SOCKET与driver进行通信的,并给DRIVER下达SIOCSIWSCAN这个命令。//创建了接受wpa_supplicant 的socket接口。//这个函数超级重要,后面详细的看。

手机-手表蓝牙开发工程师的博客 1451

可微编程:当深度学习遇见物理定律,重塑科学计算新范式

本文探讨了可微编程如何将深度学习与物理定律相结合,重塑科学计算范式。通过自动微分技术,它将物理方程融入可微计算图,使模型在数据驱动的同时遵守物理约束。文章以神经常微分方程为例,阐述了其在连续系统建模、科学模拟器优化等领域的应用,并分析了当前面临的挑战与最佳实践路径。

weixin_29056145的博客 134

Wifi模块—源码分析Wifi启动1(Android P)

一 前言       android框架层的函数调用是出了名的绕,开发者可能因为各种原因比如避免冲突、条件判断、函数封装等等各种各样需要考虑的因素而使得框架层的方法调用显得比较长,所以看源码的时候先看大体流程,有需要再深入某些重要的细节。不然一入源码深似海,会淹没在茫茫源码中。繁杂的东西,自己只要不凌乱,找好线索,进行总结,便会简单。   二 图示调用流程                ...

风雨与阳光 1万+

Slurm集群调度策略详解(1)-主调度

Slurm调度系统中针对作业的调度主要有三种,主调度,回填调度,GANG调度,这篇文章主要针对主调度进行解析。

h_m_l的博客 6031

Wifi模块—源码分析Wifi启动2(Android P)

 一 前言    在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程。如果没有看上一篇的建议先回头看看   Wifi模块—源码分析Wifi启动1(Android P)这样能更好地认知和把握wifi的启动过程。   二 图示调用流程     这个调用流程图也是基于上一篇的流程图进一步完善的得到的。   三 代码具体流程 1 应...

风雨与阳光 5407

Silvaco TCAD仿真4——DeckBuild实战:从示例库到自定义设计

本文详细介绍了Silvaco TCAD仿真工具DeckBuild的实战应用,从示例库的使用到自定义设计的全过程。通过具体案例和参数修改技巧,帮助用户快速掌握TCAD仿真技术,提升半导体器件设计的效率和精度。特别适合需要从基础入门到进阶操作的工程师和研究人员。

weixin_29284657的博客 435

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4690

android wifi-wpa_supplicant_源码分析(一)

wpa_supplicant 是一个开源软件项目,它实现了 Station 对无线网络进行管理和控制的功能。一、main函数分析 (/external/wpa_supplicant_8/wpa_supplicant/main.c) int main(int argc, char *argv[]) { int c, i; struct wpa_interface *ifaces, *iface; int iface_count, exit...

D_Procedural_Life的博客 1256

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 336

Android wpa_supplicant源码分析–扫描scan过程

1 扫描过程 一个完整的扫描过程 下发命令–>wpa_s构建扫描参数–>驱动扫描–>wpa_s接收到驱动的扫描结果 接收到framework/wpa_cli下发的SCAN命令 if (os_strncmp(buf, "SCAN ", 5) == 0) { wpas_ctrl_scan(wpa_s, buf + 5, reply, reply_size, &am...

kv110的专栏 3320

SoulX-FlashHead 加速实践,提升3倍。

SoulX-FlashHead 加速实践,提升3倍。

jacke121的专栏 224

llama2-7b下载并转llama-2-7b-hf

④输入https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py会下载 convert_llama_weights_to_hf.py 文件,我们需要用到这个文件将llama2-7b转成llama-2-7b-hf。③下载完之后是这四个文件,这里我是在windows操作系统中安装的WSL,没有linux操作系统,没办法。

wenling54321的博客 1031

Android wpa_supplicant 源码分析一 -- 简介

官方介绍地址:http://w1.fi/wpa_supplicant/devel/index.html 简介: wpa_supplicant 是适用于 Linux、BSD、Mac OS X 和 Windows 的 WPA 请求方,支持 WPA 和 WPA2 (IEEE 802.11i / RSN)。它适用于台式机/笔记本电脑和嵌入式系统。Supplicant 是客户端工作站中使用的 IEEE 802.1X/WPA 组件。它与 WPA Authenticator 实现密钥协商,并控制 wlan 驱动程序.

fangrui2005的博客 1299

【学习系列】SAP RAP 7:行为定义-Draft

本文介绍了RAP框架中的草稿表(Draft)功能及其应用。草稿表允许用户临时保存数据,在激活前不影响业务逻辑,支持保存继续、暂存和设备切换功能。草稿分为独占草稿(仅限同一用户编辑)和协作草稿(允许多用户协同编辑)。启用草稿需在行为定义和投影中包含标准action,并创建包含TotalETag等管理字段的草稿表。TotalETag确保草稿转换时活动数据未被修改,而ETagmaster则防止并发修改。文章通过OData调用示例详细说明了ETag验证过程,强调草稿功能由RAP框架自动处理,开发者只需关注定义和配置

DeveloperMrMeng的博客 443

Android wifi源码分析(一) Wifi启动流程

最近在解决wifi的一些问题,故研究下wifi源码。 该源码是基于Android4.3,其他版本略有改动,大致流程一样。 这篇主要说一下wifi的启动流程。

奋斗的菜鸟ing 5046

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android wifi-wpa_supplicant_源码分析(二)

二、几种重要的结构体: 1、wpa_interface 用于描述一个无线网络设备(/external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_i.h) struct wpa_interface { /** * confname - Configuration name (file or profile) name * * This ...

D_Procedural_Life的博客 966

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android wpa_supplicant 源码分析四 -- wpa_supplicant_add_iface()

wpa_supplicant_add_iface() wpa_supplicant_init_iface(wpa_s, &t_iface) // 读取wpa_supplicant.conf配置文件, /data/vendor/wifi/wpa/wpa_supplicant.conf , /vendor/etc/wifi/wpa_supplicant_overlay.conf wpa_config_read(w...

fangrui2005的博客 934

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: android wifi-wpa_supplicant_源码分析(二)
下一篇: WIFI通信-笔记整理
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值