Android WIFI体系

先说说WifiLock、MulticastLock 、IWificond、PON

  1. WifiLock 允许应用强制保持 WiFi 活跃,即便设备处于休眠状态。如WIFI_MODE_FULL_HIGH_PERF:保持高性能 WiFi 活跃状态,适用于高带宽需求,如视频通话、流媒体。经测试有的场景能减少100ms的延迟

  2. MulticastLock 允许应用接收 WiFi 组播数据包,适用于需要使用 UDP 多播通信的场景。组播会导致较高的电量消耗,建议在不需要时及时释放。

  3. PNO(Preferred Network Offload)是 Android 中 断网状态下自动连接 Wi-Fi 网络的机制,它让设备即使在屏幕关闭或休眠时,也能在后台扫描并连接到预先保存的 Wi-Fi 网络。
    在这里插入图片描述

  4. wificond的话见下图

Wi-Fi 框架具有三个 Wi-Fi HAL surface,分别由三个不同的接口表示。 对于搭载 Android 14 或更高版本的设备,所有三个接口都以稳定 AIDL 软件包的形式提供。这些接口以前使用 HIDL 进行定义。

供应商 HAL:Android 专用命令的 HAL surface。AIDL 文件位于 hardware/interfaces/aidl 中,HIDL 文件位于 hardware/interfaces/wifi/1.x 中。
客户端 HAL:wpa_supplicant 的 HAL Surface。AIDL 文件位于 hardware/interfaces/supplicant/aidl 中,HIDL 文件位于 hardware/interfaces/supplicant/1.x 中。
Hostapd HAL:hostapd 的 HAL surface。AIDL 文件位于 hardware/interfaces/hostapd/aidl 中,HIDL 文件位于 hardware/interfaces/hostapd/1.x 中。
供应商 HAL 提供 Android 专用命令。对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的正常运行而言,供应商 HAL 是可选的(不是必需的)。不过,对于 Wi-Fi 感知和 Wi-Fi RTT 服务而言,供应商 HAL 是必要 HAL。(nan也是vendor实现)
在这里插入图片描述
文章主要就是介绍wifi扫描的代码逻辑、lock的实现还有80211中的一些知识

wifi的帧有以下几种:
管理帧、控制帧和数据帧(都是洋大人制定的协议罢了)
在这里插入图片描述
在这里插入图片描述
常见的三种Wifi协议,速度和频段以及调制决定,这个就偏硬件了
802.11ax 2019 Wi-Fi6
802.11ac 2013 Wi-Fi5,MU-MIMO,支持5G
802.11n 2009 Wi-Fi4,MIMO最大4*4

主动扫描wifi的时候,STA主动发送probe-request帧到空中,AP收到后回复probe-response给STA;
隐藏SSID的扫描:如果probe-request中包含具体的SSID,那么只有SSID匹配的AP才会回复probe response,通常用来扫描隐藏AP;
被动扫描wifi的时候如下图:(这个广播包里可以包含任何数据其实)。
在这里插入图片描述
连接的话就是
在这里插入图片描述
目前Wi-Fi在打开状态下芯片一直是活动状态,Wi-Fi芯片支持一系列offload功能,可以把一些任务交给芯片处理,主机可以休眠。Wi-Fi在不需要传输数据时释放wake lock,使主机有机会睡下去,同时会启用包过滤,只有收到特定类型的包之后才会唤醒主机,并传输给kernel,比如单播和特定的多播帧。通过周期唤醒,接收并解析Beacon帧中的TIM IE,看AP是否有缓存的数据,如果没有则继续睡下去

漫游强调的是 在同一网络中 AP 之间的切换,IP 不变,体验平滑。
中继强调的是 物理信号转发扩展,可能存在网段隔离或额外延迟。

4. wifi open 扫描的流程

wifi启动的时序图:在这里插入图片描述

层级描述
WifiManager应用层接口,如 enableNetwork()connect()
WifiServiceImplFramework 层 Wi-Fi 服务实现
WifiNative封装底层操作接口,如 connectToNetwork()startScan()
wificond用于扫描控制、监听事件、构建 netlink 消息与内核交互
Wifi HAL调用 vendor 提供的 HAL 接口,如 scan、connect(用于兼容芯片)
wpa_supplicantwpa_supplicant 进程处理连接和认证流程,通过 HIDL 接口暴露

wifiService的主要参数

