Lines Matching refs:rx

878 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)  in ieee80211_parse_qos()  argument
880 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_parse_qos()
881 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_parse_qos()
913 rx->seqno_idx = seqno_idx; in ieee80211_parse_qos()
914 rx->security_idx = security_idx; in ieee80211_parse_qos()
917 rx->skb->priority = (tid > 7) ? 0 : tid; in ieee80211_parse_qos()
945 static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) in ieee80211_verify_alignment() argument
948 WARN_ON_ONCE((unsigned long)rx->skb->data & 1); in ieee80211_verify_alignment()
1048 static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) in ieee80211_rx_mesh_check() argument
1050 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_mesh_check()
1051 char *dev_addr = rx->sdata->vif.addr; in ieee80211_rx_mesh_check()
1072 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) { in ieee80211_rx_mesh_check()
1082 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) in ieee80211_rx_mesh_check()
1361 static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx, in ieee80211_rx_reorder_ampdu() argument
1364 struct sk_buff *skb = rx->skb; in ieee80211_rx_reorder_ampdu()
1366 struct sta_info *sta = rx->sta; in ieee80211_rx_reorder_ampdu()
1390 !test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) && in ieee80211_rx_reorder_ampdu()
1391 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg)) in ieee80211_rx_reorder_ampdu()
1392 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, in ieee80211_rx_reorder_ampdu()
1416 ieee80211_queue_skb_to_iface(rx->sdata, NULL, skb); in ieee80211_rx_reorder_ampdu()
1427 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb, in ieee80211_rx_reorder_ampdu()
1436 ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_dup() argument
1438 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check_dup()
1439 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_check_dup()
1449 if (rx->skb->len < 24) in ieee80211_rx_h_check_dup()
1457 if (!rx->sta) in ieee80211_rx_h_check_dup()
1461 rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) { in ieee80211_rx_h_check_dup()
1462 I802_DEBUG_INC(rx->local->dot11FrameDuplicateCount); in ieee80211_rx_h_check_dup()
1463 rx->sta->rx_stats.num_duplicates++; in ieee80211_rx_h_check_dup()
1466 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl; in ieee80211_rx_h_check_dup()
1473 ieee80211_rx_h_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check() argument
1475 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check()
1486 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_check()
1487 return ieee80211_rx_mesh_check(rx); in ieee80211_rx_h_check()
1491 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_rx_h_check()
1492 rx->sdata->vif.type != NL80211_IFTYPE_OCB && in ieee80211_rx_h_check()
1493 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) { in ieee80211_rx_h_check()
1499 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_check()
1506 if (rx->skb->len < hdrlen + 8) in ieee80211_rx_h_check()
1509 skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2); in ieee80211_rx_h_check()
1510 if (ethertype == rx->sdata->control_port_protocol) in ieee80211_rx_h_check()
1514 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_check()
1515 cfg80211_rx_spurious_frame(rx->sdata->dev, in ieee80211_rx_h_check()
1528 ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_more_data() argument
1534 local = rx->local; in ieee80211_rx_h_check_more_data()
1535 skb = rx->skb; in ieee80211_rx_h_check_more_data()
1555 ieee80211_send_pspoll(local, rx->sdata); in ieee80211_rx_h_check_more_data()
1684 ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx) in ieee80211_rx_h_uapsd_and_pspoll() argument
1686 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_uapsd_and_pspoll()
1687 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_rx_h_uapsd_and_pspoll()
1688 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1690 if (!rx->sta) in ieee80211_rx_h_uapsd_and_pspoll()
1710 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA)) in ieee80211_rx_h_uapsd_and_pspoll()
1714 ieee80211_sta_pspoll(&rx->sta->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1718 dev_kfree_skb(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1728 ieee80211_sta_uapsd_trigger(&rx->sta->sta, tid); in ieee80211_rx_h_uapsd_and_pspoll()
1735 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) in ieee80211_rx_h_sta_process() argument
1737 struct sta_info *sta = rx->sta; in ieee80211_rx_h_sta_process()
1738 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_sta_process()
1754 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { in ieee80211_rx_h_sta_process()
1755 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, in ieee80211_rx_h_sta_process()
1757 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) && in ieee80211_rx_h_sta_process()
1765 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) { in ieee80211_rx_h_sta_process()
1780 u64_stats_update_begin(&rx->sta->rx_stats.syncp); in ieee80211_rx_h_sta_process()
1781 sta->rx_stats.bytes += rx->skb->len; in ieee80211_rx_h_sta_process()
1782 u64_stats_update_end(&rx->sta->rx_stats.syncp); in ieee80211_rx_h_sta_process()
1817 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1818 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) { in ieee80211_rx_h_sta_process()
1829 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_sta_process()
1837 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); in ieee80211_rx_h_sta_process()
1846 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1847 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_sta_process()
1848 !rx->sdata->u.vlan.sta))) { in ieee80211_rx_h_sta_process()
1851 rx->sdata->dev, sta->sta.addr, in ieee80211_rx_h_sta_process()
1860 dev_kfree_skb(rx->skb); in ieee80211_rx_h_sta_process()
1868 ieee80211_rx_get_bigtk(struct ieee80211_rx_data *rx, int idx) in ieee80211_rx_get_bigtk() argument
1871 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_get_bigtk()
1890 if (rx->sta) in ieee80211_rx_get_bigtk()
1891 key = rcu_dereference(rx->sta->gtk[idx]); in ieee80211_rx_get_bigtk()
1894 if (!key && rx->sta) in ieee80211_rx_get_bigtk()
1895 key = rcu_dereference(rx->sta->gtk[idx2]); in ieee80211_rx_get_bigtk()
1903 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_decrypt() argument
1905 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_decrypt()
1948 rx->key = NULL; in ieee80211_rx_h_decrypt()
1951 if (rx->sta) { in ieee80211_rx_h_decrypt()
1952 int keyid = rx->sta->ptk_idx; in ieee80211_rx_h_decrypt()
1953 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]); in ieee80211_rx_h_decrypt()
1957 cs = rx->sta->cipher_scheme; in ieee80211_rx_h_decrypt()
1958 keyid = ieee80211_get_keyid(rx->skb, cs); in ieee80211_rx_h_decrypt()
1963 ptk_idx = rcu_dereference(rx->sta->ptk[keyid]); in ieee80211_rx_h_decrypt()
1968 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); in ieee80211_rx_h_decrypt()
1971 rx->key = ptk_idx ? ptk_idx : sta_ptk; in ieee80211_rx_h_decrypt()
1987 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_rx_h_decrypt()
1993 rx->key = ieee80211_rx_get_bigtk(rx, mmie_keyidx); in ieee80211_rx_h_decrypt()
1994 if (!rx->key) in ieee80211_rx_h_decrypt()
2005 if (rx->sta) { in ieee80211_rx_h_decrypt()
2007 test_sta_flag(rx->sta, WLAN_STA_MFP)) in ieee80211_rx_h_decrypt()
2010 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]); in ieee80211_rx_h_decrypt()
2012 if (!rx->key) in ieee80211_rx_h_decrypt()
2013 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]); in ieee80211_rx_h_decrypt()
2022 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_decrypt()
2026 key = ieee80211_rx_get_bigtk(rx, -1); in ieee80211_rx_h_decrypt()
2029 key = rcu_dereference(rx->sdata->default_mgmt_key); in ieee80211_rx_h_decrypt()
2031 if (rx->sta) { in ieee80211_rx_h_decrypt()
2033 key = rcu_dereference(rx->sta->gtk[i]); in ieee80211_rx_h_decrypt()
2047 rx->key = key; in ieee80211_rx_h_decrypt()
2063 keyidx = ieee80211_get_keyid(rx->skb, cs); in ieee80211_rx_h_decrypt()
2069 if (is_multicast_ether_addr(hdr->addr1) && rx->sta) in ieee80211_rx_h_decrypt()
2070 rx->key = rcu_dereference(rx->sta->gtk[keyidx]); in ieee80211_rx_h_decrypt()
2073 if (!rx->key) { in ieee80211_rx_h_decrypt()
2074 rx->key = rcu_dereference(rx->sdata->keys[keyidx]); in ieee80211_rx_h_decrypt()
2081 if (rx->key && in ieee80211_rx_h_decrypt()
2082 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 && in ieee80211_rx_h_decrypt()
2083 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 && in ieee80211_rx_h_decrypt()
2085 rx->key = NULL; in ieee80211_rx_h_decrypt()
2089 if (rx->key) { in ieee80211_rx_h_decrypt()
2090 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED)) in ieee80211_rx_h_decrypt()
2098 switch (rx->key->conf.cipher) { in ieee80211_rx_h_decrypt()
2101 result = ieee80211_crypto_wep_decrypt(rx); in ieee80211_rx_h_decrypt()
2104 result = ieee80211_crypto_tkip_decrypt(rx); in ieee80211_rx_h_decrypt()
2108 rx, IEEE80211_CCMP_MIC_LEN); in ieee80211_rx_h_decrypt()
2112 rx, IEEE80211_CCMP_256_MIC_LEN); in ieee80211_rx_h_decrypt()
2115 result = ieee80211_crypto_aes_cmac_decrypt(rx); in ieee80211_rx_h_decrypt()
2118 result = ieee80211_crypto_aes_cmac_256_decrypt(rx); in ieee80211_rx_h_decrypt()
2122 result = ieee80211_crypto_aes_gmac_decrypt(rx); in ieee80211_rx_h_decrypt()
2126 result = ieee80211_crypto_gcmp_decrypt(rx); in ieee80211_rx_h_decrypt()
2129 result = ieee80211_crypto_hw_decrypt(rx); in ieee80211_rx_h_decrypt()
2138 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_rx_h_decrypt()
2230 static bool requires_sequential_pn(struct ieee80211_rx_data *rx, __le16 fc) in requires_sequential_pn() argument
2232 return rx->key && in requires_sequential_pn()
2233 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP || in requires_sequential_pn()
2234 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 || in requires_sequential_pn()
2235 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP || in requires_sequential_pn()
2236 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) && in requires_sequential_pn()
2241 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) in ieee80211_rx_h_defragment() argument
2243 struct ieee80211_fragment_cache *cache = &rx->sdata->frags; in ieee80211_rx_h_defragment()
2250 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_defragment()
2252 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
2261 if (rx->sta) in ieee80211_rx_h_defragment()
2262 cache = &rx->sta->frags; in ieee80211_rx_h_defragment()
2270 I802_DEBUG_INC(rx->local->rx_handlers_fragments); in ieee80211_rx_h_defragment()
2272 if (skb_linearize(rx->skb)) in ieee80211_rx_h_defragment()
2280 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
2286 rx->seqno_idx, &(rx->skb)); in ieee80211_rx_h_defragment()
2287 if (requires_sequential_pn(rx, fc)) { in ieee80211_rx_h_defragment()
2288 int queue = rx->security_idx; in ieee80211_rx_h_defragment()
2295 entry->key_color = rx->key->color; in ieee80211_rx_h_defragment()
2297 rx->key->u.ccmp.rx_pn[queue], in ieee80211_rx_h_defragment()
2303 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) != in ieee80211_rx_h_defragment()
2304 sizeof(rx->key->u.gcmp.rx_pn[queue])); in ieee80211_rx_h_defragment()
2307 } else if (rx->key && in ieee80211_rx_h_defragment()
2311 entry->key_color = rx->key->color; in ieee80211_rx_h_defragment()
2320 rx->seqno_idx, hdr); in ieee80211_rx_h_defragment()
2322 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
2335 if (!requires_sequential_pn(rx, fc)) in ieee80211_rx_h_defragment()
2339 if (entry->key_color != rx->key->color) in ieee80211_rx_h_defragment()
2349 rpn = rx->ccm_gcm.pn; in ieee80211_rx_h_defragment()
2354 (!rx->key || in ieee80211_rx_h_defragment()
2357 rx->key->color != entry->key_color)) { in ieee80211_rx_h_defragment()
2363 } else if (entry->is_protected && rx->key && in ieee80211_rx_h_defragment()
2364 entry->key_color != rx->key->color && in ieee80211_rx_h_defragment()
2369 skb_pull(rx->skb, ieee80211_hdrlen(fc)); in ieee80211_rx_h_defragment()
2370 __skb_queue_tail(&entry->skb_list, rx->skb); in ieee80211_rx_h_defragment()
2372 entry->extra_len += rx->skb->len; in ieee80211_rx_h_defragment()
2374 rx->skb = NULL; in ieee80211_rx_h_defragment()
2378 rx->skb = __skb_dequeue(&entry->skb_list); in ieee80211_rx_h_defragment()
2379 if (skb_tailroom(rx->skb) < entry->extra_len) { in ieee80211_rx_h_defragment()
2380 I802_DEBUG_INC(rx->local->rx_expand_skb_head_defrag); in ieee80211_rx_h_defragment()
2381 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, in ieee80211_rx_h_defragment()
2383 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
2389 skb_put_data(rx->skb, skb->data, skb->len); in ieee80211_rx_h_defragment()
2394 ieee80211_led_rx(rx->local); in ieee80211_rx_h_defragment()
2395 if (rx->sta) in ieee80211_rx_h_defragment()
2396 rx->sta->rx_stats.packets++; in ieee80211_rx_h_defragment()
2400 static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx) in ieee80211_802_1x_port_control() argument
2402 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED))) in ieee80211_802_1x_port_control()
2408 static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_drop_unencrypted() argument
2410 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_drop_unencrypted()
2411 struct sk_buff *skb = rx->skb; in ieee80211_drop_unencrypted()
2422 if (unlikely(rx->sta && ieee80211_vif_is_mesh(&rx->sdata->vif) && in ieee80211_drop_unencrypted()
2429 if (!ether_addr_equal(hdr->addr1, rx->sdata->vif.addr)) in ieee80211_drop_unencrypted()
2433 if (!pskb_may_pull(rx->skb, hdr_len + 6)) in ieee80211_drop_unencrypted()
2440 if (skb_copy_bits(rx->skb, ethertype_offset, &ethertype, 2) == 0 && in ieee80211_drop_unencrypted()
2441 ethertype == rx->sdata->control_port_protocol) in ieee80211_drop_unencrypted()
2449 ieee80211_is_data(fc) && rx->key)) in ieee80211_drop_unencrypted()
2455 static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx) in ieee80211_drop_unencrypted_mgmt() argument
2457 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_drop_unencrypted_mgmt()
2458 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_drop_unencrypted_mgmt()
2468 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) { in ieee80211_drop_unencrypted_mgmt()
2470 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
2471 rx->key)) { in ieee80211_drop_unencrypted_mgmt()
2474 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2475 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2476 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2480 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
2481 ieee80211_get_mmie_keyidx(rx->skb) < 0)) { in ieee80211_drop_unencrypted_mgmt()
2484 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2485 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2486 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2489 if (unlikely(ieee80211_is_beacon(fc) && rx->key && in ieee80211_drop_unencrypted_mgmt()
2490 ieee80211_get_mmie_keyidx(rx->skb) < 0)) { in ieee80211_drop_unencrypted_mgmt()
2491 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2492 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2493 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2500 if (unlikely(ieee80211_is_action(fc) && !rx->key && in ieee80211_drop_unencrypted_mgmt()
2501 ieee80211_is_robust_mgmt_frame(rx->skb))) in ieee80211_drop_unencrypted_mgmt()
2509 __ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) in __ieee80211_data_to_8023() argument
2511 struct ieee80211_sub_if_data *sdata = rx->sdata; in __ieee80211_data_to_8023()
2512 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in __ieee80211_data_to_8023()
2535 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); in __ieee80211_data_to_8023()
2539 ehdr = (struct ethhdr *) rx->skb->data; in __ieee80211_data_to_8023()
2540 if (ehdr->h_proto == rx->sdata->control_port_protocol) in __ieee80211_data_to_8023()
2551 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_frame_allowed() argument
2555 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_frame_allowed()
2562 if (unlikely(ehdr->h_proto == rx->sdata->control_port_protocol)) in ieee80211_frame_allowed()
2563 return ether_addr_equal(ehdr->h_dest, rx->sdata->vif.addr) || in ieee80211_frame_allowed()
2566 if (ieee80211_802_1x_port_control(rx) || in ieee80211_frame_allowed()
2567 ieee80211_drop_unencrypted(rx, fc)) in ieee80211_frame_allowed()
2574 struct ieee80211_rx_data *rx) in ieee80211_deliver_skb_to_local_stack() argument
2576 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb_to_local_stack()
2612 if (rx->list) in ieee80211_deliver_skb_to_local_stack()
2613 list_add_tail(&skb->list, rx->list); in ieee80211_deliver_skb_to_local_stack()
2623 ieee80211_deliver_skb(struct ieee80211_rx_data *rx) in ieee80211_deliver_skb() argument
2625 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb()
2628 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_deliver_skb()
2631 skb = rx->skb; in ieee80211_deliver_skb()
2636 if (rx->sta) { in ieee80211_deliver_skb()
2642 u64_stats_update_begin(&rx->sta->rx_stats.syncp); in ieee80211_deliver_skb()
2643 rx->sta->rx_stats.msdu[rx->seqno_idx]++; in ieee80211_deliver_skb()
2644 u64_stats_update_end(&rx->sta->rx_stats.syncp); in ieee80211_deliver_skb()
2650 ehdr->h_proto != rx->sdata->control_port_protocol && in ieee80211_deliver_skb()
2706 ieee80211_deliver_skb_to_local_stack(skb, rx); in ieee80211_deliver_skb()
2724 __ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset) in __ieee80211_rx_h_amsdu() argument
2726 struct net_device *dev = rx->sdata->dev; in __ieee80211_rx_h_amsdu()
2727 struct sk_buff *skb = rx->skb; in __ieee80211_rx_h_amsdu()
2737 } else switch (rx->sdata->vif.type) { in __ieee80211_rx_h_amsdu()
2743 if (!rx->sta || in __ieee80211_rx_h_amsdu()
2744 !test_sta_flag(rx->sta, WLAN_STA_TDLS_PEER)) in __ieee80211_rx_h_amsdu()
2758 rx->sdata->vif.addr, in __ieee80211_rx_h_amsdu()
2759 rx->sdata->vif.type, in __ieee80211_rx_h_amsdu()
2764 rx->sdata->vif.type, in __ieee80211_rx_h_amsdu()
2765 rx->local->hw.extra_tx_headroom, in __ieee80211_rx_h_amsdu()
2769 rx->skb = __skb_dequeue(&frame_list); in __ieee80211_rx_h_amsdu()
2771 if (!ieee80211_frame_allowed(rx, fc)) { in __ieee80211_rx_h_amsdu()
2772 dev_kfree_skb(rx->skb); in __ieee80211_rx_h_amsdu()
2776 ieee80211_deliver_skb(rx); in __ieee80211_rx_h_amsdu()
2783 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) in ieee80211_rx_h_amsdu() argument
2785 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_amsdu()
2800 switch (rx->sdata->vif.type) { in ieee80211_rx_h_amsdu()
2802 if (!rx->sdata->u.vlan.sta) in ieee80211_rx_h_amsdu()
2806 if (!rx->sdata->u.mgd.use_4addr) in ieee80211_rx_h_amsdu()
2817 if (rx->key) { in ieee80211_rx_h_amsdu()
2824 switch (rx->key->conf.cipher) { in ieee80211_rx_h_amsdu()
2834 return __ieee80211_rx_h_amsdu(rx, 0); in ieee80211_rx_h_amsdu()
2839 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mesh_fwding() argument
2844 struct sk_buff *skb = rx->skb, *fwd_skb; in ieee80211_rx_h_mesh_fwding()
2845 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_mesh_fwding()
2846 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mesh_fwding()
2855 if (!pskb_may_pull(rx->skb, hdrlen + 6)) in ieee80211_rx_h_mesh_fwding()
2861 if (!pskb_may_pull(rx->skb, in ieee80211_rx_h_mesh_fwding()
2869 if (ieee80211_drop_unencrypted(rx, hdr->frame_control)) in ieee80211_rx_h_mesh_fwding()
2875 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr)) in ieee80211_rx_h_mesh_fwding()
2953 info->control.vif = &rx->sdata->vif; in ieee80211_rx_h_mesh_fwding()
2984 ieee80211_rx_h_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_data() argument
2986 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_data()
2987 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_data()
2989 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_data()
3006 if (rx->sta && in ieee80211_rx_h_data()
3007 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT)) in ieee80211_rx_h_data()
3009 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC); in ieee80211_rx_h_data()
3013 err = __ieee80211_data_to_8023(rx, &port_control); in ieee80211_rx_h_data()
3017 if (!ieee80211_frame_allowed(rx, fc)) in ieee80211_rx_h_data()
3021 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto == in ieee80211_rx_h_data()
3023 struct ieee80211_tdls_data *tf = (void *)rx->skb->data; in ieee80211_rx_h_data()
3025 if (pskb_may_pull(rx->skb, in ieee80211_rx_h_data()
3031 rx->skb->protocol = cpu_to_be16(ETH_P_TDLS); in ieee80211_rx_h_data()
3032 __ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb); in ieee80211_rx_h_data()
3037 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_data()
3042 rx->sdata = sdata; in ieee80211_rx_h_data()
3045 rx->skb->dev = dev; in ieee80211_rx_h_data()
3050 ((struct ethhdr *)rx->skb->data)->h_dest) && in ieee80211_rx_h_data()
3056 ieee80211_deliver_skb(rx); in ieee80211_rx_h_data()
3062 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames) in ieee80211_rx_h_ctrl() argument
3064 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_ctrl()
3081 if (!rx->sta) in ieee80211_rx_h_ctrl()
3090 if (!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) && in ieee80211_rx_h_ctrl()
3091 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg)) in ieee80211_rx_h_ctrl()
3092 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, in ieee80211_rx_h_ctrl()
3096 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_h_ctrl()
3103 event.u.ba.sta = &rx->sta->sta; in ieee80211_rx_h_ctrl()
3112 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx, in ieee80211_rx_h_ctrl()
3116 drv_event_callback(rx->local, rx->sdata, &event); in ieee80211_rx_h_ctrl()
3176 ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt_check() argument
3178 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_mgmt_check()
3179 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_mgmt_check()
3189 if (rx->skb->len < 24) in ieee80211_rx_h_mgmt_check()
3195 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_mgmt_check()
3197 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { in ieee80211_rx_h_mgmt_check()
3200 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) && in ieee80211_rx_h_mgmt_check()
3204 cfg80211_report_obss_beacon_khz(rx->local->hw.wiphy, in ieee80211_rx_h_mgmt_check()
3205 rx->skb->data, rx->skb->len, in ieee80211_rx_h_mgmt_check()
3208 rx->flags |= IEEE80211_RX_BEACON_REPORTED; in ieee80211_rx_h_mgmt_check()
3211 if (ieee80211_drop_unencrypted_mgmt(rx)) in ieee80211_rx_h_mgmt_check()
3218 ieee80211_process_rx_twt_action(struct ieee80211_rx_data *rx) in ieee80211_process_rx_twt_action() argument
3220 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)rx->skb->data; in ieee80211_process_rx_twt_action()
3221 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_process_rx_twt_action()
3227 if (!rx->local->ops->add_twt_setup) in ieee80211_process_rx_twt_action()
3233 if (!rx->sta) in ieee80211_process_rx_twt_action()
3240 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE + in ieee80211_process_rx_twt_action()
3250 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE + in ieee80211_process_rx_twt_action()
3258 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE + 2) in ieee80211_process_rx_twt_action()
3270 ieee80211_rx_h_action(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action() argument
3272 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action()
3273 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action()
3274 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action()
3275 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action()
3276 int len = rx->skb->len; in ieee80211_rx_h_action()
3285 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC && in ieee80211_rx_h_action()
3293 if (!rx->sta->sta.ht_cap.ht_supported) in ieee80211_rx_h_action()
3333 if (rx->sta->sta.smps_mode == smps_mode) in ieee80211_rx_h_action()
3335 rx->sta->sta.smps_mode = smps_mode; in ieee80211_rx_h_action()
3340 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
3342 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
3345 rx->sta->addr, in ieee80211_rx_h_action()
3357 if (!(rx->sta->sta.ht_cap.cap & in ieee80211_rx_h_action()
3364 max_bw = ieee80211_sta_cap_rx_bw(rx->sta); in ieee80211_rx_h_action()
3367 rx->sta->cur_max_bandwidth = max_bw; in ieee80211_rx_h_action()
3368 new_bw = ieee80211_sta_cur_vht_bw(rx->sta); in ieee80211_rx_h_action()
3370 if (rx->sta->sta.bandwidth == new_bw) in ieee80211_rx_h_action()
3373 rx->sta->sta.bandwidth = new_bw; in ieee80211_rx_h_action()
3374 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
3376 ieee80211_sta_rx_bw_to_chan_width(rx->sta); in ieee80211_rx_h_action()
3379 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
3382 rx->sta->addr, in ieee80211_rx_h_action()
3397 if (!rx->sta) in ieee80211_rx_h_action()
3552 if (ieee80211_process_rx_twt_action(rx)) in ieee80211_rx_h_action()
3569 if (rx->sta) in ieee80211_rx_h_action()
3570 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action()
3571 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action()
3575 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb); in ieee80211_rx_h_action()
3580 ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_userspace_mgmt() argument
3582 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_userspace_mgmt()
3596 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) && in ieee80211_rx_h_userspace_mgmt()
3600 if (cfg80211_rx_mgmt_khz(&rx->sdata->wdev, in ieee80211_rx_h_userspace_mgmt()
3602 rx->skb->data, rx->skb->len, 0)) { in ieee80211_rx_h_userspace_mgmt()
3603 if (rx->sta) in ieee80211_rx_h_userspace_mgmt()
3604 rx->sta->rx_stats.packets++; in ieee80211_rx_h_userspace_mgmt()
3605 dev_kfree_skb(rx->skb); in ieee80211_rx_h_userspace_mgmt()
3613 ieee80211_rx_h_action_post_userspace(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action_post_userspace() argument
3615 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action_post_userspace()
3616 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action_post_userspace()
3617 int len = rx->skb->len; in ieee80211_rx_h_action_post_userspace()
3641 if (rx->sta) in ieee80211_rx_h_action_post_userspace()
3642 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action_post_userspace()
3643 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action_post_userspace()
3648 ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action_return() argument
3650 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action_return()
3651 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action_return()
3653 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action_return()
3654 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action_return()
3681 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0, in ieee80211_rx_h_action_return()
3688 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN); in ieee80211_rx_h_action_return()
3692 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { in ieee80211_rx_h_action_return()
3703 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7, in ieee80211_rx_h_action_return()
3706 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action_return()
3711 ieee80211_rx_h_ext(struct ieee80211_rx_data *rx) in ieee80211_rx_h_ext() argument
3713 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_ext()
3714 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_rx_h_ext()
3723 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb); in ieee80211_rx_h_ext()
3729 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt() argument
3731 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mgmt()
3732 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; in ieee80211_rx_h_mgmt()
3780 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb); in ieee80211_rx_h_mgmt()
3785 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, in ieee80211_rx_cooked_monitor() argument
3789 struct ieee80211_local *local = rx->local; in ieee80211_rx_cooked_monitor()
3790 struct sk_buff *skb = rx->skb, *skb2; in ieee80211_rx_cooked_monitor()
3799 if (rx->flags & IEEE80211_RX_CMNTR) in ieee80211_rx_cooked_monitor()
3801 rx->flags |= IEEE80211_RX_CMNTR; in ieee80211_rx_cooked_monitor()
3855 static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers_result() argument
3860 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3861 if (rx->sta) in ieee80211_rx_handlers_result()
3862 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3869 status = IEEE80211_SKB_RXCB((rx->skb)); in ieee80211_rx_handlers_result()
3871 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_handlers_result()
3875 ieee80211_rx_cooked_monitor(rx, rate); in ieee80211_rx_handlers_result()
3879 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3880 if (rx->sta) in ieee80211_rx_handlers_result()
3881 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3882 dev_kfree_skb(rx->skb); in ieee80211_rx_handlers_result()
3885 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued); in ieee80211_rx_handlers_result()
3890 static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers() argument
3898 res = rxh(rx); \ in ieee80211_rx_handlers()
3909 spin_lock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3917 rx->skb = skb; in ieee80211_rx_handlers()
3927 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_handlers()
3934 res = ieee80211_rx_h_ctrl(rx, frames); in ieee80211_rx_handlers()
3947 ieee80211_rx_handlers_result(rx, res); in ieee80211_rx_handlers()
3952 spin_unlock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3955 static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx) in ieee80211_invoke_rx_handlers() argument
3964 res = rxh(rx); \ in ieee80211_invoke_rx_handlers()
3972 ieee80211_rx_reorder_ampdu(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3974 ieee80211_rx_handlers(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3978 ieee80211_rx_handlers_result(rx, res); in ieee80211_invoke_rx_handlers()
3990 struct ieee80211_rx_data rx = { in ieee80211_release_reorder_timeout() local
4016 drv_event_callback(rx.local, rx.sdata, &event); in ieee80211_release_reorder_timeout()
4019 ieee80211_rx_handlers(&rx, &frames); in ieee80211_release_reorder_timeout()
4029 struct ieee80211_rx_data rx = { in ieee80211_mark_rx_ba_filtered_frames() local
4043 rx.sta = sta; in ieee80211_mark_rx_ba_filtered_frames()
4044 rx.sdata = sta->sdata; in ieee80211_mark_rx_ba_filtered_frames()
4045 rx.local = sta->local; in ieee80211_mark_rx_ba_filtered_frames()
4094 ieee80211_rx_handlers(&rx, &frames); in ieee80211_mark_rx_ba_filtered_frames()
4103 static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx) in ieee80211_accept_frame() argument
4105 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_accept_frame()
4106 struct sk_buff *skb = rx->skb; in ieee80211_accept_frame()
4117 if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta) in ieee80211_accept_frame()
4136 if (!rx->sta) { in ieee80211_accept_frame()
4156 if (!rx->sta) { in ieee80211_accept_frame()
4422 static void ieee80211_rx_8023(struct ieee80211_rx_data *rx, in ieee80211_rx_8023() argument
4427 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_8023()
4428 struct sta_info *sta = rx->sta; in ieee80211_rx_8023()
4429 struct sk_buff *skb = rx->skb; in ieee80211_rx_8023()
4479 stats->msdu[rx->seqno_idx]++; in ieee80211_rx_8023()
4488 sta_info_get(rx->sdata, da)) { in ieee80211_rx_8023()
4513 if (rx->list) in ieee80211_rx_8023()
4514 list_add_tail(&skb->list, rx->list); in ieee80211_rx_8023()
4520 static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx, in ieee80211_invoke_fast_rx() argument
4523 struct sk_buff *skb = rx->skb; in ieee80211_invoke_fast_rx()
4526 struct sta_info *sta = rx->sta; in ieee80211_invoke_fast_rx()
4609 if (rx->key && !(status->flag & RX_FLAG_MIC_STRIPPED) && in ieee80211_invoke_fast_rx()
4613 if (rx->key && !ieee80211_has_protected(hdr->frame_control)) in ieee80211_invoke_fast_rx()
4617 if (__ieee80211_rx_h_amsdu(rx, snap_offs - hdrlen) != in ieee80211_invoke_fast_rx()
4632 ieee80211_rx_8023(rx, fast_rx, orig_len); in ieee80211_invoke_fast_rx()
4650 static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, in ieee80211_prepare_and_rx_handle() argument
4653 struct ieee80211_local *local = rx->local; in ieee80211_prepare_and_rx_handle()
4654 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_prepare_and_rx_handle()
4656 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
4665 if (consume && rx->sta) { in ieee80211_prepare_and_rx_handle()
4668 fast_rx = rcu_dereference(rx->sta->fast_rx); in ieee80211_prepare_and_rx_handle()
4669 if (fast_rx && ieee80211_invoke_fast_rx(rx, fast_rx)) in ieee80211_prepare_and_rx_handle()
4673 if (!ieee80211_accept_frame(rx)) in ieee80211_prepare_and_rx_handle()
4686 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
4689 ieee80211_invoke_rx_handlers(rx); in ieee80211_prepare_and_rx_handle()
4700 struct ieee80211_rx_data rx; in __ieee80211_rx_handle_8023() local
4702 memset(&rx, 0, sizeof(rx)); in __ieee80211_rx_handle_8023()
4703 rx.skb = skb; in __ieee80211_rx_handle_8023()
4704 rx.local = local; in __ieee80211_rx_handle_8023()
4705 rx.list = list; in __ieee80211_rx_handle_8023()
4716 rx.sta = container_of(pubsta, struct sta_info, sta); in __ieee80211_rx_handle_8023()
4717 rx.sdata = rx.sta->sdata; in __ieee80211_rx_handle_8023()
4719 fast_rx = rcu_dereference(rx.sta->fast_rx); in __ieee80211_rx_handle_8023()
4723 ieee80211_rx_8023(&rx, fast_rx, skb->len); in __ieee80211_rx_handle_8023()
4743 struct ieee80211_rx_data rx; in __ieee80211_rx_handle_packet() local
4749 memset(&rx, 0, sizeof(rx)); in __ieee80211_rx_handle_packet()
4750 rx.skb = skb; in __ieee80211_rx_handle_packet()
4751 rx.local = local; in __ieee80211_rx_handle_packet()
4752 rx.list = list; in __ieee80211_rx_handle_packet()
4773 ieee80211_parse_qos(&rx); in __ieee80211_rx_handle_packet()
4774 ieee80211_verify_alignment(&rx); in __ieee80211_rx_handle_packet()
4785 rx.sta = container_of(pubsta, struct sta_info, sta); in __ieee80211_rx_handle_packet()
4786 rx.sdata = rx.sta->sdata; in __ieee80211_rx_handle_packet()
4787 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
4800 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
4801 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
4802 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
4808 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
4809 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
4811 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
4838 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
4839 rx.sdata = prev; in __ieee80211_rx_handle_packet()
4840 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
4846 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
4847 rx.sdata = prev; in __ieee80211_rx_handle_packet()
4849 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()