关联请求与响应------MLO连接的正式建立
关联阶段是MLO连接真正落地的环节。当Windows发送OID_WDI_TASK_CONNECT或OID_WDI_TASK_ROAM任务时,驱动程序必须判断目标AP是否支持与WDI_TLV_CONNECT_PARAMETERS TLV中列出的AKM进行多链路连接。若支持且MloConnectionSupported标志为TRUE,驱动程序应使用Wi-Fi 7 MLO方式连接该AP;否则,应退回到传统单链路连接。
在关联帧处理方面,驱动程序必须在关联请求帧中嵌入适当的多链路IE,声明本地设备支持的所有链路及其能力(包括信道、带宽、MAC地址等)。在关联完成时,Windows会检查NDIS_STATUS_WDI_INDICATION_ASSOCIATION_RESULT指示中携带的关联请求和响应帧中的多链路IE,以确认该连接是否实际使用了MLO。因此,驱动程序必须在此指示中提供完整的关联请求帧和响应帧(通过WDI_TLV_ASSOCIATION_RESULT中的相关字段),不得截断或修改。
特别重要的是,若要正常使用Wi-Fi 7 MLO进行关联,驱动程序必须在NDIS_STATUS_WDI_INDICATION_ASSOCIATION_RESULT中设置以下值:
-
将WDI_TLV_ASSOCIATION_RESULT中的BSSID(WDI_TLV_BSSID)设置为AP的链路MAC地址(即关联响应中该链路的BSSID)。
-
将WDI_TLV_ASSOCIATION_RESULT中的LocalLinkBssId(WDI_TLV_MLO_LINK_BSSID)设置为本地对应的链路MAC地址。
注意:如果驱动程序未设置LocalLinkBssId字段,Windows将无法识别该连接为MLO连接,从而导致后续的多链路管理和负载均衡策略失效。因此,该字段的填充是强制性的。
四次握手与密钥管理------GCMP-256与链路感知
Wi-Fi 7强制要求支持GCMP-256加密协议,该协议提供256位加密强度,远超传统的CCMP-128。在四步握手(4-way Handshake)过程中,驱动程序需正确处理GCMP-256相关的密钥派生和安装流程。
Windows在设置组密钥(GTK/IGTK/BIGTK)时,会调用OID_WDI_SET_ADD_CIPHER_KEYS命令,并传递一个密钥元素数组。对于MLO连接,每个密钥元素现在必须包含对应的链路ID(Link ID),以指示该密钥适用于哪条具体链路。驱动程序需根据链路ID将密钥安装到正确的硬件路径中,并确保每条链路使用独立的密钥材料(尽管它们派生自相同的PMK)。
此外,驱动程序应确保在四次握手中正确使用MLD MAC地址(如前文所述),并在EAPOL帧中携带多链路元素(如果AP要求)。任何链路ID或地址的错配都可能导致握手失败或数据解密错误。
链路状态指示------细粒度的链路信息上报
在MLO模式下,连接由多条链路组成,每条链路可能有独立的信号质量、信道和速率。为此,NDIS_STATUS_WDI_INDICATION_LINK_STATE_CHANGE指示已进行了扩展,现在每个链路的状态都通过WDI_TLV_LINK_INFO结构单独上报。该TLV中包含以下信息:
-
链路ID(Link ID):唯一标识该链路的整数值。
-
连接频段和信道号:标识该链路当前工作的频段(2.4/5/6 GHz)及具体信道。
-
接收信号强度指示器(RSSI):以dBm为单位,反映当前链路的信号强度。
-
当前带宽:如20/40/80/160/320 MHz。
-
当前发射MCS(Tx MCS)和接收MCS(Rx MCS):标识当前使用的调制与编码策略等级。
对于MLO连接,驱动程序应为每条活跃链路分别发送链路状态指示。对于非MLO连接(传统单链路),则仅需提供一个链路的默认信息。此细粒度的状态数据使操作系统能够智能地进行流量分发(例如,将时延敏感业务调度到RSSI最优的链路上),同时为用户提供更精确的网络诊断信息。