mResourceCache	缓存 Wi-Fi 相关的资源,提升访问效率。
mWifiInjector	依赖注入器,提供 Wi-Fi 模块所需的各种组件和服务。
mClock	提供系统时间相关的功能,常用于记录事件时间戳。
mSettingsConfigStore	管理 Wi-Fi 设置的存储和加载。
mFacade	框架外观接口,封装了对系统服务的访问。
mWifiMetrics	收集和记录 Wi-Fi 性能和使用情况的指标数据。
mWifiTrafficPoller	定期轮询 Wi-Fi 流量数据,用于流量统计和分析。
mUserManager	管理用户账户信息,处理多用户环境下的 Wi-Fi 设置。
mCountryCode	管理和设置设备的国家代码,影响 Wi-Fi 频段和功率设置。
mActiveModeWarden	管理 Wi-Fi 的活动模式,如 STA(客户端)和 AP(热点)模式的切换。
mScanRequestProxy	代理扫描请求,协调多个组件的扫描需求。
mSettingsStore	存储和管理 Wi-Fi 的持久化设置。
mPowerManager	管理设备的电源状态,控制 Wi-Fi 在不同电源模式下的行为。
mAppOps	管理应用的操作权限,确保应用有权限进行 Wi-Fi 操作。
mWifiLockManager	管理 Wi-Fi 锁,防止 Wi-Fi 在特定情况下进入休眠状态。
mWifiMulticastLockManager	管理多播锁,允许应用接收多播数据包。
mWifiBackupRestore	处理 Wi-Fi 设置的备份和恢复功能。
mSoftApBackupRestore	处理软 AP 设置的备份和恢复功能。
mWifiSettingsBackupRestore	处理 Wi-Fi 设置的备份和恢复功能。
mBackupRestoreController	控制备份和恢复过程的协调器。
mWifiApConfigStore	存储和管理 Wi-Fi 热点的配置。
mWifiPermissionsUtil	工具类,检查和管理应用的 Wi-Fi 权限。
mLog	日志记录器,用于记录 Wi-Fi 模块的日志信息。
mFrameworkFacade	框架外观接口,封装了对系统服务的访问。
mTetheredSoftApTracker	跟踪和管理设备作为热点时的状态和连接。
mLohsSoftApTracker	跟踪和管理本地仅热点(LOHS)的状态。
mWifiNetworkSuggestionsManager	管理应用提供的 Wi-Fi 网络建议。
mWifiNetworkFactory	处理 Wi-Fi 网络的请求和连接。
mDppManager	管理 DPP(设备配对协议)功能。
mWifiThreadRunner	管理 Wi-Fi 操作的线程执行。
mWifiHandlerThread	处理 Wi-Fi 操作的线程。
mWifiConfigManager	管理 Wi-Fi 网络配置。
mHalDeviceManager	管理与硬件抽象层(HAL)的交互。
mWifiBlocklistMonitor	监控和管理 Wi-Fi 网络的黑名单。
mPasspointManager	管理 Passpoint(热点 2.0)功能。
mWifiScoreCard	记录和评估 Wi-Fi 网络的性能评分。
mWifiHealthMonitor	监控 Wi-Fi 的健康状态。
mMemoryStoreImpl	存储 Wi-Fi 相关的内存数据。
mWifiConnectivityManager	管理 Wi-Fi 的连接策略和流程。
mWifiDataStall	检测和处理 Wi-Fi 数据阻塞情况。
mWifiNative	与底层 Wi-Fi 驱动进行交互的接口。
mCoexManager	管理 Wi-Fi 与其他无线技术的共存。
mConnectHelper	辅助 Wi-Fi 连接过程的工具类。
mWifiGlobals	存储全局的 Wi-Fi 设置和状态。
mSimRequiredNotifier	通知用户需要 SIM 卡以连接特定 Wi-Fi 网络。
mWifiCarrierInfoManager	管理运营商相关的 Wi-Fi 信息。
mWifiPseudonymManager	管理 Wi-Fi 的伪匿名信息。
mMakeBeforeBreakManager	管理 Wi-Fi 的“先连接后断开”策略。
mLastCallerInfoManager	记录最后调用 Wi-Fi 接口的应用信息。
mWifiDialogManager	管理 Wi-Fi 相关的对话框和提示。
mBuildProperties	存储构建相关的属性信息。
mDefaultClientModeManager	管理默认的客户端模式。
mCountryCodeTracker	跟踪国家代码的变化。
mWifiTetheringDisallowed	标记是否禁止 Wi-Fi 网络共享。
mMultiInternetManager	管理多网络连接的策略。
mDeviceConfigFacade	访问设备配置的接口。
mFeatureFlags	管理功能开关的标志位。
mApplicationQosPolicyRequestHandler	处理应用的 QoS 策略请求。
mWifiPulledAtomLogger	记录 Wi-Fi 的统计数据。
mAfcManager	管理 AFC(自动频率控制)功能。
mTwtManager	管理 TWT(目标唤醒时间)功能。
mWepNetworkUsageController	控制 WEP 网络的使用。

