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

wifiService的主要参数

javascript 复制代码
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 接口(如 STA、AP)。
接口信息管理:​维护当前系统中所有 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端进行通信。~~

javascript 复制代码
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

javascript 复制代码
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
EPNO wifi_set_epno_list, wifi_reset_epno_list
Passpoint wifi_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.aidl Supplicant 主控制接口,获取接口对象(如 STA/P2P)等
ISupplicantStaIface.aidl STA 接口,配置/连接/断开/扫描等
ISupplicantStaNetwork.aidl STA 网络配置接口(例如 SSID、密码)
ISupplicantStaIfaceCallback.aidl STA 状态变化回调,例如连接成功、断开等通知
ISupplicantP2pIface.aidl P2P 接口,配置组、服务发现、邀请、连接等
ISupplicantP2pNetwork.aidl P2P 网络配置接口
ISupplicantP2pIfaceCallback.aidl P2P 状态变化回调
ISupplicantStaNetworkCallback.aidl STA 网络事件回调,例如 key 失效等
AnqpData.aidl / AnqpInfoId.aidl ANQP 数据结构,Hotspot 2.0 信息支持
Dpp*.aidl DPP(设备配置协议)相关结构和事件定义
Eap*.aidl EAP 认证相关配置
GroupCipherMask.aidl WPA/WPA2 群组加密方式掩码
KeyMgmtMask.aidl 密钥管理方式掩码(如 WPA-PSK、WPA-EAP)
StaIfaceStatusCode.aidl STA 状态码,连接成功、失败原因等
StaIfaceReasonCode.aidl STA 断开连接的原因码
SupplicantStatusCode.aidl 操作返回状态码
Wps*.aidl WPS 配置错误、方法、密码 ID 等
QosPolicy*.aidl QoS 策略配置支持,流量分类、优先级等
MacAddress.aidl MAC 地址结构定义
FreqRange.aidl 支持的频段范围
Mbo*.aidl MBO(多带操作)支持,如拒绝原因、偏好设定等
Mlo*.aidl MLO 支持(多链路连接)
NetworkRequestEapSim*.aidl 针对 SIM 卡身份验证(如 GSM、UMTS)参数结构
RxFilterType.aidl 数据包过滤类型
WifiTechnology.aidl Wi-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

层级 / 类名 职责 / 作用 关键逻辑和处理流程
WifiServiceImpl Framework 层对外 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)的功能与职责对比总结表格:

模块名 主要功能概述 核心职责 依赖组件 与其他模块的关系
ScannerImpl Wi-Fi 扫描控制器,提供单次扫描请求接口 - 检查状态有效性 - 处理隐藏网络、SSID 限制等边界 - 调用 ScanUtils::Scan 发起底层扫描 ScanUtils 接口信息 配置结构体 调用 ScanUtils 进行真正扫描;处理扫描前置条件及回调状态
ScanUtils 封装 nl80211 扫描逻辑,准备并发送 Netlink 请求 - 构造 NL80211Packet - 添加 SSID、频率、Flags 等属性 - 使用 NetlinkManager 发送请求 NL80211Packet, NetlinkManager ScannerImpl 调用,向内核发起 netlink 扫描请求
NL80211Packet Netlink 消息封装工具类,用于构建 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.

相关推荐
0wioiw05 小时前
安卓基础(无障碍点击)
android
阿达C8 小时前
MySQL常用函数详解及SQL代码示例
android·sql·mysql
缘来的精彩10 小时前
Android Studio 中实现方法和参数显示一行
android·ide·android studio
二七有头发10 小时前
从零开始:Android Studio开发购物车(第二个实战项目)
android·ide·android studio
我命由我1234510 小时前
MQTT - Android MQTT 编码实战(MQTT 客户端创建、MQTT 客户端事件、MQTT 客户端连接配置、MQTT 客户端主题)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
奔跑吧 android11 小时前
【android bluetooth 协议分析 06】【l2cap详解 11】【l2cap连接超时处理逻辑介绍】
android·bluetooth·l2cap·gd·aosp13
百锦再17 小时前
Android Studio开发中Application和Activity生命周期详解
android·java·ide·app·gradle·android studio·studio
移动开发者1号18 小时前
Android现代进度条替代方案
android·app
万户猴18 小时前
【Android蓝牙开发实战-11】蓝牙BLE多连接机制全解析1
android·蓝牙