你打开手机热点,朋友连上来,屏幕几乎同时亮起 "已连接",然后他的手机上弹出一条通知:网络已连接,可以上网了。从按下开关到朋友能刷视频,中间只隔了几百毫秒——但就在这瞬间,Android 在手机内部走完了一条从 TetheringIpServer 再到 DhcpServer 的完整分房流程:热点接口被创建、一个私有网段被划出来、DHCP 服务在接口上监听、朋友的客户端拿到地址和网关,然后数据才被允许转发到上游。


本章导读

上回讲到《SAP(四)》:SAP 作为 "老板" 要处理共存(DBDC/MCC/SCC)、要管理驱动层状态机、还要在客户端离开时打扫房间。但有个环节被跳过了——客户端关联成功后,它连的只是一个加密的无线链路,它还没有 IP 地址,也就谈不上上网。民宿挂牌了(《SAP(一)》)、装修好了(《SAP(二)》)、客人入住办完手续(《SAP(三)》)、老板在管理前台和客房部(《SAP(四)》)——可客人到现在还没拿到房间钥匙。

Read more »

本文是 SAP 热点系列第四篇。前三篇讲了 Framework 层启动(第一篇)、hostapd 启动与 Beacon 上线(第二篇)、AP 侧 Auth/Assoc/四次握手(第三篇)。本篇讲运营:手机既是热点又是 WiFi 客户端时怎么共存?QCOM 和 MTK 两家驱动怎么管理 AP 状态机?客人走了怎么办?以及出问题时怎么从四层日志定位根因。

核心看点:DBDC 双频并发下的信道冲突、QCOM SAP FSM 四状态分派 vs MTK 复用 P2P Role FSM、异步回调转同步等待的 qdf_wait_single_event 模式、客户端离开的三种路径(自己走/被踢/空闲关)。


1 当老板的烦恼

沙漠民宿开起来了,Beacon 已经挂上,客户端也陆续入住。但这只是开始——真正的挑战在你运营起来之后才会浮现。

第一个烦恼:你想当老板接待客人,但你自己也是个 "客人"——手机还连着家里 WiFi 呢。同一部手机,既要接收 STA 端的下行数据,又要发送 AP 端的 Beacon,只有一套射频硬件,怎么办?这是共存管理的世界。

Read more »

本文是 SAP 热点系列第三篇。第一篇讲了 Framework 层从点击到 hostapd AIDL,第二篇讲了 hostapd 启动、ACS 选频、Beacon 上线。本篇讲 Beacon 上线后发生的事:客户端来敲门了,hostapd 怎么在前台登记(Auth)、怎么分配房间号和房卡(Assoc+AID)、怎么加密发钥匙(四次握手)?

核心看点:角色反转。STA 模式下四次握手是收到 1/4 生成 SNonce 回复 2/4——你是敲门的人。AP 模式下是发送 1/4 等待对方回复 2/4 再验证 MIC——你是发钥匙的人。同样是四个 EAPOL 帧,两边的状态机推进方向完全对称但方向相反。


1 开篇:民宿开门后,客户来了

第一篇讲了怎么 "开民宿"——选信道(选地)、挂 SSID(挂牌子)、发射 Beacon(点亮招牌灯)。现在民宿门开了,灯亮了,有人来敲门了。

如果把 WiFi 连接比作住民宿,STA 模式就是你带着行李走进大堂——看别人家招牌(扫描 Beacon)、选一家顺眼的(选网)、前台登记(Auth/Assoc)、拿房卡进门(四次握手)。整个流程里,客户端是被动的:AP 不来找你,是你去找 AP。

Read more »

上一篇停在 HostapdHal.addAccessPoint() 的 AIDL 跨进程调用那一刻。民宿老板拿到了营业执照,装修队进场——这一篇,我们跨过那行代码,进入 hostapd 的纯 C 世界,看装修队怎么选铺位(ACS)、检测环境(DFS CAC)、硬装(BSS 初始化)、做招牌灯(Beacon 组装)、挂灯牌(nl80211 + 驱动下发)。

1 本章导读

本文覆盖约 10,000 字,核心问题

  1. ACS 的干扰因子公式到底怎么算?QCOM 和 MTK 怎么把 ACS 卸载给固件?
  2. 为什么 BSS 初始化的 8 个步骤必须是这个顺序?
  3. Beacon 帧的 head 和 tail 分别装了什么?为什么拆成两部分?
  4. nl80211 收到 NL80211_CMD_START_AP 后经历了哪三个阶段的处理?
  5. 驱动和固件拿到 Beacon 模板后怎么把它变成空口信号?
Read more »

当你打开手机热点,朋友连上你的网络上网,手机在不到一秒内完成了角色转换——从住客变成开民宿的老板。这一章,我们从 Framework 层追踪这条完整的启动链路:从用户点击 "开启热点",一路追到 AIDL 调用 HostapdHal.addAccessPoint() 跨进程的那一刻。

本章导读

读完本章,你能自己追踪一次 SAP 启动的完整调用链,理解 HalDeviceManager 的接口兼容性检查、频段配置的决策逻辑、SoftApManager 状态机的 5 个状态,以及 setupInterfaceForSoftApMode 6 个步骤的每个细节。

Read more »

连接建立后,STA 和 AP 之间维持着一条脆弱的链路。当这条链路断裂时,STA 可能是主动离开的那个人,也可能是被踢出局的受害者。断连不是一种病——它是五种完全不同的病因导致的同一种症状。要治好 WiFi 断连,第一步不是查日志,而是分清 "谁先动的手"。