🔧 mIfaceMgr 的作用
mIfaceMgr 是 WifiVendorHal 类中的成员变量,全称为 InterfaceManager。​它主要负责管理 Wi-Fi 接口的生命周期,包括创建、删除和查询接口等操作。​

主要职责:
接口创建与删除:​通过调用底层 HAL 接口,创建或删除 Wi-Fi 接口(如 STAAP)。
接口信息管理:​维护当前系统中所有 Wi-Fi 接口的信息,供上层查询和使用。
接口状态监听:​监听接口状态的变化,及时通知上层组件进行相应处理。

一、setWifiEnabled 方法概述
setWifiEnabled(String packageName, boolean enable) 是 Android 系统提供的用于启用或禁用 Wi-Fi 的接口。​该方法首先进行一系列权限和状态检查,确保调用者有权进行此操作,并且当前系统状态允许 Wi-Fi 状态的更改。
二、权限和状态检查流程

  1. 权限验证:
    调用 enforceChangePermission(packageName) 检查调用者是否具有修改 Wi-Fi 状态的权限。
    通过 isPrivileged 判断调用者是否为系统应用或具有特权的应用。​
  2. 第三方应用限制:
    对于非特权的第三方应用,若其目标 SDK 版本高于 Android Q(API 29),则禁止其更改 Wi-Fi 状态。​
  3. 飞行模式限制:
    在飞行模式下,仅允许特权应用更改 Wi-Fi 状态。​
  4. 热点模式限制:
    当设备处于热点(SoftAp)模式时,仅允许特权应用更改 Wi-Fi 状态。​
  5. 用户限制:
    若用户设置了禁止更改 Wi-Fi 状态的限制,且调用者不是设备所有者(DO)或配置文件所有者(PO),则禁止更改 Wi-Fi 状态。​
  6. 用户确认对话框:
    对于目标 SDK 版本低于 Android Q 的第三方应用,系统可能会弹出用户确认对话框,询问用户是否允许该应用更改 Wi-Fi 状态。
    三、打开的调用栈为
    ActiveModeWarden -> ConcreteClientModeManager-> mWifiNative-> HalDeviceManager-> WifiHal(WifiHalAidlImpl)

HalDeviceManager:Handles device management through the HAL interface. 很明显
WifiNative: Native calls for bring up/shut down of the supplicant daemon and for sending requests to the supplicant daemon
在WifiNative中的setupInterfaceForClientInScanMode:为客户端模式(用于扫描)操作设置界面,此方法在本机守护程序(wificond,供应商 HAL)中以 STA 模式配置接口。最后就掉到了hal那边,如下图:
在这里插入图片描述
binder调到Wi-Fi HAL这里~~(libwpa_client.so): socket通信中的client端程序;作为Client端与wpa_supplicant这个Server端进行通信。~~
在这里插入图片描述

Return<void> Wifi::start(start_cb hidl_status_cb) {
    return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, &Wifi::startInternal,
                           hidl_status_cb);
}
https://android.googlesource.com/platform/hardware/interfaces/+/d90c46cc0/wifi/1.6/default/wifi.cpp

startInternal()

├── 判断 run_state_(STARTED, STOPPING)

├── 初始化 HAL(initializeModeControllerAndLegacyHal)
│ └── 成功?
│ ├── 注册子系统重启回调
│ ├── 创建 WifiChip
│ ├── 设置状态 STARTED
│ └── 通知上层启动成功
│ └── 否:
│ ├── 通知失败
│ └── 清理回调

└── 返回 WifiStatus

到这里与驱动交互,详细的可以看看这篇文章:https://blog.csdn.net/weixin_40588186/article/details/132837372
WifiLegacyHal::start()

