上一篇说道,ieee80211_invoke_rx_handlers中CALL_RXH(ieee80211_rx_h_mgmt)用于管理帧的处理,这篇文章将对ieee80211_rx_h_mgmt函数进行简单分析。
ieee80211_queue_work(&rx->local->hw, &sdata->work);把sdata->work放入处理队里,而sdata->work被初始化为ieee80211_iface_work函数。继续跟踪ieee80211_iface_work下面一切操作的前提是接口类型是station,如果是AP,会在前面的用户空间处理函数中上交给上层,如hostapd。
①sta = sta_info_get_bss(sdata, mgmt->sa)这个函数根据mgmt->sa,也就是mgmt frame的源地址,进行哈希查表找到对应的station信息,然后判断sta对应的sdata(sdata是一个ieee80211_sub_if_data结构体)是否是这个的sdata,sta对应的bss是不是该sdata对应的bss。
②ieee80211_sta_rx_queued_mgmt(sdata, skb)。粘一段代码。