335
336
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
336
337
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
338
int tid, seqno_idx, security_idx;
339
340
/* does the frame have a qos control field? */
340
341
if (ieee80211_is_data_qos(hdr->frame_control)) {
341
342
u8 *qc = ieee80211_get_qos_ctl(hdr);
342
343
/* frame has qos control */
343
344
tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
344
if (*qc & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
345
if (*qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT)
345
346
status->rx_flags |= IEEE80211_RX_AMSDU;
348
352
* IEEE 802.11-2007, 7.1.3.4.1 ("Sequence Number field"):
356
360
* We also use that counter for non-QoS STAs.
358
tid = NUM_RX_DATA_QUEUES - 1;
362
seqno_idx = NUM_RX_DATA_QUEUES;
364
if (ieee80211_is_mgmt(hdr->frame_control))
365
security_idx = NUM_RX_DATA_QUEUES;
369
rx->seqno_idx = seqno_idx;
370
rx->security_idx = security_idx;
362
371
/* Set skb->priority to 1d tag if highest order bit of TID is not set.
363
372
* For now, set skb->priority to 0 for other cases. */
364
373
rx->skb->priority = (tid > 7) ? 0 : tid;
412
421
return RX_CONTINUE;
414
423
if (test_bit(SCAN_HW_SCANNING, &local->scanning) ||
415
test_bit(SCAN_SW_SCANNING, &local->scanning) ||
416
424
local->sched_scanning)
417
425
return ieee80211_scan_rx(rx->sdata, skb);
427
if (test_bit(SCAN_SW_SCANNING, &local->scanning)) {
428
/* drop all the other packets during a software scan anyway */
429
if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED)
419
434
/* scanning finished during invoking of handlers */
420
435
I802_DEBUG_INC(local->rx_handlers_drop_passive_scan);
421
436
return RX_DROP_UNUSABLE;
610
616
index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
611
617
tid_agg_rx->buf_size;
612
618
if (!tid_agg_rx->reorder_buf[index] &&
613
tid_agg_rx->stored_mpdu_num > 1) {
619
tid_agg_rx->stored_mpdu_num) {
615
621
* No buffers ready to be released, but check whether any
616
622
* frames in the reorder buffer have timed out.
813
819
/* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
814
820
if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
815
821
if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
816
rx->sta->last_seq_ctrl[rx->queue] ==
822
rx->sta->last_seq_ctrl[rx->seqno_idx] ==
817
823
hdr->seq_ctrl)) {
818
824
if (status->rx_flags & IEEE80211_RX_RA_MATCH) {
819
825
rx->local->dot11FrameDuplicateCount++;
845
851
ieee80211_is_pspoll(hdr->frame_control)) &&
846
852
rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
847
853
rx->sdata->vif.type != NL80211_IFTYPE_WDS &&
848
(!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC))))
854
(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) {
855
if (rx->sta && rx->sta->dummy &&
856
ieee80211_is_data_present(hdr->frame_control)) {
860
payload = rx->skb->data +
861
ieee80211_hdrlen(hdr->frame_control);
862
ethertype = (payload[6] << 8) | payload[7];
863
if (cpu_to_be16(ethertype) ==
864
rx->sdata->control_port_protocol)
849
867
return RX_DROP_MONITOR;
851
870
return RX_CONTINUE;
1098
1120
struct ieee80211_local *local = sdata->local;
1100
1122
atomic_inc(&sdata->bss->num_sta_ps);
1101
set_sta_flags(sta, WLAN_STA_PS_STA);
1123
set_sta_flag(sta, WLAN_STA_PS_STA);
1102
1124
if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
1103
1125
drv_sta_notify(local, sdata, STA_NOTIFY_SLEEP, &sta->sta);
1104
1126
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1118
1140
sdata->name, sta->sta.addr, sta->sta.aid);
1119
1141
#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
1121
if (test_sta_flags(sta, WLAN_STA_PS_DRIVER)) {
1143
if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
1122
1144
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1123
1145
printk(KERN_DEBUG "%s: STA %pM aid %d driver-ps-blocked\n",
1124
1146
sdata->name, sta->sta.addr, sta->sta.aid);
1151
1173
EXPORT_SYMBOL(ieee80211_sta_ps_transition);
1153
1175
static ieee80211_rx_result debug_noinline
1176
ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx)
1178
struct ieee80211_sub_if_data *sdata = rx->sdata;
1179
struct ieee80211_hdr *hdr = (void *)rx->skb->data;
1180
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1183
if (!rx->sta || !(status->rx_flags & IEEE80211_RX_RA_MATCH))
1186
if (sdata->vif.type != NL80211_IFTYPE_AP &&
1187
sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
1191
* The device handles station powersave, so don't do anything about
1192
* uAPSD and PS-Poll frames (the latter shouldn't even come up from
1193
* it to mac80211 since they're handled.)
1195
if (sdata->local->hw.flags & IEEE80211_HW_AP_LINK_PS)
1199
* Don't do anything if the station isn't already asleep. In
1200
* the uAPSD case, the station will probably be marked asleep,
1201
* in the PS-Poll case the station must be confused ...
1203
if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA))
1206
if (unlikely(ieee80211_is_pspoll(hdr->frame_control))) {
1207
if (!test_sta_flag(rx->sta, WLAN_STA_SP)) {
1208
if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER))
1209
ieee80211_sta_ps_deliver_poll_response(rx->sta);
1211
set_sta_flag(rx->sta, WLAN_STA_PSPOLL);
1214
/* Free PS Poll skb here instead of returning RX_DROP that would
1215
* count as an dropped frame. */
1216
dev_kfree_skb(rx->skb);
1219
} else if (!ieee80211_has_morefrags(hdr->frame_control) &&
1220
!(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1221
ieee80211_has_pm(hdr->frame_control) &&
1222
(ieee80211_is_data_qos(hdr->frame_control) ||
1223
ieee80211_is_qos_nullfunc(hdr->frame_control))) {
1224
tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
1225
ac = ieee802_1d_to_ac[tid & 7];
1228
* If this AC is not trigger-enabled do nothing.
1230
* NB: This could/should check a separate bitmap of trigger-
1231
* enabled queues, but for now we only implement uAPSD w/o
1232
* TSPEC changes to the ACs, so they're always the same.
1234
if (!(rx->sta->sta.uapsd_queues & BIT(ac)))
1237
/* if we are in a service period, do nothing */
1238
if (test_sta_flag(rx->sta, WLAN_STA_SP))
1241
if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER))
1242
ieee80211_sta_ps_deliver_uapsd(rx->sta);
1244
set_sta_flag(rx->sta, WLAN_STA_UAPSD);
1250
static ieee80211_rx_result debug_noinline
1154
1251
ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1156
1253
struct sta_info *sta = rx->sta;
1208
1305
!(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1209
1306
(rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1210
1307
rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
1211
if (test_sta_flags(sta, WLAN_STA_PS_STA)) {
1308
if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
1213
1310
* Ignore doze->wake transitions that are
1214
1311
* indicated by non-data frames, the standard
1377
1474
if (frag == 0) {
1378
1475
/* This is the first fragment of a new frame. */
1379
1476
entry = ieee80211_reassemble_add(rx->sdata, frag, seq,
1380
rx->queue, &(rx->skb));
1477
rx->seqno_idx, &(rx->skb));
1381
1478
if (rx->key && rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP &&
1382
1479
ieee80211_has_protected(fc)) {
1383
int queue = ieee80211_is_mgmt(fc) ?
1384
NUM_RX_DATA_QUEUES : rx->queue;
1480
int queue = rx->security_idx;
1385
1481
/* Store CCMP PN so that we can verify that the next
1386
1482
* fragment has a sequential PN value. */
1387
1483
entry->ccmp = 1;
1395
1491
/* This is a fragment for a frame that should already be pending in
1396
1492
* fragment cache. Add this fragment to the end of the pending entry.
1398
entry = ieee80211_reassemble_find(rx->sdata, frag, seq, rx->queue, hdr);
1494
entry = ieee80211_reassemble_find(rx->sdata, frag, seq,
1495
rx->seqno_idx, hdr);
1400
1497
I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
1401
1498
return RX_DROP_MONITOR;
1464
1560
static ieee80211_rx_result debug_noinline
1465
ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
1467
struct ieee80211_sub_if_data *sdata = rx->sdata;
1468
__le16 fc = ((struct ieee80211_hdr *)rx->skb->data)->frame_control;
1469
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1471
if (likely(!rx->sta || !ieee80211_is_pspoll(fc) ||
1472
!(status->rx_flags & IEEE80211_RX_RA_MATCH)))
1475
if ((sdata->vif.type != NL80211_IFTYPE_AP) &&
1476
(sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
1477
return RX_DROP_UNUSABLE;
1479
if (!test_sta_flags(rx->sta, WLAN_STA_PS_DRIVER))
1480
ieee80211_sta_ps_deliver_poll_response(rx->sta);
1482
set_sta_flags(rx->sta, WLAN_STA_PSPOLL);
1484
/* Free PS Poll skb here instead of returning RX_DROP that would
1485
* count as an dropped frame. */
1486
dev_kfree_skb(rx->skb);
1491
static ieee80211_rx_result debug_noinline
1492
1561
ieee80211_rx_h_remove_qos_control(struct ieee80211_rx_data *rx)
1494
1563
u8 *data = rx->skb->data;
1820
1889
hdrlen = ieee80211_hdrlen(hdr->frame_control);
1821
1890
mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
1892
/* frame is in RMC, don't forward */
1893
if (ieee80211_is_data(hdr->frame_control) &&
1894
is_multicast_ether_addr(hdr->addr1) &&
1895
mesh_rmc_check(hdr->addr3, mesh_hdr, rx->sdata))
1896
return RX_DROP_MONITOR;
1823
1898
if (!ieee80211_is_data(hdr->frame_control))
1824
1899
return RX_CONTINUE;
1882
1963
memset(info, 0, sizeof(*info));
1883
1964
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
1884
1965
info->control.vif = &rx->sdata->vif;
1885
skb_set_queue_mapping(skb,
1886
ieee80211_select_queue(rx->sdata, fwd_skb));
1887
ieee80211_set_qos_hdr(local, skb);
1888
if (is_multicast_ether_addr(fwd_hdr->addr1))
1966
if (is_multicast_ether_addr(fwd_hdr->addr1)) {
1889
1967
IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
1969
skb_set_queue_mapping(fwd_skb,
1970
ieee80211_select_queue(sdata, fwd_skb));
1971
ieee80211_set_qos_hdr(sdata, fwd_skb);
1894
1975
* Save TA to addr1 to send TA a path error if a
2297
case WLAN_CATEGORY_SELF_PROTECTED:
2298
switch (mgmt->u.action.u.self_prot.action_code) {
2299
case WLAN_SP_MESH_PEERING_OPEN:
2300
case WLAN_SP_MESH_PEERING_CLOSE:
2301
case WLAN_SP_MESH_PEERING_CONFIRM:
2302
if (!ieee80211_vif_is_mesh(&sdata->vif))
2304
if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)
2305
/* userspace handles this frame */
2308
case WLAN_SP_MGK_INFORM:
2309
case WLAN_SP_MGK_ACK:
2310
if (!ieee80211_vif_is_mesh(&sdata->vif))
2216
2315
case WLAN_CATEGORY_MESH_ACTION:
2217
2316
if (!ieee80211_vif_is_mesh(&sdata->vif))
2220
case WLAN_CATEGORY_MESH_PATH_SEL:
2221
if (!mesh_path_sel_is_hwmp(sdata))
2318
if (mesh_action_is_path_sel(mgmt) &&
2319
(!mesh_path_sel_is_hwmp(sdata)))
2528
2626
CALL_RXH(ieee80211_rx_h_decrypt)
2529
2627
CALL_RXH(ieee80211_rx_h_check_more_data)
2628
CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll)
2530
2629
CALL_RXH(ieee80211_rx_h_sta_process)
2531
2630
CALL_RXH(ieee80211_rx_h_defragment)
2532
CALL_RXH(ieee80211_rx_h_ps_poll)
2533
2631
CALL_RXH(ieee80211_rx_h_michael_mic_verify)
2534
2632
/* must be after MMIC verify so header is counted in MPDU mic */
2633
#ifdef CONFIG_MAC80211_MESH
2634
if (ieee80211_vif_is_mesh(&rx->sdata->vif))
2635
CALL_RXH(ieee80211_rx_h_mesh_fwding);
2535
2637
CALL_RXH(ieee80211_rx_h_remove_qos_control)
2536
2638
CALL_RXH(ieee80211_rx_h_amsdu)
2537
#ifdef CONFIG_MAC80211_MESH
2538
if (ieee80211_vif_is_mesh(&rx->sdata->vif))
2539
CALL_RXH(ieee80211_rx_h_mesh_fwding);
2541
2639
CALL_RXH(ieee80211_rx_h_data)
2542
2640
CALL_RXH(ieee80211_rx_h_ctrl);
2543
2641
CALL_RXH(ieee80211_rx_h_mgmt_check)
2762
2864
local->dot11ReceivedFragmentCount++;
2764
2866
if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
2765
test_bit(SCAN_SW_SCANNING, &local->scanning)))
2867
test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
2766
2868
status->rx_flags |= IEEE80211_RX_IN_SCAN;
2768
2870
if (ieee80211_is_mgmt(fc))