├── 校验前置状态(CHECK)
├── 判断是否已启动
├── 等待驱动就绪(wifi_wait_for_driver_ready)
├── [主HAL] 启动 WiFi 接口(SetWifiUpState)
├── 初始化 HAL(wifi_initialize -> global_handle_)
├── 启动事件循环线程(runEventLoop)
├── 获取接口句柄(retrieveIfaceHandles)
└── 成功 -> is_started_ = true,返回 SUCCESS

就是链接库:init_wifi_vendor_hal_func_table

wifi_error wifi_wait_for_driver_ready(void)
{
    // This function will wait to make sure basic client netdev is created
    // Function times out after 10 seconds
    int count = (POLL_DRIVER_MAX_TIME_MS * 1000) / POLL_DRIVER_DURATION_US;
    FILE *fd;

    do {
        if ((fd = fopen("/sys/class/net/wlan0", "r")) != NULL) {
            fclose(fd);
            return WIFI_SUCCESS;
        }
        usleep(POLL_DRIVER_DURATION_US);
    } while(--count > 0);

    ALOGE("Timed out wating on Driver ready ... ");
    return WIFI_ERROR_TIMED_OUT;
}

📋 Qualcomm WiFi HAL 接口方法汇总表

模块分类接口函数名称
基础控制wifi_initialize, wifi_cleanup, wifi_event_loop, wifi_wait_for_driver_ready
接口与特性wifi_get_ifaces, wifi_get_iface_name, wifi_get_supported_feature_set, wifi_get_concurrency_matrix, wifi_get_valid_channels
扫描功能wifi_start_gscan, wifi_stop_gscan, wifi_get_cached_gscan_results, wifi_get_gscan_capabilities, wifi_set_bssid_hotlist, wifi_reset_bssid_hotlist, wifi_set_significant_change_handler, wifi_reset_significant_change_handler
链路统计wifi_set_link_stats, wifi_get_link_stats, wifi_clear_link_stats
RTT 测距wifi_rtt_range_request, wifi_rtt_range_cancel, wifi_get_rtt_capabilities, wifi_rtt_get_responder_info, wifi_enable_responder, wifi_disable_responder
国家码与扫描配置wifi_set_country_code, wifi_set_scanning_mac_oui
日志调试wifi_start_logging, wifi_set_log_handler, wifi_reset_log_handler, wifi_get_firmware_memory_dump, wifi_get_driver_memory_dump, wifi_get_wake_reason_stats, wifi_get_ring_buffers_status, wifi_get_logger_supported_feature_set, wifi_get_ring_data, wifi_get_firmware_version, wifi_get_driver_version
TDLS 支持wifi_enable_tdls, wifi_disable_tdls, wifi_get_tdls_status, wifi_get_tdls_capabilities
RSSI 监控wifi_start_rssi_monitoring, wifi_stop_rssi_monitoring
EPNOwifi_set_epno_list, wifi_reset_epno_list
Passpointwifi_set_passpoint_list, wifi_reset_passpoint_list
位置定位(LCI/LCR)wifi_set_lci, wifi_set_lcr
离线数据包处理wifi_start_sending_offloaded_packet, wifi_stop_sending_offloaded_packet, wifi_start_pkt_fate_monitoring, wifi_get_tx_pkt_fates, wifi_get_rx_pkt_fates
NAN 功能wifi_nan_enable_request, wifi_nan_disable_request, wifi_nan_publish_request, wifi_nan_publish_cancel_request, wifi_nan_subscribe_request, wifi_nan_subscribe_cancel_request, wifi_nan_transmit_followup_request, wifi_nan_stats_request, wifi_nan_config_request, wifi_nan_tca_request, wifi_nan_beacon_sdf_payload_request, wifi_nan_register_handler, wifi_nan_get_version, wifi_nan_get_capabilities, wifi_nan_data_interface_create, wifi_nan_data_interface_delete, wifi_nan_data_request_initiator, wifi_nan_data_indication_response, wifi_nan_data_end
漫游支持wifi_get_roaming_capabilities, wifi_configure_roaming, wifi_enable_firmware_roaming
高级控制配置wifi_set_alert_handler, wifi_reset_alert_handler, wifi_set_nodfs_flag, wifi_set_packet_filter, wifi_get_packet_filter_capabilities, wifi_read_packet_filter, wifi_select_tx_power_scenario, wifi_reset_tx_power_scenario, wifi_set_radio_mode_change_handler, wifi_virtual_interface_create, wifi_virtual_interface_delete, wifi_set_latency_mode, wifi_set_thermal_mitigation_mode, wifi_set_dtim_config

