Lines Matching refs:rx

545 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)  in ieee80211_parse_qos()  argument
547 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_parse_qos()
548 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_parse_qos()
580 rx->seqno_idx = seqno_idx; in ieee80211_parse_qos()
581 rx->security_idx = security_idx; in ieee80211_parse_qos()
584 rx->skb->priority = (tid > 7) ? 0 : tid; in ieee80211_parse_qos()
612 static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) in ieee80211_verify_alignment() argument
615 WARN_ONCE((unsigned long)rx->skb->data & 1, in ieee80211_verify_alignment()
616 "unaligned packet at 0x%p\n", rx->skb->data); in ieee80211_verify_alignment()
695 static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) in ieee80211_rx_mesh_check() argument
697 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_mesh_check()
698 char *dev_addr = rx->sdata->vif.addr; in ieee80211_rx_mesh_check()
719 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) { in ieee80211_rx_mesh_check()
729 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) in ieee80211_rx_mesh_check()
978 static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx, in ieee80211_rx_reorder_ampdu() argument
981 struct sk_buff *skb = rx->skb; in ieee80211_rx_reorder_ampdu()
982 struct ieee80211_local *local = rx->local; in ieee80211_rx_reorder_ampdu()
985 struct sta_info *sta = rx->sta; in ieee80211_rx_reorder_ampdu()
1033 skb_queue_tail(&rx->sdata->skb_queue, skb); in ieee80211_rx_reorder_ampdu()
1034 ieee80211_queue_work(&local->hw, &rx->sdata->work); in ieee80211_rx_reorder_ampdu()
1045 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb, in ieee80211_rx_reorder_ampdu()
1054 ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_dup() argument
1056 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check_dup()
1057 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_check_dup()
1064 if (rx->skb->len < 24) in ieee80211_rx_h_check_dup()
1072 if (rx->sta) { in ieee80211_rx_h_check_dup()
1074 rx->sta->last_seq_ctrl[rx->seqno_idx] == in ieee80211_rx_h_check_dup()
1077 rx->local->dot11FrameDuplicateCount++; in ieee80211_rx_h_check_dup()
1078 rx->sta->num_duplicates++; in ieee80211_rx_h_check_dup()
1082 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl; in ieee80211_rx_h_check_dup()
1090 ieee80211_rx_h_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check() argument
1092 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_check()
1094 if (unlikely(rx->skb->len < 16)) { in ieee80211_rx_h_check()
1095 I802_DEBUG_INC(rx->local->rx_handlers_drop_short); in ieee80211_rx_h_check()
1108 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_check()
1109 return ieee80211_rx_mesh_check(rx); in ieee80211_rx_h_check()
1113 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_rx_h_check()
1114 rx->sdata->vif.type != NL80211_IFTYPE_WDS && in ieee80211_rx_h_check()
1115 rx->sdata->vif.type != NL80211_IFTYPE_OCB && in ieee80211_rx_h_check()
1116 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) { in ieee80211_rx_h_check()
1122 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_check()
1129 if (rx->skb->len < hdrlen + 8) in ieee80211_rx_h_check()
1132 skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2); in ieee80211_rx_h_check()
1133 if (ethertype == rx->sdata->control_port_protocol) in ieee80211_rx_h_check()
1137 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_check()
1138 cfg80211_rx_spurious_frame(rx->sdata->dev, in ieee80211_rx_h_check()
1151 ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_check_more_data() argument
1157 local = rx->local; in ieee80211_rx_h_check_more_data()
1158 skb = rx->skb; in ieee80211_rx_h_check_more_data()
1178 ieee80211_send_pspoll(local, rx->sdata); in ieee80211_rx_h_check_more_data()
1261 ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx) in ieee80211_rx_h_uapsd_and_pspoll() argument
1263 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_uapsd_and_pspoll()
1264 struct ieee80211_hdr *hdr = (void *)rx->skb->data; in ieee80211_rx_h_uapsd_and_pspoll()
1265 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1268 if (!rx->sta || !(status->rx_flags & IEEE80211_RX_RA_MATCH)) in ieee80211_rx_h_uapsd_and_pspoll()
1288 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA)) in ieee80211_rx_h_uapsd_and_pspoll()
1292 if (!test_sta_flag(rx->sta, WLAN_STA_SP)) { in ieee80211_rx_h_uapsd_and_pspoll()
1293 if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) in ieee80211_rx_h_uapsd_and_pspoll()
1294 ieee80211_sta_ps_deliver_poll_response(rx->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1296 set_sta_flag(rx->sta, WLAN_STA_PSPOLL); in ieee80211_rx_h_uapsd_and_pspoll()
1301 dev_kfree_skb(rx->skb); in ieee80211_rx_h_uapsd_and_pspoll()
1319 if (!(rx->sta->sta.uapsd_queues & BIT(ac))) in ieee80211_rx_h_uapsd_and_pspoll()
1323 if (test_sta_flag(rx->sta, WLAN_STA_SP)) in ieee80211_rx_h_uapsd_and_pspoll()
1326 if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) in ieee80211_rx_h_uapsd_and_pspoll()
1327 ieee80211_sta_ps_deliver_uapsd(rx->sta); in ieee80211_rx_h_uapsd_and_pspoll()
1329 set_sta_flag(rx->sta, WLAN_STA_UAPSD); in ieee80211_rx_h_uapsd_and_pspoll()
1336 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) in ieee80211_rx_h_sta_process() argument
1338 struct sta_info *sta = rx->sta; in ieee80211_rx_h_sta_process()
1339 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_sta_process()
1355 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { in ieee80211_rx_h_sta_process()
1356 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, in ieee80211_rx_h_sta_process()
1358 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) && in ieee80211_rx_h_sta_process()
1369 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) { in ieee80211_rx_h_sta_process()
1370 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, in ieee80211_rx_h_sta_process()
1392 if (rx->sdata->vif.type == NL80211_IFTYPE_STATION) in ieee80211_rx_h_sta_process()
1393 ieee80211_sta_rx_notify(rx->sdata, hdr); in ieee80211_rx_h_sta_process()
1396 sta->rx_bytes += rx->skb->len; in ieee80211_rx_h_sta_process()
1422 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1423 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && in ieee80211_rx_h_sta_process()
1440 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_h_sta_process()
1449 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); in ieee80211_rx_h_sta_process()
1458 (rx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_rx_h_sta_process()
1459 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_sta_process()
1460 !rx->sdata->u.vlan.sta))) { in ieee80211_rx_h_sta_process()
1463 rx->sdata->dev, sta->sta.addr, in ieee80211_rx_h_sta_process()
1472 dev_kfree_skb(rx->skb); in ieee80211_rx_h_sta_process()
1480 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_decrypt() argument
1482 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_decrypt()
1528 rx->key = NULL; in ieee80211_rx_h_decrypt()
1531 if (rx->sta) { in ieee80211_rx_h_decrypt()
1532 int keyid = rx->sta->ptk_idx; in ieee80211_rx_h_decrypt()
1534 if (ieee80211_has_protected(fc) && rx->sta->cipher_scheme) { in ieee80211_rx_h_decrypt()
1535 cs = rx->sta->cipher_scheme; in ieee80211_rx_h_decrypt()
1536 keyid = iwl80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1540 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]); in ieee80211_rx_h_decrypt()
1544 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); in ieee80211_rx_h_decrypt()
1547 rx->key = sta_ptk; in ieee80211_rx_h_decrypt()
1563 if (rx->sta) in ieee80211_rx_h_decrypt()
1564 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1565 if (!rx->key) in ieee80211_rx_h_decrypt()
1566 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]); in ieee80211_rx_h_decrypt()
1575 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_decrypt()
1580 (key = rcu_dereference(rx->sdata->default_mgmt_key))) in ieee80211_rx_h_decrypt()
1581 rx->key = key; in ieee80211_rx_h_decrypt()
1583 if (rx->sta) { in ieee80211_rx_h_decrypt()
1585 key = rcu_dereference(rx->sta->gtk[i]); in ieee80211_rx_h_decrypt()
1598 rx->key = key; in ieee80211_rx_h_decrypt()
1620 keyidx = iwl80211_get_cs_keyid(cs, rx->skb); in ieee80211_rx_h_decrypt()
1625 if (rx->skb->len < 8 + hdrlen) in ieee80211_rx_h_decrypt()
1631 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1); in ieee80211_rx_h_decrypt()
1636 if (is_multicast_ether_addr(hdr->addr1) && rx->sta) in ieee80211_rx_h_decrypt()
1637 rx->key = rcu_dereference(rx->sta->gtk[keyidx]); in ieee80211_rx_h_decrypt()
1640 if (!rx->key) { in ieee80211_rx_h_decrypt()
1641 rx->key = rcu_dereference(rx->sdata->keys[keyidx]); in ieee80211_rx_h_decrypt()
1648 if (rx->key && in ieee80211_rx_h_decrypt()
1649 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 && in ieee80211_rx_h_decrypt()
1650 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 && in ieee80211_rx_h_decrypt()
1652 rx->key = NULL; in ieee80211_rx_h_decrypt()
1656 if (rx->key) { in ieee80211_rx_h_decrypt()
1657 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED)) in ieee80211_rx_h_decrypt()
1660 rx->key->tx_rx_count++; in ieee80211_rx_h_decrypt()
1666 switch (rx->key->conf.cipher) { in ieee80211_rx_h_decrypt()
1669 result = ieee80211_crypto_wep_decrypt(rx); in ieee80211_rx_h_decrypt()
1672 result = ieee80211_crypto_tkip_decrypt(rx); in ieee80211_rx_h_decrypt()
1676 rx, IEEE80211_CCMP_MIC_LEN); in ieee80211_rx_h_decrypt()
1680 rx, IEEE80211_CCMP_256_MIC_LEN); in ieee80211_rx_h_decrypt()
1683 result = ieee80211_crypto_aes_cmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1686 result = ieee80211_crypto_aes_cmac_256_decrypt(rx); in ieee80211_rx_h_decrypt()
1690 result = ieee80211_crypto_aes_gmac_decrypt(rx); in ieee80211_rx_h_decrypt()
1694 result = ieee80211_crypto_gcmp_decrypt(rx); in ieee80211_rx_h_decrypt()
1697 result = ieee80211_crypto_hw_decrypt(rx); in ieee80211_rx_h_decrypt()
1778 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) in ieee80211_rx_h_defragment() argument
1788 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
1798 rx->local->dot11MulticastReceivedFrameCount++; in ieee80211_rx_h_defragment()
1805 I802_DEBUG_INC(rx->local->rx_handlers_fragments); in ieee80211_rx_h_defragment()
1807 if (skb_linearize(rx->skb)) in ieee80211_rx_h_defragment()
1815 hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_defragment()
1820 entry = ieee80211_reassemble_add(rx->sdata, frag, seq, in ieee80211_rx_h_defragment()
1821 rx->seqno_idx, &(rx->skb)); in ieee80211_rx_h_defragment()
1822 if (rx->key && in ieee80211_rx_h_defragment()
1823 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP || in ieee80211_rx_h_defragment()
1824 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 || in ieee80211_rx_h_defragment()
1825 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP || in ieee80211_rx_h_defragment()
1826 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) && in ieee80211_rx_h_defragment()
1828 int queue = rx->security_idx; in ieee80211_rx_h_defragment()
1835 rx->key->u.ccmp.rx_pn[queue], in ieee80211_rx_h_defragment()
1841 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) != in ieee80211_rx_h_defragment()
1842 sizeof(rx->key->u.gcmp.rx_pn[queue])); in ieee80211_rx_h_defragment()
1852 entry = ieee80211_reassemble_find(rx->sdata, frag, seq, in ieee80211_rx_h_defragment()
1853 rx->seqno_idx, hdr); in ieee80211_rx_h_defragment()
1855 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
1869 if (!rx->key || in ieee80211_rx_h_defragment()
1870 (rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP && in ieee80211_rx_h_defragment()
1871 rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP_256 && in ieee80211_rx_h_defragment()
1872 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP && in ieee80211_rx_h_defragment()
1873 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP_256)) in ieee80211_rx_h_defragment()
1881 queue = rx->security_idx; in ieee80211_rx_h_defragment()
1882 rpn = rx->key->u.ccmp.rx_pn[queue]; in ieee80211_rx_h_defragment()
1888 skb_pull(rx->skb, ieee80211_hdrlen(fc)); in ieee80211_rx_h_defragment()
1889 __skb_queue_tail(&entry->skb_list, rx->skb); in ieee80211_rx_h_defragment()
1891 entry->extra_len += rx->skb->len; in ieee80211_rx_h_defragment()
1893 rx->skb = NULL; in ieee80211_rx_h_defragment()
1897 rx->skb = __skb_dequeue(&entry->skb_list); in ieee80211_rx_h_defragment()
1898 if (skb_tailroom(rx->skb) < entry->extra_len) { in ieee80211_rx_h_defragment()
1899 I802_DEBUG_INC(rx->local->rx_expand_skb_head2); in ieee80211_rx_h_defragment()
1900 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, in ieee80211_rx_h_defragment()
1902 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); in ieee80211_rx_h_defragment()
1908 memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len); in ieee80211_rx_h_defragment()
1913 status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_defragment()
1917 ieee80211_led_rx(rx->local); in ieee80211_rx_h_defragment()
1919 if (rx->sta) in ieee80211_rx_h_defragment()
1920 rx->sta->rx_packets++; in ieee80211_rx_h_defragment()
1924 static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx) in ieee80211_802_1x_port_control() argument
1926 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED))) in ieee80211_802_1x_port_control()
1932 static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_drop_unencrypted() argument
1934 struct sk_buff *skb = rx->skb; in ieee80211_drop_unencrypted()
1947 ieee80211_is_data(fc) && rx->key)) in ieee80211_drop_unencrypted()
1953 static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx) in ieee80211_drop_unencrypted_mgmt() argument
1955 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_drop_unencrypted_mgmt()
1956 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_drop_unencrypted_mgmt()
1966 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) { in ieee80211_drop_unencrypted_mgmt()
1968 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
1969 rx->key)) { in ieee80211_drop_unencrypted_mgmt()
1972 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
1973 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
1974 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
1978 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) && in ieee80211_drop_unencrypted_mgmt()
1979 ieee80211_get_mmie_keyidx(rx->skb) < 0)) { in ieee80211_drop_unencrypted_mgmt()
1982 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev, in ieee80211_drop_unencrypted_mgmt()
1983 rx->skb->data, in ieee80211_drop_unencrypted_mgmt()
1984 rx->skb->len); in ieee80211_drop_unencrypted_mgmt()
1991 if (unlikely(ieee80211_is_action(fc) && !rx->key && in ieee80211_drop_unencrypted_mgmt()
1992 ieee80211_is_robust_mgmt_frame(rx->skb))) in ieee80211_drop_unencrypted_mgmt()
2000 __ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) in __ieee80211_data_to_8023() argument
2002 struct ieee80211_sub_if_data *sdata = rx->sdata; in __ieee80211_data_to_8023()
2003 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in __ieee80211_data_to_8023()
2026 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); in __ieee80211_data_to_8023()
2030 ehdr = (struct ethhdr *) rx->skb->data; in __ieee80211_data_to_8023()
2031 if (ehdr->h_proto == rx->sdata->control_port_protocol) in __ieee80211_data_to_8023()
2042 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc) in ieee80211_frame_allowed() argument
2046 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_frame_allowed()
2052 if (ehdr->h_proto == rx->sdata->control_port_protocol && in ieee80211_frame_allowed()
2053 (ether_addr_equal(ehdr->h_dest, rx->sdata->vif.addr) || in ieee80211_frame_allowed()
2057 if (ieee80211_802_1x_port_control(rx) || in ieee80211_frame_allowed()
2058 ieee80211_drop_unencrypted(rx, fc)) in ieee80211_frame_allowed()
2068 ieee80211_deliver_skb(struct ieee80211_rx_data *rx) in ieee80211_deliver_skb() argument
2070 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_deliver_skb()
2073 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; in ieee80211_deliver_skb()
2075 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_deliver_skb()
2078 dev->stats.rx_bytes += rx->skb->len; in ieee80211_deliver_skb()
2080 skb = rx->skb; in ieee80211_deliver_skb()
2142 if (!(rx->flags & IEEE80211_RX_REORDER_TIMER) && in ieee80211_deliver_skb()
2143 rx->local->napi) in ieee80211_deliver_skb()
2144 napi_gro_receive(rx->local->napi, skb); in ieee80211_deliver_skb()
2164 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) in ieee80211_rx_h_amsdu() argument
2166 struct net_device *dev = rx->sdata->dev; in ieee80211_rx_h_amsdu()
2167 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_amsdu()
2171 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_amsdu()
2183 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_amsdu()
2184 !rx->sdata->u.vlan.sta) in ieee80211_rx_h_amsdu()
2188 ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_amsdu()
2189 rx->sdata->u.vlan.sta) || in ieee80211_rx_h_amsdu()
2190 (rx->sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_rx_h_amsdu()
2191 rx->sdata->u.mgd.use_4addr))) in ieee80211_rx_h_amsdu()
2201 rx->sdata->vif.type, in ieee80211_rx_h_amsdu()
2202 rx->local->hw.extra_tx_headroom, true); in ieee80211_rx_h_amsdu()
2205 rx->skb = __skb_dequeue(&frame_list); in ieee80211_rx_h_amsdu()
2207 if (!ieee80211_frame_allowed(rx, fc)) { in ieee80211_rx_h_amsdu()
2208 dev_kfree_skb(rx->skb); in ieee80211_rx_h_amsdu()
2212 ieee80211_deliver_skb(rx); in ieee80211_rx_h_amsdu()
2220 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mesh_fwding() argument
2225 struct sk_buff *skb = rx->skb, *fwd_skb; in ieee80211_rx_h_mesh_fwding()
2226 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_mesh_fwding()
2227 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mesh_fwding()
2236 if (!pskb_may_pull(rx->skb, hdrlen + 6)) in ieee80211_rx_h_mesh_fwding()
2242 if (!pskb_may_pull(rx->skb, in ieee80211_rx_h_mesh_fwding()
2250 if (ieee80211_drop_unencrypted(rx, hdr->frame_control)) in ieee80211_rx_h_mesh_fwding()
2256 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr)) in ieee80211_rx_h_mesh_fwding()
2327 info->control.vif = &rx->sdata->vif; in ieee80211_rx_h_mesh_fwding()
2360 ieee80211_rx_h_data(struct ieee80211_rx_data *rx) in ieee80211_rx_h_data() argument
2362 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_data()
2363 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_data()
2365 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; in ieee80211_rx_h_data()
2376 if (rx->sta) { in ieee80211_rx_h_data()
2382 rx->sta->rx_msdu[rx->seqno_idx]++; in ieee80211_rx_h_data()
2391 if (rx->sta && in ieee80211_rx_h_data()
2392 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT)) in ieee80211_rx_h_data()
2394 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC); in ieee80211_rx_h_data()
2398 err = __ieee80211_data_to_8023(rx, &port_control); in ieee80211_rx_h_data()
2402 if (!ieee80211_frame_allowed(rx, fc)) in ieee80211_rx_h_data()
2406 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto == in ieee80211_rx_h_data()
2408 struct ieee80211_tdls_data *tf = (void *)rx->skb->data; in ieee80211_rx_h_data()
2410 if (pskb_may_pull(rx->skb, in ieee80211_rx_h_data()
2416 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TDLS_CHSW; in ieee80211_rx_h_data()
2417 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_data()
2418 ieee80211_queue_work(&rx->local->hw, &sdata->work); in ieee80211_rx_h_data()
2419 if (rx->sta) in ieee80211_rx_h_data()
2420 rx->sta->rx_packets++; in ieee80211_rx_h_data()
2426 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_rx_h_data()
2431 rx->sdata = sdata; in ieee80211_rx_h_data()
2434 rx->skb->dev = dev; in ieee80211_rx_h_data()
2438 ((struct ethhdr *)rx->skb->data)->h_dest) && in ieee80211_rx_h_data()
2445 ieee80211_deliver_skb(rx); in ieee80211_rx_h_data()
2451 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames) in ieee80211_rx_h_ctrl() argument
2453 struct sk_buff *skb = rx->skb; in ieee80211_rx_h_ctrl()
2467 if (!rx->sta) in ieee80211_rx_h_ctrl()
2476 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); in ieee80211_rx_h_ctrl()
2489 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx, in ieee80211_rx_h_ctrl()
2552 ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt_check() argument
2554 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_mgmt_check()
2555 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_mgmt_check()
2562 if (rx->skb->len < 24) in ieee80211_rx_h_mgmt_check()
2568 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_rx_h_mgmt_check()
2570 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { in ieee80211_rx_h_mgmt_check()
2573 if (rx->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) in ieee80211_rx_h_mgmt_check()
2576 cfg80211_report_obss_beacon(rx->local->hw.wiphy, in ieee80211_rx_h_mgmt_check()
2577 rx->skb->data, rx->skb->len, in ieee80211_rx_h_mgmt_check()
2579 rx->flags |= IEEE80211_RX_BEACON_REPORTED; in ieee80211_rx_h_mgmt_check()
2585 if (ieee80211_drop_unencrypted_mgmt(rx)) in ieee80211_rx_h_mgmt_check()
2592 ieee80211_rx_h_action(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action() argument
2594 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action()
2595 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action()
2596 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action()
2597 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action()
2598 int len = rx->skb->len; in ieee80211_rx_h_action()
2607 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC && in ieee80211_rx_h_action()
2618 if (!rx->sta->sta.ht_cap.ht_supported) in ieee80211_rx_h_action()
2653 if (rx->sta->sta.smps_mode == smps_mode) in ieee80211_rx_h_action()
2655 rx->sta->sta.smps_mode = smps_mode; in ieee80211_rx_h_action()
2657 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
2659 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
2669 if (!(rx->sta->sta.ht_cap.cap & in ieee80211_rx_h_action()
2676 max_bw = ieee80211_sta_cap_rx_bw(rx->sta); in ieee80211_rx_h_action()
2679 rx->sta->cur_max_bandwidth = max_bw; in ieee80211_rx_h_action()
2680 new_bw = ieee80211_sta_cur_vht_bw(rx->sta); in ieee80211_rx_h_action()
2682 if (rx->sta->sta.bandwidth == new_bw) in ieee80211_rx_h_action()
2685 rx->sta->sta.bandwidth = new_bw; in ieee80211_rx_h_action()
2686 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_h_action()
2688 rate_control_rate_update(local, sband, rx->sta, in ieee80211_rx_h_action()
2702 if (!rx->sta) in ieee80211_rx_h_action()
2735 ieee80211_vht_handle_opmode(rx->sdata, rx->sta, in ieee80211_rx_h_action()
2879 if (rx->sta) in ieee80211_rx_h_action()
2880 rx->sta->rx_packets++; in ieee80211_rx_h_action()
2881 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action()
2885 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; in ieee80211_rx_h_action()
2886 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_action()
2888 if (rx->sta) in ieee80211_rx_h_action()
2889 rx->sta->rx_packets++; in ieee80211_rx_h_action()
2894 ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_userspace_mgmt() argument
2896 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_userspace_mgmt()
2910 if (rx->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) in ieee80211_rx_h_userspace_mgmt()
2913 if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig, in ieee80211_rx_h_userspace_mgmt()
2914 rx->skb->data, rx->skb->len, 0)) { in ieee80211_rx_h_userspace_mgmt()
2915 if (rx->sta) in ieee80211_rx_h_userspace_mgmt()
2916 rx->sta->rx_packets++; in ieee80211_rx_h_userspace_mgmt()
2917 dev_kfree_skb(rx->skb); in ieee80211_rx_h_userspace_mgmt()
2925 ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) in ieee80211_rx_h_action_return() argument
2927 struct ieee80211_local *local = rx->local; in ieee80211_rx_h_action_return()
2928 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; in ieee80211_rx_h_action_return()
2930 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_action_return()
2931 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); in ieee80211_rx_h_action_return()
2958 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0, in ieee80211_rx_h_action_return()
2965 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN); in ieee80211_rx_h_action_return()
2969 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { in ieee80211_rx_h_action_return()
2980 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7, in ieee80211_rx_h_action_return()
2983 dev_kfree_skb(rx->skb); in ieee80211_rx_h_action_return()
2988 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) in ieee80211_rx_h_mgmt() argument
2990 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_rx_h_mgmt()
2991 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; in ieee80211_rx_h_mgmt()
3031 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; in ieee80211_rx_h_mgmt()
3032 skb_queue_tail(&sdata->skb_queue, rx->skb); in ieee80211_rx_h_mgmt()
3033 ieee80211_queue_work(&rx->local->hw, &sdata->work); in ieee80211_rx_h_mgmt()
3034 if (rx->sta) in ieee80211_rx_h_mgmt()
3035 rx->sta->rx_packets++; in ieee80211_rx_h_mgmt()
3041 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, in ieee80211_rx_cooked_monitor() argument
3045 struct ieee80211_local *local = rx->local; in ieee80211_rx_cooked_monitor()
3046 struct sk_buff *skb = rx->skb, *skb2; in ieee80211_rx_cooked_monitor()
3055 if (rx->flags & IEEE80211_RX_CMNTR) in ieee80211_rx_cooked_monitor()
3057 rx->flags |= IEEE80211_RX_CMNTR; in ieee80211_rx_cooked_monitor()
3112 static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers_result() argument
3117 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3118 if (rx->sta) in ieee80211_rx_handlers_result()
3119 rx->sta->rx_dropped++; in ieee80211_rx_handlers_result()
3126 status = IEEE80211_SKB_RXCB((rx->skb)); in ieee80211_rx_handlers_result()
3128 sband = rx->local->hw.wiphy->bands[status->band]; in ieee80211_rx_handlers_result()
3133 ieee80211_rx_cooked_monitor(rx, rate); in ieee80211_rx_handlers_result()
3137 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); in ieee80211_rx_handlers_result()
3138 if (rx->sta) in ieee80211_rx_handlers_result()
3139 rx->sta->rx_dropped++; in ieee80211_rx_handlers_result()
3140 dev_kfree_skb(rx->skb); in ieee80211_rx_handlers_result()
3143 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued); in ieee80211_rx_handlers_result()
3148 static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx, in ieee80211_rx_handlers() argument
3156 res = rxh(rx); \ in ieee80211_rx_handlers()
3167 spin_lock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3175 rx->skb = skb; in ieee80211_rx_handlers()
3185 if (ieee80211_vif_is_mesh(&rx->sdata->vif)) in ieee80211_rx_handlers()
3192 res = ieee80211_rx_h_ctrl(rx, frames); in ieee80211_rx_handlers()
3203 ieee80211_rx_handlers_result(rx, res); in ieee80211_rx_handlers()
3208 spin_unlock_bh(&rx->local->rx_path_lock); in ieee80211_rx_handlers()
3211 static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx) in ieee80211_invoke_rx_handlers() argument
3220 res = rxh(rx); \ in ieee80211_invoke_rx_handlers()
3228 ieee80211_rx_reorder_ampdu(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3230 ieee80211_rx_handlers(rx, &reorder_release); in ieee80211_invoke_rx_handlers()
3234 ieee80211_rx_handlers_result(rx, res); in ieee80211_invoke_rx_handlers()
3246 struct ieee80211_rx_data rx = { in ieee80211_release_reorder_timeout() local
3267 ieee80211_rx_handlers(&rx, &frames); in ieee80211_release_reorder_timeout()
3272 static bool prepare_for_handlers(struct ieee80211_rx_data *rx, in prepare_for_handlers() argument
3275 struct ieee80211_sub_if_data *sdata = rx->sdata; in prepare_for_handlers()
3276 struct sk_buff *skb = rx->skb; in prepare_for_handlers()
3308 } else if (!rx->sta) { in prepare_for_handlers()
3334 rx->flags &= ~IEEE80211_RX_RA_MATCH; in prepare_for_handlers()
3335 } else if (!rx->sta) { in prepare_for_handlers()
3416 static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, in ieee80211_prepare_and_rx_handle() argument
3419 struct ieee80211_local *local = rx->local; in ieee80211_prepare_and_rx_handle()
3420 struct ieee80211_sub_if_data *sdata = rx->sdata; in ieee80211_prepare_and_rx_handle()
3424 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
3427 if (!prepare_for_handlers(rx, hdr)) in ieee80211_prepare_and_rx_handle()
3440 rx->skb = skb; in ieee80211_prepare_and_rx_handle()
3443 ieee80211_invoke_rx_handlers(rx); in ieee80211_prepare_and_rx_handle()
3458 struct ieee80211_rx_data rx; in __ieee80211_rx_handle_packet() local
3465 memset(&rx, 0, sizeof(rx)); in __ieee80211_rx_handle_packet()
3466 rx.skb = skb; in __ieee80211_rx_handle_packet()
3467 rx.local = local; 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()