OpenHarmony角落里的知识:WPA_Supplicant连接方式

  WPA_Supplicant连接方式简析

#创作者激励# #跟着小白一起学鸿蒙# WPA_Supplicant连接方式简析-鸿蒙开发者社区

/third_party/wpa_supplicant
|-- CONTRIBUTIONS            # 贡献说明
|-- COPYING               # 版权说明
|-- wpa_supplicant-2.9          # 轻量级系统的wpa_supplicant
|  |-- hostapd             # Wi-Fi热点相关功能(Access Point)
|  |-- hs20               # 热点2.0(Hotspot2.0)相关功能
|  |-- src               # Wi-Fi热点与Wi-Fi接入点共用的代码
|  |-- wpa_supplicant          # Wi-Fi接入相关功能(Station)
|  `-- wpa_supplicant_lib        # OpenHarmony对Wi-Fi新开发的业务代码
`-- wpa_supplicant-2.9_standard     # 标准系统的wpa_supplicant
|  |-- hostapd             # Wi-Fi热点相关功能(Access Point)
|  |-- hs20               # 热点2.0(Hotspot2.0)相关功能
|  |-- src               # Wi-Fi热点与Wi-Fi接入点共用的代码
|  |-- wpa_supplicant          # Wi-Fi接入相关功能(Station)
|  `-- wpa_supplicant_lib        # OpenHarmony对Wi-Fi新开发的业务代码
  1. WPA_Supplicant支持的连接方式

    struct wpa_ctrl {
    #ifdef CONFIG_CTRL_IFACE_UDPint s;
    #ifdef CONFIG_CTRL_IFACE_UDP_IPV6struct sockaddr_in6 local;struct sockaddr_in6 dest;
    #else /* CONFIG_CTRL_IFACE_UDP_IPV6 */struct sockaddr_in local;struct sockaddr_in dest;
    #endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */char *cookie;char *remote_ifname;char *remote_ip;
    #endif /* CONFIG_CTRL_IFACE_UDP */
    #ifdef CONFIG_CTRL_IFACE_UNIXint s;struct sockaddr_un local;struct sockaddr_un dest;
    #endif /* CONFIG_CTRL_IFACE_UNIX */
    #ifdef CONFIG_CTRL_IFACE_NAMED_PIPEHANDLE pipe;
    #endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */
    };
    

    在以上的结构体定义里我们可以看到一共定义了4个宏定义标明4中wpa_supplicant

    • CONFIG_CTRL_IFACE_UDP

      使用ipv4 socket接口与client进行连接和通讯,默认使用localhost(127.0.0.1)

    • CONFIG_CTRL_IFACE_UDP_IPV6

      使用ipv6 socket接口与client进行连接和通讯,默认使用localhost(::1)

    • CONFIG_CTRL_IFACE_UNIX

      使用unix socket接口与client进行连接和通讯,是Linux和*BSD的默认配置,默认在linux系统使用/var/run/wpa_supplicant,在android系统使用/data/misc/wifi/sockets

    • CONFIG_CTRL_IFACE_NAMED_PIPE

      使用Windows Named Pipe模式与client进行连接和通讯,是windows的默认配置


    TCP/IP Socket 和 Unix Socket最大的区别就是unix-socket没有port,使用文件handle作为传输对象,但是只能在同物理主机内运行,相对ip-socket速度也更快,有人验证过unix-socket要比ip-socket快31%


  2. WPA_Supplicant的控制接口

    • 关wifi时:

      # ps -A | grep wifi497 ?        00:00:04 wifi_hal_servic543 ?        00:00:00 wifi_host629 ?        00:01:58 wifi_manager_se# netstat -axp | grep wifi
      unix  2      [ ACC ]     STREAM     LISTENING      2951369 25629/ohos.sample.w@25629ohos.sample.wifitest
      unix  2      [ ACC ]     STREAM     LISTENING        18673 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      unix  2      [ ]         DGRAM                       18851 543/wifi_host
      unix  2      [ ]         DGRAM                       18672 497/wifi_hal_servic
      unix  2      [ ]         DGRAM                       19185 629/wifi_manager_se
      
    • 开wifi时:

      # ps -A | grep wifi497 ?        00:00:04 wifi_hal_servic543 ?        00:00:00 wifi_host629 ?        00:01:58 wifi_manager_se779 ?        00:00:01 wifi_hal_servic# netstat -axp | grep wifi
      unix  2      [ ACC ]     STREAM     LISTENING      2951369 25629/ohos.sample.w@25629ohos.sample.wifitest
      unix  2      [ ACC ]     STREAM     LISTENING        18673 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      unix  3      [ ]         STREAM     CONNECTED      3165678 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      unix  3      [ ]         STREAM     CONNECTED      3167635 629/wifi_manager_se
      unix  2      [ ]         DGRAM                       18851 543/wifi_host
      unix  2      [ ]         DGRAM                       18672 497/wifi_hal_servic
      unix  3      [ ]         STREAM     CONNECTED      3167636 629/wifi_manager_se
      unix  2      [ ]         DGRAM                       19185 629/wifi_manager_se
      unix  3      [ ]         STREAM     CONNECTED      3167634 629/wifi_manager_se
      unix  3      [ ]         STREAM     CONNECTED      3165679 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      unix  3      [ ]         STREAM     CONNECTED      3165020 629/wifi_manager_se
      unix  3      [ ]         STREAM     CONNECTED      3167645 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      unix  3      [ ]         STREAM     CONNECTED      3165700 497/wifi_hal_servic/data/service/el1/public/wifi/unix_sock.sock
      

    《简析OpenHarmony的WiFi能力》大概介绍过OpenHarmony里的WiFi架构,对应上面的命令行可以看出,wifi在后台启动了3个服务

    • wifi_manager_service:wifi服务层,为wifi框架层服务,对下通过wpa_hal与wpa_hal_service通信;
    • wifi_host:wlan启动的设备服务,对应vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs,
    • wifi_hal_service:wifi 硬件抽象服务,对应加载wpa_supplicant,与hdf进行交互,对上提供wpa_client.so
  3. 客户端

    • wpa_supplicant提供两种客户端:

      1. wpa_cli:用于和wpa_supplicant交互;使用wpa_cli可以实现wifi的具体功能

        # wpa_cli -i wlan0 scan
        wpa_ctrl_request cmd: GET_COOKIE
        wpa_ctrl_request cmd: IFNAME
        wpa_ctrl_request cmd: SCAN
        OK# wpa_cli -i wlan0 scan_result
        wpa_ctrl_request cmd: GET_COOKIE
        wpa_ctrl_request cmd: IFNAME
        wpa_ctrl_request cmd: SCAN_RESULTS
        bssid / frequency / signal level / flags / ssid / informationElements
        6e:b1:58:65:63:67       5805    -39     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]              [7 434e2024042395052300][61 a1070000000000000000000000000000000000000000][192 019b00faff]
        6c:b1:58:75:63:67       5805    -39     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_6365    [7 434e2024042395052300][61 a1070000000000000000000000000000000000000000][192 019b00faff]
        f4:84:8d:01:69:ac       5785    -51     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Graphic [7 434e2024042395052300][61 9d050400000000000000000000000000000000000000][192 019b00faff]
        f6:84:8d:21:69:ac       5785    -52     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]              [7 434e2024042395052300][61 9d050400000000000000000000000000000000000000][192 019b00faff]
        f2:45:21:15:5e:75       5745    -60     [WPA2-PSK+SAE-CCMP][SAE-H2E][ESS]       iPhone 13 Pro Max       [7 434e202401172801172c01173001173401173801173c011740011795011b99011b9d011ba1011ba5011b][61 95050400000000000000000000000000000000000000][192 019b000000]
        f8:af:05:87:7a:40       5180    -74     [WPA2-PSK-CCMP][WPS][ESS]       dist    [61 240d0400000000000000000000000000000000000000][192 012a00faff]
        f8:af:05:f7:7a:40       5180    -74     [WPA2-PSK-CCMP][WPS][ESS]               [61 240d0000000000000000000000000000000000000000][192 012a00faff]
        f8:af:05:87:7a:42       5180    -71     [WPA2-PSK-CCMP][WPS][ESS]               [61 240d0000000000000000000000000000000000000000][192 012a00faff]
        6c:b1:58:75:63:65       2462    -40     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_6365    [7 434e20010d1b][61 0b070000000000000000000000000000000000000000]
        6e:b1:58:65:63:65       2462    -40     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]              [7 434e20010d1b][61 0b070000000000000000000000000000000000000000]
        f4:84:8d:01:69:aa       2437    -47     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Graphic [7 434e20010d14][61 06070000000000000000000000000000000000000000]
        f6:84:8d:01:69:aa       2437    -46     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]              [7 434e20010d14][61 06070000000000000000000000000000000000000000]

        对应的主要功能:

        • wpa_ctrl_open() : 连接WPAS的控制接口, 可以是WPAS的全局控制接口,也可以是为每一个无线网络接口指定的控制接口

        • wpa_ctrl_close() : 关闭wpa_ctrl_open()打开的连接

        • wpa_ctrl_request() : 通过建立的连接向WPAS发送消息

        • wpa_ctrl_attach() : 使用wpa_ctrl_open()建立的连接, WPAS默认不会向这些连接的client端发送event, 必须显示调用wpa_ctrl_attach(),才能接收到消息

        • wpa_ctrl_detach() : 取消wpa_ctrl_attach()

        • wpa_ctrl_recv() : 接收WPAS端发来的event, 必须要先在打开的连接上调用wpa_ctrl_attach()才能接收到event, 当无event可读时, 此调用会被block住

        • wpa_ctrl_pending() : 检查是否有pending的event, 若有则可以调用wpa_ctrl_recv()来接收

        • wpa_ctrl_get_fd() : 获取同WPAS的连接中, client端的fd, 获取的fd可以用于select, epoll等, 但是不能直接用于收发消息, 必须使用wpa_ctrl_request()和wpa_ctrl_recv()

        • wpa_ctrl_cleanup() : 当使用unix socekt 进行连接时,会建立socket文件, 若其carsh, 则会遗留这些文件, wpa_ctrl_cleanup()用于清理这些文件

      2. hostapd_cli:用于和hostapd交互;(当设置wlan为ap模式时候可以使用此功能)

  4. 服务端

    • wpa_supplicant提供两种服务端:

      1. wpa_supplicant:Wi-Fi接入相关功能,对应wifi_hal_sta_interface.c启动或停止,此文件在wifi的services层,对应之前的wifi_hal_service;这也解释了为啥开wifi后会多出一个wifi_hal_service
      2. hostapd:Wi-Fi热点相关功能,对应wifi_hal_ap_interface.c启动或停止,此文件在wifi的services层,对应之前的wifi_hal_service;
    • 对应配置文件:

      # ls ./system/etc/wifi/
      hostapd.conf  p2p_supplicant.conf  wpa_supplicant.conf//热点配置
      # cat ./system/etc/wifi/hostapd.conf
      # Copyright (C) 2022 Huawei Device Co., Ltd.
      # Licensed under the Apache License, Version 2.0 (the "License");
      # you may not use this file except in compliance with the License.
      # You may obtain a copy of the License at
      #
      #     http://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in writing, software
      # distributed under the License is distributed on an "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.interface=wlan0
      ctrl_interface=udp
      ssid=testap
      hw_mode=g
      channel=1//点对点传输模式
      # cat ./system/etc/wifi/p2p_supplicant.conf
      # Copyright (C) 2022 Huawei Device Co., Ltd.
      # Licensed under the Apache License, Version 2.0 (the "License");
      # you may not use this file except in compliance with the License.
      # You may obtain a copy of the License at
      #
      #     http://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in writing, software
      # distributed under the License is distributed on an "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.ctrl_interface=udp
      device_name=p2p_ohos
      manufacturer=ohos
      device_type=10-0050F204-5
      config_methods=virtual_push_button physical_display keypad
      p2p_listen_reg_class=81
      p2p_listen_channel=1
      p2p_oper_reg_class=81
      p2p_oper_channel=1
      p2p_go_intent=0
      persistent_reconnect=1
      serial_number=0123456789ABCDEF
      p2p_ssid_postfix=-ohos
      p2p_go_ht40=1
      p2p_go_vht=1
      update_config=1//默认的接入点模式
      # cat ./system/etc/wifi/wpa_supplicant.conf
      # Copyright (C) 2021 Huawei Device Co., Ltd.
      # Licensed under the Apache License, Version 2.0 (the "License");
      # you may not use this file except in compliance with the License.
      # You may obtain a copy of the License at
      #
      #     http://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in writing, software
      # distributed under the License is distributed on an "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.country=GB
      ctrl_interface=udp
      network={
      }
      

      此处多了个p2p的配置,其实就是wpa_supplicat启动时候使用的不同配置,也就是说wpa_supplicant可以作为接入点模式启动也可以作为p2p模式启动。

  5. 小结

    以上就是对OpenHarmony里的wap_supplicant的大概分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Web的图书管理系统运行教程

1.5、安装数据库和数据库管理工具 目前作者所有毕设源码数据库都用 MySQL5.7版本,强烈建议初学者跟作者保持一致,避免出现其他错误,待运行成功后再根据需要调整数据库版本。 MySQL5.7安装教程请看作者另一篇文章:《MySQL绿色版安…

设计模式(三)代理模式

目录 一、什么是代理模式 二、静态代理 1、定义 2、代码 2.1、接口 2.2、被代理对象 2.3、代理对象 2.4、测试 三、动态代理 1、定义 2、代码 2.1、接口 2.2、目标对象 2.3、代理对象 2.4、测试 一、什么是代理模式 代理模式(Proxy Pattern)是一种结构性模式。代理模…

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路,大家可以借鉴一下。 我这边测试的是uni组件,但是我觉得即便你用element-plus之类的,样式击穿的思路都相同。 我自定义了一个全局样式scss文件,并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

人脸识别——可解释的人脸识别(XFR)人脸识别模型是根据什么来识别个人的

可解释性人脸识别(XFR)? 人脸识别有一个任务叫1:N(识别)。这个任务将一个人的照片与N张注册照片进行比较,找出相似度最高的人。 这项任务用于刑事调查和出入境点。在犯罪调查中,任务从监控摄像…

【论文笔记】Parameter-Effificient Transfer Learning for NLP

题目:Parameter-Effificient Transfer Learning for NLP 阅读 文章目录 0.摘要1.引言2 Adapter tuning for NLP3 实验3.1 参数/性能平衡3.2 讨论 4.相关工作 0.摘要 克服微调训练不高效的问题,增加一些adapter模块,思想就是固定原始的网络中的参数&…

mysql model_path longblob 类型文件操作

在 MySQL 中,如果你有一个表包含一个 LONG BLOB 类型的字段(例如 model_path),你可以使用 SQL 查询来提取该字段中的二进制数据,并将其下载为文件。以下是一个完整的步骤来实现这个过程: 步骤1:…

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

90V转12V1A恒压WT6039

90V转12V1A恒压WT6039 WT6039降压DC-DC转换器芯片专为处理宽泛的电压输入范围设计,支持从12V至90V。该芯片集成了关键功能,如使能控制开关、参考电源、误差放大器、过热保护、限流保护及短路保护等,以确保系统在各种操作条件下的安全与稳定性…

qt开发-05_QPushButton

按钮是最常用的控件; 如果找不到文件可以这样: 选择这个复制文件的路径,粘贴就可以了。 在qt中新建一个项目,并且打开ui界面添加一个按钮; 右键这个按钮可以有很多功能: 先是这个转到槽,这个就…

netcore 生成验证码

安装依赖 Install-Package Lazy.Captcha.Core 注册服务 builder.Services.AddCaptcha(); 自定义注册服务 // 注册服务的时候增加配置 services.AddCaptcha(Configuration, option > {option.CaptchaType CaptchaType.WORD; // 验证码类型option.CodeLength 6; // 验证…

六月惊喜| 事件分析Plus上线

前情回顾 ClkLog在四月先上线了一版<事件分析>&#xff0c;可以通过元数据的配置&#xff0c;创建并统计自定义事件的数据情况&#xff08;例如&#xff1a;用户数、触发次数、人均次数&#xff09;。 功能上线后好多小伙伴说希望我们加紧上线自定义的事件分析。ClkLog实…

【Java】已解决java.net.HttpRetryException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例 已解决java.net.HttpRetryException异常 在Java的网络编程中&#xff0c;尤其是使用Apache HttpClient或其他类似的HTTP客户端库时&#xff0c;可能会遇到java.net.HttpRetryException异常。这个…

动态IP与静态IP,如何选择更适合你的类型?

在当今数字化时代&#xff0c;互联网已成为我们日常生活和工作中不可或缺的一部分。而IP地址作为互联网通信的基础&#xff0c;扮演着至关重要的角色。在选择IP地址类型时&#xff0c;动态IP和静态IP是两种常见的选择。IPIDEA代理IP将为大家详细解析这两种IP的特点&#xff0c;…

【SPIE出版】第六届无线通信与智能电网国际会议(ICWCSG 2024,7月26-28)

随着科技的飞速发展和能源需求的日益增长&#xff0c;智能电网技术逐渐成为电力行业的重要发展方向。与此同时&#xff0c;无线通信技术在近年来也取得了显著的进步&#xff0c;为智能电网的发展提供了强有力的支持。为了进一步推动无线通信与智能电网的结合与发展&#xff0c;…

2024最新最全【网络安全/渗透测试】面试题汇总

思路流程 信息收集漏洞挖掘漏洞利用&权限提升清除测试数据&输出报告复测 问题深信服一面:SQL注入防护为什么参数化查询可以防止sql注入SQL头注入点盲注是什么&#xff1f;怎么盲注&#xff1f;宽字节注入产生原理以及根本原因 产生原理在哪里编码根本原因解决办法sql里…

这才多久,ChatGPT-4o 又被碾压了?

大模型皇位易主&#xff1f; 昨天&#xff0c;OpenAI 的竞争对手 Anthropic 发布了其最强大的 AI 模型&#xff1a;Claude 3.5 Sonnet。 目前&#xff0c;Claude 3.5 Sonnet 已经在 Claude.ai 和 Claude iOS 应用程序上免费提供。 据 Anthropic 号称&#xff0c;Claude 3.5 Son…

2005年上半年软件设计师【下午题】试题及答案

文章目录 2005年上半年软件设计师下午题--试题2005年上半年软件设计师下午题--答案2005年上半年软件设计师下午题–试题

自动化测试:Autorunner的使用

自动化测试&#xff1a;Autorunner的使用 一、实验目的 1、掌握自动化测试脚本的概念。 2、初步掌握Autorunner的使用 二、Autorunner的简单使用 autoRunner使用方法 新建项目 a) 在项目管理器空白区域,右键鼠标,选择新建项目 b) 输入项目名后,点击[确定]. 在初次打开aut…

中国机器人产业崛起,德国市场面临30%的份额挑战

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 随着科技的不断进步&#xff0c;机器人行业正迎来前所未有的发展机遇。令人震惊的是&#xff0c;根据最新统计数据&#xff0c;中国机器人产业在…

echarts实现折线图点击添加标记

文章目录 背景一、代码示例 背景 业务场景体现在功能层面主要两点&#xff0c; 折线图表设置点击事件点击事件与图标渲染标记绑定 对于节点没有被添加标记的可以&#xff0c;弹框提示添加标记&#xff0c;并提供标记内容输入框&#xff0c;已经添加过标记的点&#xff0c;点…