这些的实现是vendor的事,应该就是通过sdio或者串口发指令给芯片那边,比如乐鑫的芯片的实现:https://github.com/shmuelzon/esp32-ble2mqtt/blob/a8219ac10ed2bce10b2379fb032a370433e2e7bc/main/wifi.h

经过上面的步骤,驱动和hal已经成功加载,而且interface也已经创建好了

wificond(wifi connectivity daemon)目前在只支持网卡配置和扫描,连接还是通过wpa_supplicant.(所以Android称之为方案集成大师)
wificond的代码这里不展开,核心是通过netlink跟内核nl80211模块通信,用于管理 Wi-Fi 硬件和提供 Wi-Fi 相关的信息和控制功能。
主要负责管理wifi以及扫描的wificond模块也已经初始化成功。

wpa_supplicant:
无线STA端的一个解决方案;它实现了WPA/WPA2的密钥协商以及802.1X认证,并控制WLAN Driver的认证,关联以及漫游等。
📋 接口文件简要说明表格

文件名大致功能说明
ISupplicant.aidlSupplicant 主控制接口,获取接口对象(如 STA/P2P)等
ISupplicantStaIface.aidlSTA 接口,配置/连接/断开/扫描等
ISupplicantStaNetwork.aidlSTA 网络配置接口(例如 SSID、密码)
ISupplicantStaIfaceCallback.aidlSTA 状态变化回调,例如连接成功、断开等通知
ISupplicantP2pIface.aidlP2P 接口,配置组、服务发现、邀请、连接等
ISupplicantP2pNetwork.aidlP2P 网络配置接口
ISupplicantP2pIfaceCallback.aidlP2P 状态变化回调
ISupplicantStaNetworkCallback.aidlSTA 网络事件回调,例如 key 失效等
AnqpData.aidl / AnqpInfoId.aidlANQP 数据结构,Hotspot 2.0 信息支持
Dpp*.aidlDPP(设备配置协议)相关结构和事件定义
Eap*.aidlEAP 认证相关配置
GroupCipherMask.aidlWPA/WPA2 群组加密方式掩码
KeyMgmtMask.aidl密钥管理方式掩码(如 WPA-PSK、WPA-EAP)
StaIfaceStatusCode.aidlSTA 状态码,连接成功、失败原因等
StaIfaceReasonCode.aidlSTA 断开连接的原因码
SupplicantStatusCode.aidl操作返回状态码
Wps*.aidlWPS 配置错误、方法、密码 ID 等
QosPolicy*.aidlQoS 策略配置支持,流量分类、优先级等
MacAddress.aidlMAC 地址结构定义
FreqRange.aidl支持的频段范围
Mbo*.aidlMBO(多带操作)支持,如拒绝原因、偏好设定等
Mlo*.aidlMLO 支持(多链路连接)
NetworkRequestEapSim*.aidl针对 SIM 卡身份验证(如 GSM、UMTS)参数结构
RxFilterType.aidl数据包过滤类型
WifiTechnology.aidlWi-Fi 技术类型,如 802.11a/b/g/n/ac/ax

hostapd:
无线AP端的一个解决方案;Android 就是对芯片的一个设置平台,这里热点的一些设置参数:支持什么wifi协议、带宽还有加密方式
在这里插入图片描述
扫描的流程
在这里插入图片描述

WifiNl80211Manager感觉好多鱼,碎片化是最大的弊端

App (WifiManager.startScan)

WifiServiceImpl.startScan()

ScanRequestProxy.startScan()

WifiScanner.startScan()

WifiScanningServiceImpl.startScan()

WifiScannerImpl.startSingleScan()

WifiNl80211Manager.scan()

wificond.startScan() / startScan2()
通过netlink发送指令到内核的wpa模块,详见:https://www.jianshu.com/p/8349c0148f6f

