Lines Matching full:rx
677 * RX header they pull before we get here, and that should in ieee80211_make_monitor_skb()
742 * (2) the other RX handlers will modify the skb we got. in ieee80211_rx_monitor()
820 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx) in ieee80211_parse_qos() argument
822 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_parse_qos()
823 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_parse_qos()
855 rx->seqno_idx = seqno_idx; in ieee80211_parse_qos()
856 rx->security_idx = security_idx; in ieee80211_parse_qos()
859 rx->skb->priority = (tid > 7) ? 0 : tid; in ieee80211_parse_qos()
887 static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) in ieee80211_verify_alignment() argument
890 WARN_ON_ONCE((unsigned long)rx->skb->data & 1); in ieee80211_verify_alignment()
895 /* rx handlers */
969 static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) in ieee80211_rx_mesh_check() argument
971 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_mesh_check()
972 char *dev_addr = rx->sdata->vif.addr; in ieee80211_rx_mesh_check()
993 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) { in ieee80211_rx_mesh_check()
1003 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) in ieee80211_rx_mesh_check()
1095 * Timeout (in jiffies) for skb's that are waiting in the RX reorder buffer. If
1139 "release an RX reorder frame due to timeout on earlier frames\n"); in ieee80211_sta_reorder_release()
1178 * As this function belongs to the RX path it must be under
1282 static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx, in ieee80211_rx_reorder_ampdu() argument
1285 struct sk_buff *skb = rx->skb; in ieee80211_rx_reorder_ampdu()
1286 struct ieee80211_local *local = rx->local; in ieee80211_rx_reorder_ampdu()
1288 struct sta_info *sta = rx->sta; in ieee80211_rx_reorder_ampdu()
1298 * filter the QoS data rx stream according to in ieee80211_rx_reorder_ampdu()
1312 !test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) && in ieee80211_rx_reorder_ampdu()
1313 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg)) in ieee80211_rx_reorder_ampdu()
1314 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, in ieee80211_rx_reorder_ampdu()
1335 /* if this mpdu is fragmented - terminate rx aggregation session */ in ieee80211_rx_reorder_ampdu()
1338 skb_queue_tail(&rx->sdata->skb_queue, skb); in ieee80211_rx_reorder_ampdu()
1339 ieee80211_queue_work(&local->hw, &rx->sdata->work); in ieee80211_rx_reorder_ampdu()
1345 * RX packet at a time, and thus own tid_agg_rx. All in ieee80211_rx_reorder_ampdu()
1350 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb, in ieee80211_rx_reorder_ampdu()
1359 ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_dup() argument
1361 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check_dup()
1362 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_check_dup()
1372 if (rx->skb->len < 24) in ieee80211_rx_h_check_dup()
1380 if (!rx->sta) in ieee80211_rx_h_check_dup()
1384 rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) { in ieee80211_rx_h_check_dup()
1385 I802_DEBUG_INC(rx->local->dot11FrameDuplicateCount); in ieee80211_rx_h_check_dup()
1386 rx->sta->rx_stats.num_duplicates++; in ieee80211_rx_h_check_dup()
1389 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl; in ieee80211_rx_h_check_dup()
1396 ieee80211_rx_h_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check() argument
1398 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check()
1409 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_check()
1410 return ieee80211_rx_mesh_check(rx); in ieee80211_rx_h_check()
1414 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_rx_h_check()
1415 rx->sdata->vif.type != NL80211_IFTYPE_WDS && in ieee80211_rx_h_check()
1416 rx->sdata->vif.type != NL80211_IFTYPE_OCB && in ieee80211_rx_h_check()
1417 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) { in ieee80211_rx_h_check()
1423 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_check()
1430 if (rx->skb->len < hdrlen + 8) in ieee80211_rx_h_check()
1433 skb_copy_bits(rx->skb, hdrlen + 6, ðertype, 2); in ieee80211_rx_h_check()
1434 if (ethertype == rx->sdata->control_port_protocol) in ieee80211_rx_h_check()
1438 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_check()
1439 cfg80211_rx_spurious_frame(rx->sdata->dev, in ieee80211_rx_h_check()
1452 ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_more_data() argument
1458 local = rx->local; in ieee80211_rx_h_check_more_data()
1459 skb = rx->skb; in ieee80211_rx_h_check_more_data()
1479 ieee80211_send_pspoll(local, rx->sdata); in ieee80211_rx_h_check_more_data()
1604 ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx) in ieee80211_rx_h_uapsd_and_pspoll() argument
1606 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_uapsd_and_pspoll()
1607 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_rx_h_uapsd_and_pspoll()
1608 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1610 if (!rx->sta) in ieee80211_rx_h_uapsd_and_pspoll()
1630 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA)) in ieee80211_rx_h_uapsd_and_pspoll()
1634 ieee80211_sta_pspoll(&rx->sta->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1638 dev_kfree_skb(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1648 ieee80211_sta_uapsd_trigger(&rx->sta->sta, tid); in ieee80211_rx_h_uapsd_and_pspoll()
1655 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) in ieee80211_rx_h_sta_process() argument
1657 struct sta_info *sta = rx->sta; in ieee80211_rx_h_sta_process()
1658 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_sta_process()
1674 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { in ieee80211_rx_h_sta_process()
1675 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, in ieee80211_rx_h_sta_process()
1677 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) && in ieee80211_rx_h_sta_process()
1685 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) { in ieee80211_rx_h_sta_process()
1697 if (rx->sdata->vif.type == NL80211_IFTYPE_STATION) in ieee80211_rx_h_sta_process()
1698 ieee80211_sta_rx_notify(rx->sdata, hdr); in ieee80211_rx_h_sta_process()
1702 u64_stats_update_begin(&rx->sta->rx_stats.syncp); in ieee80211_rx_h_sta_process()
1703 sta->rx_stats.bytes += rx->skb->len; in ieee80211_rx_h_sta_process()
1704 u64_stats_update_end(&rx->sta->rx_stats.syncp); in ieee80211_rx_h_sta_process()
1736 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1737 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) { in ieee80211_rx_h_sta_process()
1748 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_sta_process()
1756 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); in ieee80211_rx_h_sta_process()
1765 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1766 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_sta_process()
1767 !rx->sdata->u.vlan.sta))) { in ieee80211_rx_h_sta_process()
1770 rx->sdata->dev, sta->sta.addr, in ieee80211_rx_h_sta_process()
1779 dev_kfree_skb(rx->skb); in ieee80211_rx_h_sta_process()
1787 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_decrypt() argument
1789 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_decrypt()
1828 rx->key = NULL; in ieee80211_rx_h_decrypt()
1831 if (rx->sta) { in ieee80211_rx_h_decrypt()
1832 int keyid = rx->sta->ptk_idx; in ieee80211_rx_h_decrypt()
1834 if (ieee80211_has_protected(fc) && rx->sta->cipher_scheme) { in ieee80211_rx_h_decrypt()
1835 cs = rx->sta->cipher_scheme; in ieee80211_rx_h_decrypt()
1836 keyid = ieee80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1840 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]); in ieee80211_rx_h_decrypt()
1844 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); in ieee80211_rx_h_decrypt()
1847 rx->key = sta_ptk; in ieee80211_rx_h_decrypt()
1863 if (rx->sta) { in ieee80211_rx_h_decrypt()
1865 test_sta_flag(rx->sta, WLAN_STA_MFP)) in ieee80211_rx_h_decrypt()
1868 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1870 if (!rx->key) in ieee80211_rx_h_decrypt()
1871 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1875 * need to set rx->key if there is a key that could have been in ieee80211_rx_h_decrypt()
1880 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_decrypt()
1885 (key = rcu_dereference(rx->sdata->default_mgmt_key))) in ieee80211_rx_h_decrypt()
1886 rx->key = key; in ieee80211_rx_h_decrypt()
1888 if (rx->sta) { in ieee80211_rx_h_decrypt()
1890 key = rcu_dereference(rx->sta->gtk[i]); in ieee80211_rx_h_decrypt()
1903 rx->key = key; in ieee80211_rx_h_decrypt()
1925 keyidx = ieee80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1930 if (rx->skb->len < 8 + hdrlen) in ieee80211_rx_h_decrypt()
1936 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1); in ieee80211_rx_h_decrypt()
1941 if (is_multicast_ether_addr(hdr->addr1) && rx->sta) in ieee80211_rx_h_decrypt()
1942 rx->key = rcu_dereference(rx->sta->gtk[keyidx]); in ieee80211_rx_h_decrypt()
1945 if (!rx->key) { in ieee80211_rx_h_decrypt()
1946 rx->key = rcu_dereference(rx->sdata->keys[keyidx]); in ieee80211_rx_h_decrypt()
1953 if (rx->key && in ieee80211_rx_h_decrypt()
1954 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 && in ieee80211_rx_h_decrypt()
1955 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 && in ieee80211_rx_h_decrypt()
1957 rx->key = NULL; in ieee80211_rx_h_decrypt()
1961 if (rx->key) { in ieee80211_rx_h_decrypt()
1962 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED)) in ieee80211_rx_h_decrypt()
1970 switch (rx->key->conf.cipher) { in ieee80211_rx_h_decrypt()
1973 result = ieee80211_crypto_wep_decrypt(rx); in ieee80211_rx_h_decrypt()
1976 result = ieee80211_crypto_tkip_decrypt(rx); in ieee80211_rx_h_decrypt()
1980 rx, IEEE80211_CCMP_MIC_LEN); in ieee80211_rx_h_decrypt()
1984 rx, IEEE80211_CCMP_256_MIC_LEN); in ieee80211_rx_h_decrypt()
1987 result = ieee80211_crypto_aes_cmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1990 result = ieee80211_crypto_aes_cmac_256_decrypt(rx); in ieee80211_rx_h_decrypt()
1994 result = ieee80211_crypto_aes_gmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1998 result = ieee80211_crypto_gcmp_decrypt(rx); in ieee80211_rx_h_decrypt()
2001 result = ieee80211_crypto_hw_decrypt(rx); in ieee80211_rx_h_decrypt()
2096 static bool requires_sequential_pn(struct ieee80211_rx_data *rx, __le16 fc) in requires_sequential_pn() argument
2098 return rx->key && in requires_sequential_pn()
2099 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP || in requires_sequential_pn()
2100 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 || in requires_sequential_pn()
2101 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP || in requires_sequential_pn()
2102 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) && in requires_sequential_pn()
2107 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) in ieee80211_rx_h_defragment() argument
2109 struct ieee80211_fragment_cache *cache = &rx->sdata->frags; in ieee80211_rx_h_defragment()
2116 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_defragment()
2118 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
2128 I802_DEBUG_INC(rx->local->dot11MulticastReceivedFrameCount); in ieee80211_rx_h_defragment()
2132 if (rx->sta) in ieee80211_rx_h_defragment()
2133 cache = &rx->sta->frags; in ieee80211_rx_h_defragment()
2138 I802_DEBUG_INC(rx->local->rx_handlers_fragments); in ieee80211_rx_h_defragment()
2140 if (skb_linearize(rx->skb)) in ieee80211_rx_h_defragment()
2148 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
2154 rx->seqno_idx, &(rx->skb)); in ieee80211_rx_h_defragment()
2155 if (requires_sequential_pn(rx, fc)) { in ieee80211_rx_h_defragment()
2156 int queue = rx->security_idx; in ieee80211_rx_h_defragment()
2163 entry->key_color = rx->key->color; in ieee80211_rx_h_defragment()
2165 rx->key->u.ccmp.rx_pn[queue], in ieee80211_rx_h_defragment()
2171 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) != in ieee80211_rx_h_defragment()
2172 sizeof(rx->key->u.gcmp.rx_pn[queue])); in ieee80211_rx_h_defragment()
2175 } else if (rx->key && in ieee80211_rx_h_defragment()
2179 entry->key_color = rx->key->color; in ieee80211_rx_h_defragment()
2188 rx->seqno_idx, hdr); in ieee80211_rx_h_defragment()
2190 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
2204 if (!requires_sequential_pn(rx, fc)) in ieee80211_rx_h_defragment()
2208 if (entry->key_color != rx->key->color) in ieee80211_rx_h_defragment()
2217 queue = rx->security_idx; in ieee80211_rx_h_defragment()
2218 rpn = rx->key->u.ccmp.rx_pn[queue]; in ieee80211_rx_h_defragment()
2223 (!rx->key || in ieee80211_rx_h_defragment()
2226 rx->key->color != entry->key_color)) { in ieee80211_rx_h_defragment()
2232 } else if (entry->is_protected && rx->key && in ieee80211_rx_h_defragment()
2233 entry->key_color != rx->key->color && in ieee80211_rx_h_defragment()
2238 skb_pull(rx->skb, ieee80211_hdrlen(fc)); in ieee80211_rx_h_defragment()
2239 __skb_queue_tail(&entry->skb_list, rx->skb); in ieee80211_rx_h_defragment()
2241 entry->extra_len += rx->skb->len; in ieee80211_rx_h_defragment()
2243 rx->skb = NULL; in ieee80211_rx_h_defragment()
2247 rx->skb = __skb_dequeue(&entry->skb_list); in ieee80211_rx_h_defragment()
2248 if (skb_tailroom(rx->skb) < entry->extra_len) { in ieee80211_rx_h_defragment()
2249 I802_DEBUG_INC(rx->local->rx_expand_skb_head_defrag); in ieee80211_rx_h_defragment()
2250 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, in ieee80211_rx_h_defragment()
2252 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
2258 skb_put_data(rx->skb, skb->data, skb->len); in ieee80211_rx_h_defragment()
2263 ieee80211_led_rx(rx->local); in ieee80211_rx_h_defragment()
2265 if (rx->sta) in ieee80211_rx_h_defragment()
2266 rx->sta->rx_stats.packets++; in ieee80211_rx_h_defragment()
2270 static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx) in ieee80211_802_1x_port_control() argument
2272 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED))) in ieee80211_802_1x_port_control()
2278 static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_drop_unencrypted() argument
2280 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_drop_unencrypted()
2281 struct sk_buff *skb = rx->skb; in ieee80211_drop_unencrypted()
2292 if (unlikely(rx->sta && ieee80211_vif_is_mesh(&rx->sdata->vif) && in ieee80211_drop_unencrypted()
2299 if (!ether_addr_equal(hdr->addr1, rx->sdata->vif.addr)) in ieee80211_drop_unencrypted()
2303 if (!pskb_may_pull(rx->skb, hdr_len + 6)) in ieee80211_drop_unencrypted()
2310 if (skb_copy_bits(rx->skb, ethertype_offset, ðertype, 2) == 0 && in ieee80211_drop_unencrypted()
2311 ethertype == rx->sdata->control_port_protocol) in ieee80211_drop_unencrypted()
2319 ieee80211_is_data(fc) && rx->key)) in ieee80211_drop_unencrypted()
2325 static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx) in ieee80211_drop_unencrypted_mgmt() argument
2327 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_drop_unencrypted_mgmt()
2328 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_drop_unencrypted_mgmt()
2338 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) { in ieee80211_drop_unencrypted_mgmt()
2340 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
2341 rx->key)) { in ieee80211_drop_unencrypted_mgmt()
2344 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2345 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2346 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2350 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
2351 ieee80211_get_mmie_keyidx(rx->skb) < 0)) { in ieee80211_drop_unencrypted_mgmt()
2354 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2355 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2356 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2363 if (unlikely(ieee80211_is_action(fc) && !rx->key && in ieee80211_drop_unencrypted_mgmt()
2364 ieee80211_is_robust_mgmt_frame(rx->skb))) in ieee80211_drop_unencrypted_mgmt()
2372 __ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) in __ieee80211_data_to_8023() argument
2374 struct ieee80211_sub_if_data *sdata = rx->sdata; in __ieee80211_data_to_8023()
2375 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in __ieee80211_data_to_8023()
2398 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); in __ieee80211_data_to_8023()
2402 ehdr = (struct ethhdr *) rx->skb->data; in __ieee80211_data_to_8023()
2403 if (ehdr->h_proto == rx->sdata->control_port_protocol) in __ieee80211_data_to_8023()
2412 * requires that rx->skb is a frame with ethernet header
2414 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_frame_allowed() argument
2418 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_frame_allowed()
2424 if (ehdr->h_proto == rx->sdata->control_port_protocol && in ieee80211_frame_allowed()
2425 (ether_addr_equal(ehdr->h_dest, rx->sdata->vif.addr) || in ieee80211_frame_allowed()
2429 if (ieee80211_802_1x_port_control(rx) || in ieee80211_frame_allowed()
2430 ieee80211_drop_unencrypted(rx, fc)) in ieee80211_frame_allowed()
2437 struct ieee80211_rx_data *rx) in ieee80211_deliver_skb_to_local_stack() argument
2439 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb_to_local_stack()
2454 if (rx->napi) in ieee80211_deliver_skb_to_local_stack()
2455 napi_gro_receive(rx->napi, skb); in ieee80211_deliver_skb_to_local_stack()
2462 * requires that rx->skb is a frame with ethernet header
2465 ieee80211_deliver_skb(struct ieee80211_rx_data *rx) in ieee80211_deliver_skb() argument
2467 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb()
2470 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_deliver_skb()
2473 skb = rx->skb; in ieee80211_deliver_skb()
2478 if (rx->sta) { in ieee80211_deliver_skb()
2484 u64_stats_update_begin(&rx->sta->rx_stats.syncp); in ieee80211_deliver_skb()
2485 rx->sta->rx_stats.msdu[rx->seqno_idx]++; in ieee80211_deliver_skb()
2486 u64_stats_update_end(&rx->sta->rx_stats.syncp); in ieee80211_deliver_skb()
2546 ieee80211_deliver_skb_to_local_stack(skb, rx); in ieee80211_deliver_skb()
2564 __ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset) in __ieee80211_rx_h_amsdu() argument
2566 struct net_device *dev = rx->sdata->dev; in __ieee80211_rx_h_amsdu()
2567 struct sk_buff *skb = rx->skb; in __ieee80211_rx_h_amsdu()
2577 } else switch (rx->sdata->vif.type) { in __ieee80211_rx_h_amsdu()
2583 if (!rx->sta || in __ieee80211_rx_h_amsdu()
2584 !test_sta_flag(rx->sta, WLAN_STA_TDLS_PEER)) in __ieee80211_rx_h_amsdu()
2598 rx->sdata->vif.addr, in __ieee80211_rx_h_amsdu()
2599 rx->sdata->vif.type, in __ieee80211_rx_h_amsdu()
2604 rx->sdata->vif.type, in __ieee80211_rx_h_amsdu()
2605 rx->local->hw.extra_tx_headroom, in __ieee80211_rx_h_amsdu()
2609 rx->skb = __skb_dequeue(&frame_list); in __ieee80211_rx_h_amsdu()
2611 if (!ieee80211_frame_allowed(rx, fc)) { in __ieee80211_rx_h_amsdu()
2612 dev_kfree_skb(rx->skb); in __ieee80211_rx_h_amsdu()
2616 ieee80211_deliver_skb(rx); in __ieee80211_rx_h_amsdu()
2623 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) in ieee80211_rx_h_amsdu() argument
2625 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_amsdu()
2640 switch (rx->sdata->vif.type) { in ieee80211_rx_h_amsdu()
2642 if (!rx->sdata->u.vlan.sta) in ieee80211_rx_h_amsdu()
2646 if (!rx->sdata->u.mgd.use_4addr) in ieee80211_rx_h_amsdu()
2657 if (rx->key) { in ieee80211_rx_h_amsdu()
2664 switch (rx->key->conf.cipher) { in ieee80211_rx_h_amsdu()
2674 return __ieee80211_rx_h_amsdu(rx, 0); in ieee80211_rx_h_amsdu()
2679 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mesh_fwding() argument
2684 struct sk_buff *skb = rx->skb, *fwd_skb; in ieee80211_rx_h_mesh_fwding()
2685 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_mesh_fwding()
2686 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mesh_fwding()
2695 if (!pskb_may_pull(rx->skb, hdrlen + 6)) in ieee80211_rx_h_mesh_fwding()
2701 if (!pskb_may_pull(rx->skb, in ieee80211_rx_h_mesh_fwding()
2709 if (ieee80211_drop_unencrypted(rx, hdr->frame_control)) in ieee80211_rx_h_mesh_fwding()
2715 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr)) in ieee80211_rx_h_mesh_fwding()
2792 info->control.vif = &rx->sdata->vif; in ieee80211_rx_h_mesh_fwding()
2823 ieee80211_rx_h_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_data() argument
2825 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_data()
2826 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_data()
2828 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_data()
2845 if (rx->sta && in ieee80211_rx_h_data()
2846 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT)) in ieee80211_rx_h_data()
2848 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC); in ieee80211_rx_h_data()
2852 err = __ieee80211_data_to_8023(rx, &port_control); in ieee80211_rx_h_data()
2856 if (!ieee80211_frame_allowed(rx, fc)) in ieee80211_rx_h_data()
2860 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto == in ieee80211_rx_h_data()
2862 struct ieee80211_tdls_data *tf = (void *)rx->skb->data; in ieee80211_rx_h_data()
2864 if (pskb_may_pull(rx->skb, in ieee80211_rx_h_data()
2870 skb_queue_tail(&local->skb_queue_tdls_chsw, rx->skb); in ieee80211_rx_h_data()
2872 if (rx->sta) in ieee80211_rx_h_data()
2873 rx->sta->rx_stats.packets++; in ieee80211_rx_h_data()
2879 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_data()
2884 rx->sdata = sdata; in ieee80211_rx_h_data()
2887 rx->skb->dev = dev; in ieee80211_rx_h_data()
2892 ((struct ethhdr *)rx->skb->data)->h_dest) && in ieee80211_rx_h_data()
2898 ieee80211_deliver_skb(rx); in ieee80211_rx_h_data()
2904 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames) in ieee80211_rx_h_ctrl() argument
2906 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_ctrl()
2923 if (!rx->sta) in ieee80211_rx_h_ctrl()
2932 if (!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) && in ieee80211_rx_h_ctrl()
2933 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg)) in ieee80211_rx_h_ctrl()
2934 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, in ieee80211_rx_h_ctrl()
2938 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_h_ctrl()
2945 event.u.ba.sta = &rx->sta->sta; in ieee80211_rx_h_ctrl()
2954 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx, in ieee80211_rx_h_ctrl()
2958 drv_event_callback(rx->local, rx->sdata, &event); in ieee80211_rx_h_ctrl()
3018 ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt_check() argument
3020 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_mgmt_check()
3021 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_mgmt_check()
3028 if (rx->skb->len < 24) in ieee80211_rx_h_mgmt_check()
3034 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_mgmt_check()
3036 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { in ieee80211_rx_h_mgmt_check()
3039 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) && in ieee80211_rx_h_mgmt_check()
3043 cfg80211_report_obss_beacon(rx->local->hw.wiphy, in ieee80211_rx_h_mgmt_check()
3044 rx->skb->data, rx->skb->len, in ieee80211_rx_h_mgmt_check()
3046 rx->flags |= IEEE80211_RX_BEACON_REPORTED; in ieee80211_rx_h_mgmt_check()
3049 if (ieee80211_drop_unencrypted_mgmt(rx)) in ieee80211_rx_h_mgmt_check()
3056 ieee80211_rx_h_action(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action() argument
3058 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action()
3059 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action()
3060 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action()
3061 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action()
3062 int len = rx->skb->len; in ieee80211_rx_h_action()
3071 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC && in ieee80211_rx_h_action()
3079 if (!rx->sta->sta.ht_cap.ht_supported) in ieee80211_rx_h_action()
3115 if (rx->sta->sta.smps_mode == smps_mode) in ieee80211_rx_h_action()
3117 rx->sta->sta.smps_mode = smps_mode; in ieee80211_rx_h_action()
3122 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
3124 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
3127 rx->sta->addr, in ieee80211_rx_h_action()
3139 if (!(rx->sta->sta.ht_cap.cap & in ieee80211_rx_h_action()
3146 max_bw = ieee80211_sta_cap_rx_bw(rx->sta); in ieee80211_rx_h_action()
3149 rx->sta->cur_max_bandwidth = max_bw; in ieee80211_rx_h_action()
3150 new_bw = ieee80211_sta_cur_vht_bw(rx->sta); in ieee80211_rx_h_action()
3152 if (rx->sta->sta.bandwidth == new_bw) in ieee80211_rx_h_action()
3155 rx->sta->sta.bandwidth = new_bw; in ieee80211_rx_h_action()
3156 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
3158 ieee80211_sta_rx_bw_to_chan_width(rx->sta); in ieee80211_rx_h_action()
3161 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
3164 rx->sta->addr, in ieee80211_rx_h_action()
3179 if (!rx->sta) in ieee80211_rx_h_action()
3353 if (rx->sta) in ieee80211_rx_h_action()
3354 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action()
3355 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action()
3359 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_action()
3361 if (rx->sta) in ieee80211_rx_h_action()
3362 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action()
3367 ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_userspace_mgmt() argument
3369 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_userspace_mgmt()
3383 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) && in ieee80211_rx_h_userspace_mgmt()
3387 if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig, in ieee80211_rx_h_userspace_mgmt()
3388 rx->skb->data, rx->skb->len, 0)) { in ieee80211_rx_h_userspace_mgmt()
3389 if (rx->sta) in ieee80211_rx_h_userspace_mgmt()
3390 rx->sta->rx_stats.packets++; in ieee80211_rx_h_userspace_mgmt()
3391 dev_kfree_skb(rx->skb); in ieee80211_rx_h_userspace_mgmt()
3399 ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action_return() argument
3401 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action_return()
3402 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action_return()
3404 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action_return()
3405 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action_return()
3432 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0, in ieee80211_rx_h_action_return()
3439 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN); in ieee80211_rx_h_action_return()
3443 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { in ieee80211_rx_h_action_return()
3454 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7, in ieee80211_rx_h_action_return()
3457 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action_return()
3462 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt() argument
3464 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mgmt()
3465 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; in ieee80211_rx_h_mgmt()
3514 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_mgmt()
3515 ieee80211_queue_work(&rx->local->hw, &sdata->work); in ieee80211_rx_h_mgmt()
3516 if (rx->sta) in ieee80211_rx_h_mgmt()
3517 rx->sta->rx_stats.packets++; in ieee80211_rx_h_mgmt()
3522 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, in ieee80211_rx_cooked_monitor() argument
3526 struct ieee80211_local *local = rx->local; in ieee80211_rx_cooked_monitor()
3527 struct sk_buff *skb = rx->skb, *skb2; in ieee80211_rx_cooked_monitor()
3536 if (rx->flags & IEEE80211_RX_CMNTR) in ieee80211_rx_cooked_monitor()
3538 rx->flags |= IEEE80211_RX_CMNTR; in ieee80211_rx_cooked_monitor()
3592 static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers_result() argument
3597 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3598 if (rx->sta) in ieee80211_rx_handlers_result()
3599 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3606 status = IEEE80211_SKB_RXCB((rx->skb)); in ieee80211_rx_handlers_result()
3608 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_handlers_result()
3612 ieee80211_rx_cooked_monitor(rx, rate); in ieee80211_rx_handlers_result()
3616 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3617 if (rx->sta) in ieee80211_rx_handlers_result()
3618 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3619 dev_kfree_skb(rx->skb); in ieee80211_rx_handlers_result()
3622 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued); in ieee80211_rx_handlers_result()
3627 static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers() argument
3635 res = rxh(rx); \ in ieee80211_rx_handlers()
3640 /* Lock here to avoid hitting all of the data used in the RX in ieee80211_rx_handlers()
3643 * from the timer, potentially concurrently with RX from the in ieee80211_rx_handlers()
3646 spin_lock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3654 rx->skb = skb; in ieee80211_rx_handlers()
3664 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_handlers()
3671 res = ieee80211_rx_h_ctrl(rx, frames); in ieee80211_rx_handlers()
3682 ieee80211_rx_handlers_result(rx, res); in ieee80211_rx_handlers()
3687 spin_unlock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3690 static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx) in ieee80211_invoke_rx_handlers() argument
3699 res = rxh(rx); \ in ieee80211_invoke_rx_handlers()
3707 ieee80211_rx_reorder_ampdu(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3709 ieee80211_rx_handlers(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3713 ieee80211_rx_handlers_result(rx, res); in ieee80211_invoke_rx_handlers()
3719 * This function makes calls into the RX path, therefore
3725 struct ieee80211_rx_data rx = { in ieee80211_release_reorder_timeout() local
3752 drv_event_callback(rx.local, rx.sdata, &event); in ieee80211_release_reorder_timeout()
3755 ieee80211_rx_handlers(&rx, &frames); in ieee80211_release_reorder_timeout()
3765 struct ieee80211_rx_data rx = { in ieee80211_mark_rx_ba_filtered_frames() local
3779 rx.sta = sta; in ieee80211_mark_rx_ba_filtered_frames()
3780 rx.sdata = sta->sdata; in ieee80211_mark_rx_ba_filtered_frames()
3781 rx.local = sta->local; in ieee80211_mark_rx_ba_filtered_frames()
3830 ieee80211_rx_handlers(&rx, &frames); in ieee80211_mark_rx_ba_filtered_frames()
3839 static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx) in ieee80211_accept_frame() argument
3841 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_accept_frame()
3842 struct sk_buff *skb = rx->skb; in ieee80211_accept_frame()
3852 if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta) in ieee80211_accept_frame()
3870 if (!rx->sta) { in ieee80211_accept_frame()
3890 if (!rx->sta) { in ieee80211_accept_frame()
4000 /* fast-rx doesn't do reordering */ in ieee80211_check_fast_rx()
4038 /* parallel-rx requires this, at least with calls to in ieee80211_check_fast_rx()
4073 /* we don't want to deal with MMIC in fast-rx */ in ieee80211_check_fast_rx()
4150 static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx, in ieee80211_invoke_fast_rx() argument
4153 struct sk_buff *skb = rx->skb; in ieee80211_invoke_fast_rx()
4156 struct sta_info *sta = rx->sta; in ieee80211_invoke_fast_rx()
4173 /* for parallel-rx, we need to have DUP_VALIDATED, otherwise we write in ieee80211_invoke_fast_rx()
4242 if (rx->key && !(status->flag & RX_FLAG_MIC_STRIPPED) && in ieee80211_invoke_fast_rx()
4247 ieee80211_sta_rx_notify(rx->sdata, hdr); in ieee80211_invoke_fast_rx()
4277 if (rx->key && !ieee80211_has_protected(hdr->frame_control)) in ieee80211_invoke_fast_rx()
4281 if (__ieee80211_rx_h_amsdu(rx, snap_offs - hdrlen) != in ieee80211_invoke_fast_rx()
4312 stats->msdu[rx->seqno_idx]++; in ieee80211_invoke_fast_rx()
4322 } else if (sta_info_get(rx->sdata, skb->data)) { in ieee80211_invoke_fast_rx()
4347 if (rx->napi) in ieee80211_invoke_fast_rx()
4348 napi_gro_receive(rx->napi, skb); in ieee80211_invoke_fast_rx()
4361 * was destined for RX processing or not, which,
4365 static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, in ieee80211_prepare_and_rx_handle() argument
4368 struct ieee80211_local *local = rx->local; in ieee80211_prepare_and_rx_handle()
4369 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_prepare_and_rx_handle()
4371 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
4373 /* See if we can do fast-rx; if we have to copy we already lost, in ieee80211_prepare_and_rx_handle()
4380 if (consume && rx->sta) { in ieee80211_prepare_and_rx_handle()
4383 fast_rx = rcu_dereference(rx->sta->fast_rx); in ieee80211_prepare_and_rx_handle()
4384 if (fast_rx && ieee80211_invoke_fast_rx(rx, fast_rx)) in ieee80211_prepare_and_rx_handle()
4388 if (!ieee80211_accept_frame(rx)) in ieee80211_prepare_and_rx_handle()
4401 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
4404 ieee80211_invoke_rx_handlers(rx); in ieee80211_prepare_and_rx_handle()
4409 * This is the actual Rx frames handler. as it belongs to Rx path it must
4421 struct ieee80211_rx_data rx; in __ieee80211_rx_handle_packet() local
4427 memset(&rx, 0, sizeof(rx)); in __ieee80211_rx_handle_packet()
4428 rx.skb = skb; in __ieee80211_rx_handle_packet()
4429 rx.local = local; in __ieee80211_rx_handle_packet()
4430 rx.napi = napi; in __ieee80211_rx_handle_packet()
4451 ieee80211_parse_qos(&rx); in __ieee80211_rx_handle_packet()
4452 ieee80211_verify_alignment(&rx); in __ieee80211_rx_handle_packet()
4462 rx.sta = container_of(pubsta, struct sta_info, sta); in __ieee80211_rx_handle_packet()
4463 rx.sdata = rx.sta->sdata; in __ieee80211_rx_handle_packet()
4464 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
4477 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
4478 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
4479 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
4485 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
4486 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
4488 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
4515 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
4516 rx.sdata = prev; in __ieee80211_rx_handle_packet()
4517 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
4523 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
4524 rx.sdata = prev; in __ieee80211_rx_handle_packet()
4526 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
4565 /* We might be during a HW reconfig, prevent Rx for the same reason */ in ieee80211_rx_napi()
4663 /* This is a version of the rx handler that can be called from hard irq