Lines Matching refs:rx

594 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)  in ieee80211_parse_qos()  argument
596 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_parse_qos()
597 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_parse_qos()
629 rx->seqno_idx = seqno_idx; in ieee80211_parse_qos()
630 rx->security_idx = security_idx; in ieee80211_parse_qos()
633 rx->skb->priority = (tid > 7) ? 0 : tid; in ieee80211_parse_qos()
661 static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) in ieee80211_verify_alignment() argument
664 WARN_ONCE((unsigned long)rx->skb->data & 1, in ieee80211_verify_alignment()
665 "unaligned packet at 0x%p\n", rx->skb->data); in ieee80211_verify_alignment()
744 static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) in ieee80211_rx_mesh_check() argument
746 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_mesh_check()
747 char *dev_addr = rx->sdata->vif.addr; in ieee80211_rx_mesh_check()
768 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) { in ieee80211_rx_mesh_check()
778 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) in ieee80211_rx_mesh_check()
1027 static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx, in ieee80211_rx_reorder_ampdu() argument
1030 struct sk_buff *skb = rx->skb; in ieee80211_rx_reorder_ampdu()
1031 struct ieee80211_local *local = rx->local; in ieee80211_rx_reorder_ampdu()
1033 struct sta_info *sta = rx->sta; in ieee80211_rx_reorder_ampdu()
1077 skb_queue_tail(&rx->sdata->skb_queue, skb); in ieee80211_rx_reorder_ampdu()
1078 ieee80211_queue_work(&local->hw, &rx->sdata->work); in ieee80211_rx_reorder_ampdu()
1089 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb, in ieee80211_rx_reorder_ampdu()
1098 ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_dup() argument
1100 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check_dup()
1101 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_check_dup()
1108 if (rx->skb->len < 24) in ieee80211_rx_h_check_dup()
1116 if (!rx->sta) in ieee80211_rx_h_check_dup()
1120 rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) { in ieee80211_rx_h_check_dup()
1121 I802_DEBUG_INC(rx->local->dot11FrameDuplicateCount); in ieee80211_rx_h_check_dup()
1122 rx->sta->rx_stats.num_duplicates++; in ieee80211_rx_h_check_dup()
1125 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl; in ieee80211_rx_h_check_dup()
1132 ieee80211_rx_h_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check() argument
1134 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check()
1145 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_check()
1146 return ieee80211_rx_mesh_check(rx); in ieee80211_rx_h_check()
1150 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_rx_h_check()
1151 rx->sdata->vif.type != NL80211_IFTYPE_WDS && in ieee80211_rx_h_check()
1152 rx->sdata->vif.type != NL80211_IFTYPE_OCB && in ieee80211_rx_h_check()
1153 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) { in ieee80211_rx_h_check()
1159 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_check()
1166 if (rx->skb->len < hdrlen + 8) in ieee80211_rx_h_check()
1169 skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2); in ieee80211_rx_h_check()
1170 if (ethertype == rx->sdata->control_port_protocol) in ieee80211_rx_h_check()
1174 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_check()
1175 cfg80211_rx_spurious_frame(rx->sdata->dev, in ieee80211_rx_h_check()
1188 ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_more_data() argument
1194 local = rx->local; in ieee80211_rx_h_check_more_data()
1195 skb = rx->skb; in ieee80211_rx_h_check_more_data()
1215 ieee80211_send_pspoll(local, rx->sdata); in ieee80211_rx_h_check_more_data()
1300 ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx) in ieee80211_rx_h_uapsd_and_pspoll() argument
1302 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_uapsd_and_pspoll()
1303 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_rx_h_uapsd_and_pspoll()
1304 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1307 if (!rx->sta) in ieee80211_rx_h_uapsd_and_pspoll()
1327 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA)) in ieee80211_rx_h_uapsd_and_pspoll()
1331 if (!test_sta_flag(rx->sta, WLAN_STA_SP)) { in ieee80211_rx_h_uapsd_and_pspoll()
1332 if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) in ieee80211_rx_h_uapsd_and_pspoll()
1333 ieee80211_sta_ps_deliver_poll_response(rx->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1335 set_sta_flag(rx->sta, WLAN_STA_PSPOLL); in ieee80211_rx_h_uapsd_and_pspoll()
1340 dev_kfree_skb(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1358 if (!(rx->sta->sta.uapsd_queues & BIT(ac))) in ieee80211_rx_h_uapsd_and_pspoll()
1362 if (test_sta_flag(rx->sta, WLAN_STA_SP)) in ieee80211_rx_h_uapsd_and_pspoll()
1365 if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) in ieee80211_rx_h_uapsd_and_pspoll()
1366 ieee80211_sta_ps_deliver_uapsd(rx->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1368 set_sta_flag(rx->sta, WLAN_STA_UAPSD); in ieee80211_rx_h_uapsd_and_pspoll()
1375 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) in ieee80211_rx_h_sta_process() argument
1377 struct sta_info *sta = rx->sta; in ieee80211_rx_h_sta_process()
1378 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_sta_process()
1394 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { in ieee80211_rx_h_sta_process()
1395 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, in ieee80211_rx_h_sta_process()
1397 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) && in ieee80211_rx_h_sta_process()
1412 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) { in ieee80211_rx_h_sta_process()
1428 if (rx->sdata->vif.type == NL80211_IFTYPE_STATION) in ieee80211_rx_h_sta_process()
1429 ieee80211_sta_rx_notify(rx->sdata, hdr); in ieee80211_rx_h_sta_process()
1432 sta->rx_stats.bytes += rx->skb->len; in ieee80211_rx_h_sta_process()
1459 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1460 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && in ieee80211_rx_h_sta_process()
1477 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_sta_process()
1486 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); in ieee80211_rx_h_sta_process()
1495 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1496 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_sta_process()
1497 !rx->sdata->u.vlan.sta))) { in ieee80211_rx_h_sta_process()
1500 rx->sdata->dev, sta->sta.addr, in ieee80211_rx_h_sta_process()
1509 dev_kfree_skb(rx->skb); in ieee80211_rx_h_sta_process()
1517 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_decrypt() argument
1519 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_decrypt()
1558 rx->key = NULL; in ieee80211_rx_h_decrypt()
1561 if (rx->sta) { in ieee80211_rx_h_decrypt()
1562 int keyid = rx->sta->ptk_idx; in ieee80211_rx_h_decrypt()
1564 if (ieee80211_has_protected(fc) && rx->sta->cipher_scheme) { in ieee80211_rx_h_decrypt()
1565 cs = rx->sta->cipher_scheme; in ieee80211_rx_h_decrypt()
1566 keyid = iwl80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1570 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]); in ieee80211_rx_h_decrypt()
1574 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); in ieee80211_rx_h_decrypt()
1577 rx->key = sta_ptk; in ieee80211_rx_h_decrypt()
1593 if (rx->sta) in ieee80211_rx_h_decrypt()
1594 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1595 if (!rx->key) in ieee80211_rx_h_decrypt()
1596 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1605 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_decrypt()
1610 (key = rcu_dereference(rx->sdata->default_mgmt_key))) in ieee80211_rx_h_decrypt()
1611 rx->key = key; in ieee80211_rx_h_decrypt()
1613 if (rx->sta) { in ieee80211_rx_h_decrypt()
1615 key = rcu_dereference(rx->sta->gtk[i]); in ieee80211_rx_h_decrypt()
1628 rx->key = key; in ieee80211_rx_h_decrypt()
1650 keyidx = iwl80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1655 if (rx->skb->len < 8 + hdrlen) in ieee80211_rx_h_decrypt()
1661 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1); in ieee80211_rx_h_decrypt()
1666 if (is_multicast_ether_addr(hdr->addr1) && rx->sta) in ieee80211_rx_h_decrypt()
1667 rx->key = rcu_dereference(rx->sta->gtk[keyidx]); in ieee80211_rx_h_decrypt()
1670 if (!rx->key) { in ieee80211_rx_h_decrypt()
1671 rx->key = rcu_dereference(rx->sdata->keys[keyidx]); in ieee80211_rx_h_decrypt()
1678 if (rx->key && in ieee80211_rx_h_decrypt()
1679 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 && in ieee80211_rx_h_decrypt()
1680 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 && in ieee80211_rx_h_decrypt()
1682 rx->key = NULL; in ieee80211_rx_h_decrypt()
1686 if (rx->key) { in ieee80211_rx_h_decrypt()
1687 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED)) in ieee80211_rx_h_decrypt()
1695 switch (rx->key->conf.cipher) { in ieee80211_rx_h_decrypt()
1698 result = ieee80211_crypto_wep_decrypt(rx); in ieee80211_rx_h_decrypt()
1701 result = ieee80211_crypto_tkip_decrypt(rx); in ieee80211_rx_h_decrypt()
1705 rx, IEEE80211_CCMP_MIC_LEN); in ieee80211_rx_h_decrypt()
1709 rx, IEEE80211_CCMP_256_MIC_LEN); in ieee80211_rx_h_decrypt()
1712 result = ieee80211_crypto_aes_cmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1715 result = ieee80211_crypto_aes_cmac_256_decrypt(rx); in ieee80211_rx_h_decrypt()
1719 result = ieee80211_crypto_aes_gmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1723 result = ieee80211_crypto_gcmp_decrypt(rx); in ieee80211_rx_h_decrypt()
1726 result = ieee80211_crypto_hw_decrypt(rx); in ieee80211_rx_h_decrypt()
1807 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) in ieee80211_rx_h_defragment() argument
1817 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
1827 I802_DEBUG_INC(rx->local->dot11MulticastReceivedFrameCount); in ieee80211_rx_h_defragment()
1834 I802_DEBUG_INC(rx->local->rx_handlers_fragments); in ieee80211_rx_h_defragment()
1836 if (skb_linearize(rx->skb)) in ieee80211_rx_h_defragment()
1844 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
1849 entry = ieee80211_reassemble_add(rx->sdata, frag, seq, in ieee80211_rx_h_defragment()
1850 rx->seqno_idx, &(rx->skb)); in ieee80211_rx_h_defragment()
1851 if (rx->key && in ieee80211_rx_h_defragment()
1852 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP || in ieee80211_rx_h_defragment()
1853 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 || in ieee80211_rx_h_defragment()
1854 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP || in ieee80211_rx_h_defragment()
1855 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) && in ieee80211_rx_h_defragment()
1857 int queue = rx->security_idx; in ieee80211_rx_h_defragment()
1864 rx->key->u.ccmp.rx_pn[queue], in ieee80211_rx_h_defragment()
1870 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) != in ieee80211_rx_h_defragment()
1871 sizeof(rx->key->u.gcmp.rx_pn[queue])); in ieee80211_rx_h_defragment()
1881 entry = ieee80211_reassemble_find(rx->sdata, frag, seq, in ieee80211_rx_h_defragment()
1882 rx->seqno_idx, hdr); in ieee80211_rx_h_defragment()
1884 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
1898 if (!rx->key || in ieee80211_rx_h_defragment()
1899 (rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP && in ieee80211_rx_h_defragment()
1900 rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP_256 && in ieee80211_rx_h_defragment()
1901 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP && in ieee80211_rx_h_defragment()
1902 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP_256)) in ieee80211_rx_h_defragment()
1910 queue = rx->security_idx; in ieee80211_rx_h_defragment()
1911 rpn = rx->key->u.ccmp.rx_pn[queue]; in ieee80211_rx_h_defragment()
1917 skb_pull(rx->skb, ieee80211_hdrlen(fc)); in ieee80211_rx_h_defragment()
1918 __skb_queue_tail(&entry->skb_list, rx->skb); in ieee80211_rx_h_defragment()
1920 entry->extra_len += rx->skb->len; in ieee80211_rx_h_defragment()
1922 rx->skb = NULL; in ieee80211_rx_h_defragment()
1926 rx->skb = __skb_dequeue(&entry->skb_list); in ieee80211_rx_h_defragment()
1927 if (skb_tailroom(rx->skb) < entry->extra_len) { in ieee80211_rx_h_defragment()
1928 I802_DEBUG_INC(rx->local->rx_expand_skb_head_defrag); in ieee80211_rx_h_defragment()
1929 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, in ieee80211_rx_h_defragment()
1931 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
1937 memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len); in ieee80211_rx_h_defragment()
1942 status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_defragment()
1945 ieee80211_led_rx(rx->local); in ieee80211_rx_h_defragment()
1947 if (rx->sta) in ieee80211_rx_h_defragment()
1948 rx->sta->rx_stats.packets++; in ieee80211_rx_h_defragment()
1952 static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx) in ieee80211_802_1x_port_control() argument
1954 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED))) in ieee80211_802_1x_port_control()
1960 static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_drop_unencrypted() argument
1962 struct sk_buff *skb = rx->skb; in ieee80211_drop_unencrypted()
1975 ieee80211_is_data(fc) && rx->key)) in ieee80211_drop_unencrypted()
1981 static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx) in ieee80211_drop_unencrypted_mgmt() argument
1983 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_drop_unencrypted_mgmt()
1984 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_drop_unencrypted_mgmt()
1994 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) { in ieee80211_drop_unencrypted_mgmt()
1996 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
1997 rx->key)) { in ieee80211_drop_unencrypted_mgmt()
2000 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2001 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2002 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2006 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
2007 ieee80211_get_mmie_keyidx(rx->skb) < 0)) { in ieee80211_drop_unencrypted_mgmt()
2010 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
2011 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
2012 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
2019 if (unlikely(ieee80211_is_action(fc) && !rx->key && in ieee80211_drop_unencrypted_mgmt()
2020 ieee80211_is_robust_mgmt_frame(rx->skb))) in ieee80211_drop_unencrypted_mgmt()
2028 __ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) in __ieee80211_data_to_8023() argument
2030 struct ieee80211_sub_if_data *sdata = rx->sdata; in __ieee80211_data_to_8023()
2031 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in __ieee80211_data_to_8023()
2054 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); in __ieee80211_data_to_8023()
2058 ehdr = (struct ethhdr *) rx->skb->data; in __ieee80211_data_to_8023()
2059 if (ehdr->h_proto == rx->sdata->control_port_protocol) in __ieee80211_data_to_8023()
2070 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_frame_allowed() argument
2074 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_frame_allowed()
2080 if (ehdr->h_proto == rx->sdata->control_port_protocol && in ieee80211_frame_allowed()
2081 (ether_addr_equal(ehdr->h_dest, rx->sdata->vif.addr) || in ieee80211_frame_allowed()
2085 if (ieee80211_802_1x_port_control(rx) || in ieee80211_frame_allowed()
2086 ieee80211_drop_unencrypted(rx, fc)) in ieee80211_frame_allowed()
2096 ieee80211_deliver_skb(struct ieee80211_rx_data *rx) in ieee80211_deliver_skb() argument
2098 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb()
2101 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_deliver_skb()
2104 skb = rx->skb; in ieee80211_deliver_skb()
2167 if (rx->napi) in ieee80211_deliver_skb()
2168 napi_gro_receive(rx->napi, skb); in ieee80211_deliver_skb()
2188 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) in ieee80211_rx_h_amsdu() argument
2190 struct net_device *dev = rx->sdata->dev; in ieee80211_rx_h_amsdu()
2191 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_amsdu()
2195 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_amsdu()
2207 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_amsdu()
2208 !rx->sdata->u.vlan.sta) in ieee80211_rx_h_amsdu()
2212 ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_amsdu()
2213 rx->sdata->u.vlan.sta) || in ieee80211_rx_h_amsdu()
2214 (rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_amsdu()
2215 rx->sdata->u.mgd.use_4addr))) in ieee80211_rx_h_amsdu()
2225 rx->sdata->vif.type, in ieee80211_rx_h_amsdu()
2226 rx->local->hw.extra_tx_headroom, true); in ieee80211_rx_h_amsdu()
2229 rx->skb = __skb_dequeue(&frame_list); in ieee80211_rx_h_amsdu()
2231 if (!ieee80211_frame_allowed(rx, fc)) { in ieee80211_rx_h_amsdu()
2232 dev_kfree_skb(rx->skb); in ieee80211_rx_h_amsdu()
2236 ieee80211_deliver_skb(rx); in ieee80211_rx_h_amsdu()
2244 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mesh_fwding() argument
2249 struct sk_buff *skb = rx->skb, *fwd_skb; in ieee80211_rx_h_mesh_fwding()
2250 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_mesh_fwding()
2251 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mesh_fwding()
2259 if (!pskb_may_pull(rx->skb, hdrlen + 6)) in ieee80211_rx_h_mesh_fwding()
2265 if (!pskb_may_pull(rx->skb, in ieee80211_rx_h_mesh_fwding()
2273 if (ieee80211_drop_unencrypted(rx, hdr->frame_control)) in ieee80211_rx_h_mesh_fwding()
2279 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr)) in ieee80211_rx_h_mesh_fwding()
2350 info->control.vif = &rx->sdata->vif; in ieee80211_rx_h_mesh_fwding()
2381 ieee80211_rx_h_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_data() argument
2383 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_data()
2384 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_data()
2386 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_data()
2397 if (rx->sta) { in ieee80211_rx_h_data()
2403 rx->sta->rx_stats.msdu[rx->seqno_idx]++; in ieee80211_rx_h_data()
2412 if (rx->sta && in ieee80211_rx_h_data()
2413 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT)) in ieee80211_rx_h_data()
2415 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC); in ieee80211_rx_h_data()
2419 err = __ieee80211_data_to_8023(rx, &port_control); in ieee80211_rx_h_data()
2423 if (!ieee80211_frame_allowed(rx, fc)) in ieee80211_rx_h_data()
2427 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto == in ieee80211_rx_h_data()
2429 struct ieee80211_tdls_data *tf = (void *)rx->skb->data; in ieee80211_rx_h_data()
2431 if (pskb_may_pull(rx->skb, in ieee80211_rx_h_data()
2437 skb_queue_tail(&local->skb_queue_tdls_chsw, rx->skb); in ieee80211_rx_h_data()
2439 if (rx->sta) in ieee80211_rx_h_data()
2440 rx->sta->rx_stats.packets++; in ieee80211_rx_h_data()
2446 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_data()
2451 rx->sdata = sdata; in ieee80211_rx_h_data()
2454 rx->skb->dev = dev; in ieee80211_rx_h_data()
2458 ((struct ethhdr *)rx->skb->data)->h_dest) && in ieee80211_rx_h_data()
2465 ieee80211_deliver_skb(rx); in ieee80211_rx_h_data()
2471 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames) in ieee80211_rx_h_ctrl() argument
2473 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_ctrl()
2490 if (!rx->sta) in ieee80211_rx_h_ctrl()
2499 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_h_ctrl()
2506 event.u.ba.sta = &rx->sta->sta; in ieee80211_rx_h_ctrl()
2515 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx, in ieee80211_rx_h_ctrl()
2519 drv_event_callback(rx->local, rx->sdata, &event); in ieee80211_rx_h_ctrl()
2580 ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt_check() argument
2582 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_mgmt_check()
2583 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_mgmt_check()
2590 if (rx->skb->len < 24) in ieee80211_rx_h_mgmt_check()
2596 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_mgmt_check()
2598 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { in ieee80211_rx_h_mgmt_check()
2601 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM)) in ieee80211_rx_h_mgmt_check()
2604 cfg80211_report_obss_beacon(rx->local->hw.wiphy, in ieee80211_rx_h_mgmt_check()
2605 rx->skb->data, rx->skb->len, in ieee80211_rx_h_mgmt_check()
2607 rx->flags |= IEEE80211_RX_BEACON_REPORTED; in ieee80211_rx_h_mgmt_check()
2610 if (ieee80211_drop_unencrypted_mgmt(rx)) in ieee80211_rx_h_mgmt_check()
2617 ieee80211_rx_h_action(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action() argument
2619 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action()
2620 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action()
2621 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action()
2622 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action()
2623 int len = rx->skb->len; in ieee80211_rx_h_action()
2632 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC && in ieee80211_rx_h_action()
2640 if (!rx->sta->sta.ht_cap.ht_supported) in ieee80211_rx_h_action()
2675 if (rx->sta->sta.smps_mode == smps_mode) in ieee80211_rx_h_action()
2677 rx->sta->sta.smps_mode = smps_mode; in ieee80211_rx_h_action()
2679 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
2681 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
2691 if (!(rx->sta->sta.ht_cap.cap & in ieee80211_rx_h_action()
2698 max_bw = ieee80211_sta_cap_rx_bw(rx->sta); in ieee80211_rx_h_action()
2701 rx->sta->cur_max_bandwidth = max_bw; in ieee80211_rx_h_action()
2702 new_bw = ieee80211_sta_cur_vht_bw(rx->sta); in ieee80211_rx_h_action()
2704 if (rx->sta->sta.bandwidth == new_bw) in ieee80211_rx_h_action()
2707 rx->sta->sta.bandwidth = new_bw; in ieee80211_rx_h_action()
2708 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
2710 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
2724 if (!rx->sta) in ieee80211_rx_h_action()
2757 ieee80211_vht_handle_opmode(rx->sdata, rx->sta, in ieee80211_rx_h_action()
2900 if (rx->sta) in ieee80211_rx_h_action()
2901 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action()
2902 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action()
2906 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; in ieee80211_rx_h_action()
2907 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_action()
2909 if (rx->sta) in ieee80211_rx_h_action()
2910 rx->sta->rx_stats.packets++; in ieee80211_rx_h_action()
2915 ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_userspace_mgmt() argument
2917 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_userspace_mgmt()
2931 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM)) in ieee80211_rx_h_userspace_mgmt()
2934 if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig, in ieee80211_rx_h_userspace_mgmt()
2935 rx->skb->data, rx->skb->len, 0)) { in ieee80211_rx_h_userspace_mgmt()
2936 if (rx->sta) in ieee80211_rx_h_userspace_mgmt()
2937 rx->sta->rx_stats.packets++; in ieee80211_rx_h_userspace_mgmt()
2938 dev_kfree_skb(rx->skb); in ieee80211_rx_h_userspace_mgmt()
2946 ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action_return() argument
2948 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action_return()
2949 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action_return()
2951 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action_return()
2952 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action_return()
2979 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0, in ieee80211_rx_h_action_return()
2986 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN); in ieee80211_rx_h_action_return()
2990 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { in ieee80211_rx_h_action_return()
3001 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7, in ieee80211_rx_h_action_return()
3004 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action_return()
3009 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt() argument
3011 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mgmt()
3012 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; in ieee80211_rx_h_mgmt()
3052 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; in ieee80211_rx_h_mgmt()
3053 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_mgmt()
3054 ieee80211_queue_work(&rx->local->hw, &sdata->work); in ieee80211_rx_h_mgmt()
3055 if (rx->sta) in ieee80211_rx_h_mgmt()
3056 rx->sta->rx_stats.packets++; in ieee80211_rx_h_mgmt()
3061 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, in ieee80211_rx_cooked_monitor() argument
3065 struct ieee80211_local *local = rx->local; in ieee80211_rx_cooked_monitor()
3066 struct sk_buff *skb = rx->skb, *skb2; in ieee80211_rx_cooked_monitor()
3075 if (rx->flags & IEEE80211_RX_CMNTR) in ieee80211_rx_cooked_monitor()
3077 rx->flags |= IEEE80211_RX_CMNTR; in ieee80211_rx_cooked_monitor()
3131 static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers_result() argument
3136 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3137 if (rx->sta) in ieee80211_rx_handlers_result()
3138 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3145 status = IEEE80211_SKB_RXCB((rx->skb)); in ieee80211_rx_handlers_result()
3147 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_handlers_result()
3152 ieee80211_rx_cooked_monitor(rx, rate); in ieee80211_rx_handlers_result()
3156 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3157 if (rx->sta) in ieee80211_rx_handlers_result()
3158 rx->sta->rx_stats.dropped++; in ieee80211_rx_handlers_result()
3159 dev_kfree_skb(rx->skb); in ieee80211_rx_handlers_result()
3162 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued); in ieee80211_rx_handlers_result()
3167 static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers() argument
3175 res = rxh(rx); \ in ieee80211_rx_handlers()
3186 spin_lock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3194 rx->skb = skb; in ieee80211_rx_handlers()
3204 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_handlers()
3211 res = ieee80211_rx_h_ctrl(rx, frames); in ieee80211_rx_handlers()
3222 ieee80211_rx_handlers_result(rx, res); in ieee80211_rx_handlers()
3227 spin_unlock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3230 static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx) in ieee80211_invoke_rx_handlers() argument
3239 res = rxh(rx); \ in ieee80211_invoke_rx_handlers()
3247 ieee80211_rx_reorder_ampdu(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3249 ieee80211_rx_handlers(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3253 ieee80211_rx_handlers_result(rx, res); in ieee80211_invoke_rx_handlers()
3265 struct ieee80211_rx_data rx = { in ieee80211_release_reorder_timeout() local
3292 drv_event_callback(rx.local, rx.sdata, &event); in ieee80211_release_reorder_timeout()
3295 ieee80211_rx_handlers(&rx, &frames); in ieee80211_release_reorder_timeout()
3300 static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx) in ieee80211_accept_frame() argument
3302 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_accept_frame()
3303 struct sk_buff *skb = rx->skb; in ieee80211_accept_frame()
3329 if (!rx->sta) { in ieee80211_accept_frame()
3349 if (!rx->sta) { in ieee80211_accept_frame()
3417 static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, in ieee80211_prepare_and_rx_handle() argument
3420 struct ieee80211_local *local = rx->local; in ieee80211_prepare_and_rx_handle()
3421 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_prepare_and_rx_handle()
3423 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
3425 if (!ieee80211_accept_frame(rx)) in ieee80211_prepare_and_rx_handle()
3438 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
3441 ieee80211_invoke_rx_handlers(rx); in ieee80211_prepare_and_rx_handle()
3457 struct ieee80211_rx_data rx; in __ieee80211_rx_handle_packet() local
3464 memset(&rx, 0, sizeof(rx)); in __ieee80211_rx_handle_packet()
3465 rx.skb = skb; in __ieee80211_rx_handle_packet()
3466 rx.local = local; in __ieee80211_rx_handle_packet()
3467 rx.napi = napi; in __ieee80211_rx_handle_packet()
3488 ieee80211_parse_qos(&rx); in __ieee80211_rx_handle_packet()
3489 ieee80211_verify_alignment(&rx); in __ieee80211_rx_handle_packet()
3508 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
3509 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
3510 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
3516 rx.sta = prev_sta; in __ieee80211_rx_handle_packet()
3517 rx.sdata = prev_sta->sdata; in __ieee80211_rx_handle_packet()
3519 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()
3546 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
3547 rx.sdata = prev; in __ieee80211_rx_handle_packet()
3548 ieee80211_prepare_and_rx_handle(&rx, skb, false); in __ieee80211_rx_handle_packet()
3554 rx.sta = sta_info_get_bss(prev, hdr->addr2); in __ieee80211_rx_handle_packet()
3555 rx.sdata = prev; in __ieee80211_rx_handle_packet()
3557 if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) in __ieee80211_rx_handle_packet()