层级 / 类名职责 / 作用关键逻辑和处理流程
WifiServiceImplFramework 层对外 Wi-Fi 接口服务入口,提供 App 调用 API 接口。- 检查权限(如 CHANGE_WIFI_STATE)
- 清除调用者身份并记录日志
- 判断是否在 Idle 模式(省电模式)
- 调用 ScanRequestProxy.startScan 发起实际扫描请求。
ScanRequestProxy负责扫描请求的权限校验、节流控制、设置参数,并调用 WifiScannerImpl 发起扫描。- 检查调用者是否有特殊权限(SETTINGS、SETUP_WIZARD)
- 节流检查(App 是否过于频繁发起扫描)
- 构建 ScanSettings(如扫描类型、频段)
- 调用 mWifiScanner.startScan() 继续处理。
WifiScannerImpl / WifiScannerServiceImpl中间层,真正向扫描状态机发送命令,构建消息流程,分发监听器和设置调用信息。- 权限检查和封装调用者身份(如 uid、packageName、featureId)
- 封装 ScanParams 对象
- 发送 CMD_START_SINGLE_SCAN 消息到 SingleScanStateMachine 处理。
SingleScanStateMachine处理单次扫描的状态机,构建扫描请求并调用 HAL 层执行实际扫描。- 构建频率列表、隐藏网络 SSID 列表、是否开启 6GHz RNR 等参数
- 调用 WifiNative / WifiNl80211Manager.scan() 发起底层扫描。
WifiNl80211Manager / WifiCondManager底层管理模块,直接通过 netlink 与 wificond 通信,发起 native 扫描请求。- 将参数转为 wificond 支持的数据结构(如 SSID、频率、hiddenNetworks)
- 调用 startScan()(AOSP Q-R)或 startScan2()(AOSP S+)发送 netlink 请求。

interface IWifiScannerImpl
这是 Android 底层 Wi-Fi 模块中的一个 AIDL 接口,用于定义由 WifiNl80211Manager 调用、由 wificond 服务实现的 Wi-Fi 扫描相关操作。

方法名说明
scan(scanSettings)发起一次单次扫描(已废弃)
scanRequest(scanSettings)发起一次单次扫描,返回状态码
getScanResults()获取最近的一次扫描结果
getPnoScanResults()获取 PNO 模式下的最近扫描结果
getMaxSsidsPerScan()获取设备支持每次最多扫描的 SSID 数量
startPnoScan(pnoSettings)启动 PNO 扫描
stopPnoScan()停止 PNO 扫描
abortScan()中止当前扫描
subscribeScanEvents(handler)注册扫描事件监听器(单次扫描)
unsubscribeScanEvents()取消扫描事件监听器注册
subscribePnoScanEvents()注册 PNO 扫描事件监听器
unsubscribePnoScanEvents()取消 PNO 扫描事件监听器注册

在这里插入图片描述
ScanUtils::Scan() ─────▶ 构造 NL80211Packet (TriggerScan)


调用 netlink_manager_->SendMessageAndGetAckOrError()


NetlinkManager:
- 获取 family_id / seq
- 发送消息 socket
- 等待响应(ACK or ERROR)


内核 nl80211:
- 若成功:返回 ACK
- 若失败:返回 ERROR

三个核心模块(ScannerImpl, ScanUtils, NL80211Packet)的功能与职责对比总结表格:

模块名主要功能概述核心职责依赖组件与其他模块的关系
ScannerImplWi-Fi 扫描控制器,提供单次扫描请求接口- 检查状态有效性
- 处理隐藏网络、SSID 限制等边界
- 调用 ScanUtils::Scan 发起底层扫描
ScanUtils
接口信息
配置结构体
调用 ScanUtils 进行真正扫描;处理扫描前置条件及回调状态
ScanUtils封装 nl80211 扫描逻辑,准备并发送 Netlink 请求- 构造 NL80211Packet
- 添加 SSID、频率、Flags 等属性
- 使用 NetlinkManager 发送请求
NL80211Packet, NetlinkManagerScannerImpl 调用,向内核发起 netlink 扫描请求
NL80211PacketNetlink 消息封装工具类,用于构建 nl80211 请求包- 添加 flag、属性(支持嵌套)
- 包装 NL + GENL + nl80211 payload
- 提供序列化和发送支持
无(内部使用 netlink 协议结构)ScanUtils 创建并填充,传入 NetlinkManager 发送

The NetlinkManager class is a central component in the wificond (WiFi daemon) system, specifically for handling communication between the user space and the kernel through the Netlink protocol. Netlink is used extensively in Linux for communication between the kernel and user space, particularly for networking-related tasks. In this case, NetlinkManager is used to interact with the nl80211 interface, which manages wireless networking.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值