Windows WDI WiFi驱动中EAPOL帧处理异常问题排查
WDI驱动EAPOL帧上报问题排查方案
核心问题定位
连接WPA2个人AP时,常规方式上报EAPOL msg1后NDIS未下发msg2,但开放AP工作正常,说明EAPOL帧需要特殊处理,而非通用数据帧的上报逻辑。
EAPOL帧必须的特殊处理项
- LLC/SNAP格式严格匹配:EAPOL帧的LLC部分必须是标准格式:DSAP=0xAA、SSAP=0xAA、Control=0x03,SNAP OUI=0x000000、EtherType=0x888E。你提到的8B LLC字段需完全符合这个结构,这是WDI识别EAPOL帧的核心依据。
- PeerId与TID不能用默认值:协商阶段(未完成关联前),PeerId必须指定为对应AP的已关联PeerId,不能设为Any;TID需设为0(EAPOL属于非QoS帧),而非Unknown,否则WDI无法正确路由帧到EAPOL处理模块。
- 添加EAPOL帧标记:调用
NDIS_WDI_RX_INORDER_DATA_IND_HANDLER时,要在WDI_RX_MPDU_INFO的RxFlags中设置WDI_RX_MPDU_FLAG_EAPOL,明确告知WDI这是EAPOL帧,触发专门的处理流程。 - QoS字段需移除或修正:EAPOL帧本身是非QoS帧,不要添加QoS-control字段;如果已经添加,需将子类型改为
Data而非QosData,避免WDI解析异常。
其他排查方向
- MacHeader子类型校验:确认MacHeader的子类型是
Data(0x00),而非QoS Data,EAPOL帧不属于QoS数据帧范畴。 - WinDbg日志重点检查:查看WDI接收帧后的日志,是否存在“EAPOL帧未识别”“PeerId不匹配”“帧格式错误”这类提示,定位WDI丢弃帧的直接原因。
- NBL结构正确性验证:确保上报的NBL中,NET_BUFFER的偏移、长度完全匹配MacHeader(24B)+LLC(8B)+Payload的结构,避免字节偏移错误导致解析失败。
代码调整示例
填充WDI_RX_MPDU_INFO时补充关键参数:
WDI_RX_MPDU_INFO rx_mpdu_info = {0}; rx_mpdu_info.RxFlags = WDI_RX_MPDU_FLAG_EAPOL; rx_mpdu_info.PeerId = ap_peer_id; // 使用已关联AP的PeerId,而非WDI_PEER_ID_ANY rx_mpdu_info.Tid = 0;
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