我们把 WiFi 断连比作一次急诊就诊。STA 是病人,断连是昏倒,AP 是医院,四层日志是 X 光片、血液检查、心电图和基因检测。不同科室的医生看同一张片子关注点不同——Framework 工程师看 "心跳"(SupplicantState),驱动工程师看 "血氧"(Beacon Miss Count),固件工程师看 "脑电波"(FW Roam Event)。本文是一本断连急诊手册:先教你看懂五张面孔(五种断开类型),再教你区分 Deauth 和 Disassoc 两张化验单,然后讲自动重连的 "急救流程" 和省电模式的 "体质调理",最后给出 13 种常见病因和四层对照诊断法。

PS:本文聚焦 STA 模式下的断连,不涉及 SAP(热点)断连和 P2P 断连。漫游导致的断开在 STA 漫游那篇已展开,本文只讨论 "不回来了" 的断连。

Read more »

连接不是终点。当你拿着手机从一个房间走到另一个房间,信号掉到 -78dBm,STA 面临选择:撑住旧 AP,还是切到新 AP?本文追踪漫游的最后一步——谁来执行搬家、搬错了怎么办。漫游比作搬家:QCOM 的 RSO 是全包搬家公司,MTK 的 Host Roaming 是自己动手。本文聚焦 ESS 内漫游,分析 wpa_supplicant、QCOM qcacld-3.0、MTK gen4m 驱动及 AOSP WiFi Framework 源码(精简处标注 // ...省略...,文件路径标注在代码块首行)。漫游前的扫描机制见《扫描》系列,连接信令见《连接》系列,本文复用不重复。

1 谁来执行搬家?——QCOM 固件代理 vs MTK 驱动亲为

《STA 漫游(一)触发与决策》《STA 漫游(二)802.11k/v/r 三协议》讨论的漫游决策和协议机制,在不同平台上的实现路径截然不同。QCOM 把整个闭环卸载到固件(RSO),MTK 让驱动亲自下场(Host Roaming)。本节回答:两种架构各自的状态机长什么样?扫描调度怎么管?漫游完成后 host 怎么知道结果?

Read more »

连接不是终点。当你拿着手机从一个房间走到另一个房间,信号掉到 -78dBm,STA 面临选择:撑住旧 AP,还是切到新 AP?本文追踪漫游的第二步——搬去哪、怎么搬得无缝。漫游比作搬家:邻居报告是中介推荐房源,BTM 是房东通知你搬,FT 是 VIP 快速通道。本文聚焦 ESS 内漫游,分析 wpa_supplicant、QCOM qcacld-3.0、MTK gen4m 驱动源码(精简处标注 // ...省略...,文件路径标注在代码块首行)。漫游前的扫描机制见《扫描》系列,连接信令见《连接》系列,本文复用不重复。

1 搬去哪?——802.11k 邻居报告

802.11k RRM(Radio Resource Management)的做法很直接:STA 问当前 AP"你附近有哪些邻居?",AP 回复一份邻居报告(Neighbor Report),里面列出附近 AP 的 BSSID、信道号和操作类别——相当于中介递给你的房源清单,上面有地址(BSSID)、所在楼层(信道号)和户型(PHY Type)。拿到这份清单,漫游扫描就能从 "满城跑" 变成 "直奔目标"。

Read more »

连接不是终点。当你拿着手机从一个房间走到另一个房间,信号掉到 -78dBm,STA 面临选择:撑住旧 AP,还是切到新 AP?本文追踪漫游的第一步——什么时候该搬、值不值得搬。漫游比作搬家:信号变差是墙裂,Beacon Loss 是房塌,BTM 是房东通知你搬。

本文聚焦 ESS 内漫游,分析 wpa_supplicant、QCOM qcacld-3.0、MTK gen4m 驱动源码(精简处标注 // ...省略...,文件路径标注在代码块首行)。漫游前的扫描机制见《扫描》系列,连接信令见《连接》系列,本文复用不重复。

1 什么时候该搬家?——漫游的三种触发器

老房子住久了你自然会注意到墙上的裂缝:信号变弱(RSSI 下降)、邻居的噪音变大(PER 升高)、甚至直接断水断电(Beacon 连续丢失)。现代 AP 还多了一个高级玩法——房东主动发通知:这栋楼要拆了,建议你搬到隔壁那栋(BTM Request)。这三种情况分别对应漫游的三个触发源头。

Read more »

"WiFi 7 的路由器有 2.4G+5G+6G 三条链路,你的手机也同时连着三条——但一个 TCP ACK 走哪条?这不是简单的'随便选一条'——语音帧需要低延迟走 5GHz,后台下载不介意延迟走 2.4GHz 还能省电。谁来做这个选择?host 还是固件?QCOM 和 MTK 给出了同一个答案,但背后的架构逻辑完全不同。"


本章导读

数据帧发送篇追踪了从 ndo_start_xmit 到固件的完整发送路径——QCOM 的 10 道关卡、MTK 的 18 道工序、WMM AC 分类、Block ACK 协议。但那篇文章聚焦的是单链路场景:一个 WiFi 网卡,一条信道,数据包从协议栈一路走到空口。

WiFi 7 改变了游戏规则。MLO(Multi-Link Operation)让 STA 可以同时关联 2.4GHz、5GHz 和 6GHz 三条链路——数据包在进入驱动后不再是 "一条路走到黑",而是面临一个岔路口:走哪条链路?用仓库来比喻:单链路是一间只有一条传送带的仓库,MLO 把它扩成了多航线分拨中心——每个数据帧进仓后,第一件事就是决定装进哪架货机。

Read more »