1
2
3
4
5
6
7
8
9
10#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/etherdevice.h>
13#include <linux/netdevice.h>
14#include <linux/types.h>
15#include <linux/slab.h>
16#include <linux/skbuff.h>
17#include <linux/if_arp.h>
18#include <linux/timer.h>
19#include <linux/rtnetlink.h>
20
21#include <net/mac80211.h>
22#include "ieee80211_i.h"
23#include "driver-ops.h"
24#include "rate.h"
25#include "sta_info.h"
26#include "debugfs_sta.h"
27#include "mesh.h"
28#include "wme.h"
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67static int sta_info_hash_del(struct ieee80211_local *local,
68 struct sta_info *sta)
69{
70 struct sta_info *s;
71
72 s = rcu_dereference_protected(local->sta_hash[STA_HASH(sta->sta.addr)],
73 lockdep_is_held(&local->sta_mtx));
74 if (!s)
75 return -ENOENT;
76 if (s == sta) {
77 rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)],
78 s->hnext);
79 return 0;
80 }
81
82 while (rcu_access_pointer(s->hnext) &&
83 rcu_access_pointer(s->hnext) != sta)
84 s = rcu_dereference_protected(s->hnext,
85 lockdep_is_held(&local->sta_mtx));
86 if (rcu_access_pointer(s->hnext)) {
87 rcu_assign_pointer(s->hnext, sta->hnext);
88 return 0;
89 }
90
91 return -ENOENT;
92}
93
94
95struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
96 const u8 *addr)
97{
98 struct ieee80211_local *local = sdata->local;
99 struct sta_info *sta;
100
101 sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
102 lockdep_is_held(&local->sta_mtx));
103 while (sta) {
104 if (sta->sdata == sdata &&
105 ether_addr_equal(sta->sta.addr, addr))
106 break;
107 sta = rcu_dereference_check(sta->hnext,
108 lockdep_is_held(&local->sta_mtx));
109 }
110 return sta;
111}
112
113
114
115
116
117struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
118 const u8 *addr)
119{
120 struct ieee80211_local *local = sdata->local;
121 struct sta_info *sta;
122
123 sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
124 lockdep_is_held(&local->sta_mtx));
125 while (sta) {
126 if ((sta->sdata == sdata ||
127 (sta->sdata->bss && sta->sdata->bss == sdata->bss)) &&
128 ether_addr_equal(sta->sta.addr, addr))
129 break;
130 sta = rcu_dereference_check(sta->hnext,
131 lockdep_is_held(&local->sta_mtx));
132 }
133 return sta;
134}
135
136struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
137 int idx)
138{
139 struct ieee80211_local *local = sdata->local;
140 struct sta_info *sta;
141 int i = 0;
142
143 list_for_each_entry_rcu(sta, &local->sta_list, list) {
144 if (sdata != sta->sdata)
145 continue;
146 if (i < idx) {
147 ++i;
148 continue;
149 }
150 return sta;
151 }
152
153 return NULL;
154}
155
156
157
158
159
160
161
162
163
164
165
166
167void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
168{
169 if (sta->rate_ctrl)
170 rate_control_free_sta(sta);
171
172 sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
173
174 kfree(sta);
175}
176
177
178static void sta_info_hash_add(struct ieee80211_local *local,
179 struct sta_info *sta)
180{
181 lockdep_assert_held(&local->sta_mtx);
182 sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
183 rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
184}
185
186static void sta_unblock(struct work_struct *wk)
187{
188 struct sta_info *sta;
189
190 sta = container_of(wk, struct sta_info, drv_unblock_wk);
191
192 if (sta->dead)
193 return;
194
195 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
196 local_bh_disable();
197 ieee80211_sta_ps_deliver_wakeup(sta);
198 local_bh_enable();
199 } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
200 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
201
202 local_bh_disable();
203 ieee80211_sta_ps_deliver_poll_response(sta);
204 local_bh_enable();
205 } else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD)) {
206 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
207
208 local_bh_disable();
209 ieee80211_sta_ps_deliver_uapsd(sta);
210 local_bh_enable();
211 } else
212 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
213}
214
215static int sta_prepare_rate_control(struct ieee80211_local *local,
216 struct sta_info *sta, gfp_t gfp)
217{
218 if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
219 return 0;
220
221 sta->rate_ctrl = local->rate_ctrl;
222 sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl,
223 &sta->sta, gfp);
224 if (!sta->rate_ctrl_priv)
225 return -ENOMEM;
226
227 return 0;
228}
229
230struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
231 const u8 *addr, gfp_t gfp)
232{
233 struct ieee80211_local *local = sdata->local;
234 struct sta_info *sta;
235 struct timespec uptime;
236 int i;
237
238 sta = kzalloc(sizeof(*sta) + local->hw.sta_data_size, gfp);
239 if (!sta)
240 return NULL;
241
242 spin_lock_init(&sta->lock);
243 INIT_WORK(&sta->drv_unblock_wk, sta_unblock);
244 INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
245 mutex_init(&sta->ampdu_mlme.mtx);
246
247 memcpy(sta->sta.addr, addr, ETH_ALEN);
248 sta->local = local;
249 sta->sdata = sdata;
250 sta->last_rx = jiffies;
251
252 sta->sta_state = IEEE80211_STA_NONE;
253
254 do_posix_clock_monotonic_gettime(&uptime);
255 sta->last_connected = uptime.tv_sec;
256 ewma_init(&sta->avg_signal, 1024, 8);
257
258 if (sta_prepare_rate_control(local, sta, gfp)) {
259 kfree(sta);
260 return NULL;
261 }
262
263 for (i = 0; i < STA_TID_NUM; i++) {
264
265
266
267
268
269 sta->timer_to_tid[i] = i;
270 }
271 for (i = 0; i < IEEE80211_NUM_ACS; i++) {
272 skb_queue_head_init(&sta->ps_tx_buf[i]);
273 skb_queue_head_init(&sta->tx_filtered[i]);
274 }
275
276 for (i = 0; i < NUM_RX_DATA_QUEUES; i++)
277 sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
278
279 sta_dbg(sdata, "Allocated STA %pM\n", sta->sta.addr);
280
281#ifdef CONFIG_MAC80211_MESH
282 sta->plink_state = NL80211_PLINK_LISTEN;
283 init_timer(&sta->plink_timer);
284#endif
285
286 return sta;
287}
288
289static int sta_info_insert_check(struct sta_info *sta)
290{
291 struct ieee80211_sub_if_data *sdata = sta->sdata;
292
293
294
295
296
297
298 if (unlikely(!ieee80211_sdata_running(sdata)))
299 return -ENETDOWN;
300
301 if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
302 is_multicast_ether_addr(sta->sta.addr)))
303 return -EINVAL;
304
305 return 0;
306}
307
308static int sta_info_insert_drv_state(struct ieee80211_local *local,
309 struct ieee80211_sub_if_data *sdata,
310 struct sta_info *sta)
311{
312 enum ieee80211_sta_state state;
313 int err = 0;
314
315 for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) {
316 err = drv_sta_state(local, sdata, sta, state, state + 1);
317 if (err)
318 break;
319 }
320
321 if (!err) {
322
323
324
325
326 if (!local->ops->sta_add)
327 sta->uploaded = true;
328 return 0;
329 }
330
331 if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
332 sdata_info(sdata,
333 "failed to move IBSS STA %pM to state %d (%d) - keeping it anyway\n",
334 sta->sta.addr, state + 1, err);
335 err = 0;
336 }
337
338
339 for (; state > IEEE80211_STA_NOTEXIST; state--)
340 WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1));
341
342 return err;
343}
344
345
346
347
348
349
350static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
351{
352 struct ieee80211_local *local = sta->local;
353 struct ieee80211_sub_if_data *sdata = sta->sdata;
354 struct station_info sinfo;
355 int err = 0;
356
357 lockdep_assert_held(&local->sta_mtx);
358
359
360 if (sta_info_get_bss(sdata, sta->sta.addr)) {
361 err = -EEXIST;
362 goto out_err;
363 }
364
365
366 err = sta_info_insert_drv_state(local, sdata, sta);
367 if (err)
368 goto out_err;
369
370 local->num_sta++;
371 local->sta_generation++;
372 smp_mb();
373
374
375 sta_info_hash_add(local, sta);
376
377 list_add_rcu(&sta->list, &local->sta_list);
378
379 set_sta_flag(sta, WLAN_STA_INSERTED);
380
381 ieee80211_sta_debugfs_add(sta);
382 rate_control_add_sta_debugfs(sta);
383
384 memset(&sinfo, 0, sizeof(sinfo));
385 sinfo.filled = 0;
386 sinfo.generation = local->sta_generation;
387 cfg80211_new_sta(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL);
388
389 sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
390
391
392 rcu_read_lock();
393 mutex_unlock(&local->sta_mtx);
394
395 if (ieee80211_vif_is_mesh(&sdata->vif))
396 mesh_accept_plinks_update(sdata);
397
398 return 0;
399 out_err:
400 mutex_unlock(&local->sta_mtx);
401 rcu_read_lock();
402 return err;
403}
404
405int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)
406{
407 struct ieee80211_local *local = sta->local;
408 int err = 0;
409
410 might_sleep();
411
412 err = sta_info_insert_check(sta);
413 if (err) {
414 rcu_read_lock();
415 goto out_free;
416 }
417
418 mutex_lock(&local->sta_mtx);
419
420 err = sta_info_insert_finish(sta);
421 if (err)
422 goto out_free;
423
424 return 0;
425 out_free:
426 BUG_ON(!err);
427 sta_info_free(local, sta);
428 return err;
429}
430
431int sta_info_insert(struct sta_info *sta)
432{
433 int err = sta_info_insert_rcu(sta);
434
435 rcu_read_unlock();
436
437 return err;
438}
439
440static inline void __bss_tim_set(struct ieee80211_if_ap *bss, u16 aid)
441{
442
443
444
445
446 bss->tim[aid / 8] |= (1 << (aid % 8));
447}
448
449static inline void __bss_tim_clear(struct ieee80211_if_ap *bss, u16 aid)
450{
451
452
453
454
455 bss->tim[aid / 8] &= ~(1 << (aid % 8));
456}
457
458static unsigned long ieee80211_tids_for_ac(int ac)
459{
460
461 switch (ac) {
462 case IEEE80211_AC_VO:
463 return BIT(6) | BIT(7);
464 case IEEE80211_AC_VI:
465 return BIT(4) | BIT(5);
466 case IEEE80211_AC_BE:
467 return BIT(0) | BIT(3);
468 case IEEE80211_AC_BK:
469 return BIT(1) | BIT(2);
470 default:
471 WARN_ON(1);
472 return 0;
473 }
474}
475
476void sta_info_recalc_tim(struct sta_info *sta)
477{
478 struct ieee80211_local *local = sta->local;
479 struct ieee80211_if_ap *bss = sta->sdata->bss;
480 unsigned long flags;
481 bool indicate_tim = false;
482 u8 ignore_for_tim = sta->sta.uapsd_queues;
483 int ac;
484
485 if (WARN_ON_ONCE(!sta->sdata->bss))
486 return;
487
488
489 if (local->hw.flags & IEEE80211_HW_AP_LINK_PS)
490 return;
491
492 if (sta->dead)
493 goto done;
494
495
496
497
498
499
500
501 if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1)
502 ignore_for_tim = 0;
503
504 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
505 unsigned long tids;
506
507 if (ignore_for_tim & BIT(ac))
508 continue;
509
510 indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) ||
511 !skb_queue_empty(&sta->ps_tx_buf[ac]);
512 if (indicate_tim)
513 break;
514
515 tids = ieee80211_tids_for_ac(ac);
516
517 indicate_tim |=
518 sta->driver_buffered_tids & tids;
519 }
520
521 done:
522 spin_lock_irqsave(&local->tim_lock, flags);
523
524 if (indicate_tim)
525 __bss_tim_set(bss, sta->sta.aid);
526 else
527 __bss_tim_clear(bss, sta->sta.aid);
528
529 if (local->ops->set_tim) {
530 local->tim_in_locked_section = true;
531 drv_set_tim(local, &sta->sta, indicate_tim);
532 local->tim_in_locked_section = false;
533 }
534
535 spin_unlock_irqrestore(&local->tim_lock, flags);
536}
537
538static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
539{
540 struct ieee80211_tx_info *info;
541 int timeout;
542
543 if (!skb)
544 return false;
545
546 info = IEEE80211_SKB_CB(skb);
547
548
549 timeout = (sta->listen_interval *
550 sta->sdata->vif.bss_conf.beacon_int *
551 32 / 15625) * HZ;
552 if (timeout < STA_TX_BUFFER_EXPIRE)
553 timeout = STA_TX_BUFFER_EXPIRE;
554 return time_after(jiffies, info->control.jiffies + timeout);
555}
556
557
558static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
559 struct sta_info *sta, int ac)
560{
561 unsigned long flags;
562 struct sk_buff *skb;
563
564
565
566
567
568
569
570
571 for (;;) {
572 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
573 skb = skb_peek(&sta->tx_filtered[ac]);
574 if (sta_info_buffer_expired(sta, skb))
575 skb = __skb_dequeue(&sta->tx_filtered[ac]);
576 else
577 skb = NULL;
578 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
579
580
581
582
583
584
585
586 if (!skb)
587 break;
588 ieee80211_free_txskb(&local->hw, skb);
589 }
590
591
592
593
594
595
596
597 for (;;) {
598 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
599 skb = skb_peek(&sta->ps_tx_buf[ac]);
600 if (sta_info_buffer_expired(sta, skb))
601 skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
602 else
603 skb = NULL;
604 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
605
606
607
608
609
610
611 if (!skb)
612 break;
613
614 local->total_ps_buffered--;
615 ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n",
616 sta->sta.addr);
617 ieee80211_free_txskb(&local->hw, skb);
618 }
619
620
621
622
623
624
625 sta_info_recalc_tim(sta);
626
627
628
629
630
631
632 return !(skb_queue_empty(&sta->ps_tx_buf[ac]) &&
633 skb_queue_empty(&sta->tx_filtered[ac]));
634}
635
636static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
637 struct sta_info *sta)
638{
639 bool have_buffered = false;
640 int ac;
641
642
643 if (!sta->sdata->bss)
644 return false;
645
646 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
647 have_buffered |=
648 sta_info_cleanup_expire_buffered_ac(local, sta, ac);
649
650 return have_buffered;
651}
652
653int __must_check __sta_info_destroy(struct sta_info *sta)
654{
655 struct ieee80211_local *local;
656 struct ieee80211_sub_if_data *sdata;
657 int ret, i, ac;
658 struct tid_ampdu_tx *tid_tx;
659
660 might_sleep();
661
662 if (!sta)
663 return -ENOENT;
664
665 local = sta->local;
666 sdata = sta->sdata;
667
668 lockdep_assert_held(&local->sta_mtx);
669
670
671
672
673
674
675
676 set_sta_flag(sta, WLAN_STA_BLOCK_BA);
677 ieee80211_sta_tear_down_BA_sessions(sta, true);
678
679 ret = sta_info_hash_del(local, sta);
680 if (ret)
681 return ret;
682
683 list_del_rcu(&sta->list);
684
685 mutex_lock(&local->key_mtx);
686 for (i = 0; i < NUM_DEFAULT_KEYS; i++)
687 __ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i]));
688 if (sta->ptk)
689 __ieee80211_key_free(key_mtx_dereference(local, sta->ptk));
690 mutex_unlock(&local->key_mtx);
691
692 sta->dead = true;
693
694 local->num_sta--;
695 local->sta_generation++;
696
697 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
698 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
699
700 while (sta->sta_state > IEEE80211_STA_NONE) {
701 ret = sta_info_move_state(sta, sta->sta_state - 1);
702 if (ret) {
703 WARN_ON_ONCE(1);
704 break;
705 }
706 }
707
708 if (sta->uploaded) {
709 ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE,
710 IEEE80211_STA_NOTEXIST);
711 WARN_ON_ONCE(ret != 0);
712 }
713
714
715
716
717
718
719
720 synchronize_rcu();
721
722 if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
723 BUG_ON(!sdata->bss);
724
725 clear_sta_flag(sta, WLAN_STA_PS_STA);
726
727 atomic_dec(&sdata->bss->num_sta_ps);
728 sta_info_recalc_tim(sta);
729 }
730
731 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
732 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
733 ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
734 ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
735 }
736
737#ifdef CONFIG_MAC80211_MESH
738 if (ieee80211_vif_is_mesh(&sdata->vif))
739 mesh_accept_plinks_update(sdata);
740#endif
741
742 sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
743
744 cancel_work_sync(&sta->drv_unblock_wk);
745
746 cfg80211_del_sta(sdata->dev, sta->sta.addr, GFP_KERNEL);
747
748 rate_control_remove_sta_debugfs(sta);
749 ieee80211_sta_debugfs_remove(sta);
750
751#ifdef CONFIG_MAC80211_MESH
752 if (ieee80211_vif_is_mesh(&sta->sdata->vif)) {
753 mesh_plink_deactivate(sta);
754 del_timer_sync(&sta->plink_timer);
755 }
756#endif
757
758
759
760
761
762
763
764 for (i = 0; i < STA_TID_NUM; i++) {
765 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
766 if (!tid_tx)
767 continue;
768 ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
769 kfree(tid_tx);
770 }
771
772 sta_info_free(local, sta);
773
774 return 0;
775}
776
777int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr)
778{
779 struct sta_info *sta;
780 int ret;
781
782 mutex_lock(&sdata->local->sta_mtx);
783 sta = sta_info_get(sdata, addr);
784 ret = __sta_info_destroy(sta);
785 mutex_unlock(&sdata->local->sta_mtx);
786
787 return ret;
788}
789
790int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
791 const u8 *addr)
792{
793 struct sta_info *sta;
794 int ret;
795
796 mutex_lock(&sdata->local->sta_mtx);
797 sta = sta_info_get_bss(sdata, addr);
798 ret = __sta_info_destroy(sta);
799 mutex_unlock(&sdata->local->sta_mtx);
800
801 return ret;
802}
803
804static void sta_info_cleanup(unsigned long data)
805{
806 struct ieee80211_local *local = (struct ieee80211_local *) data;
807 struct sta_info *sta;
808 bool timer_needed = false;
809
810 rcu_read_lock();
811 list_for_each_entry_rcu(sta, &local->sta_list, list)
812 if (sta_info_cleanup_expire_buffered(local, sta))
813 timer_needed = true;
814 rcu_read_unlock();
815
816 if (local->quiescing)
817 return;
818
819 if (!timer_needed)
820 return;
821
822 mod_timer(&local->sta_cleanup,
823 round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
824}
825
826void sta_info_init(struct ieee80211_local *local)
827{
828 spin_lock_init(&local->tim_lock);
829 mutex_init(&local->sta_mtx);
830 INIT_LIST_HEAD(&local->sta_list);
831
832 setup_timer(&local->sta_cleanup, sta_info_cleanup,
833 (unsigned long)local);
834}
835
836void sta_info_stop(struct ieee80211_local *local)
837{
838 del_timer(&local->sta_cleanup);
839 sta_info_flush(local, NULL);
840}
841
842
843
844
845
846
847
848
849
850int sta_info_flush(struct ieee80211_local *local,
851 struct ieee80211_sub_if_data *sdata)
852{
853 struct sta_info *sta, *tmp;
854 int ret = 0;
855
856 might_sleep();
857
858 mutex_lock(&local->sta_mtx);
859 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
860 if (!sdata || sdata == sta->sdata) {
861 WARN_ON(__sta_info_destroy(sta));
862 ret++;
863 }
864 }
865 mutex_unlock(&local->sta_mtx);
866
867 return ret;
868}
869
870void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
871 unsigned long exp_time)
872{
873 struct ieee80211_local *local = sdata->local;
874 struct sta_info *sta, *tmp;
875
876 mutex_lock(&local->sta_mtx);
877
878 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
879 if (sdata != sta->sdata)
880 continue;
881
882 if (time_after(jiffies, sta->last_rx + exp_time)) {
883 ibss_dbg(sdata, "expiring inactive STA %pM\n",
884 sta->sta.addr);
885 WARN_ON(__sta_info_destroy(sta));
886 }
887 }
888
889 mutex_unlock(&local->sta_mtx);
890}
891
892struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
893 const u8 *addr,
894 const u8 *localaddr)
895{
896 struct sta_info *sta, *nxt;
897
898
899
900
901
902 for_each_sta_info(hw_to_local(hw), addr, sta, nxt) {
903 if (localaddr &&
904 !ether_addr_equal(sta->sdata->vif.addr, localaddr))
905 continue;
906 if (!sta->uploaded)
907 return NULL;
908 return &sta->sta;
909 }
910
911 return NULL;
912}
913EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
914
915struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
916 const u8 *addr)
917{
918 struct sta_info *sta;
919
920 if (!vif)
921 return NULL;
922
923 sta = sta_info_get_bss(vif_to_sdata(vif), addr);
924 if (!sta)
925 return NULL;
926
927 if (!sta->uploaded)
928 return NULL;
929
930 return &sta->sta;
931}
932EXPORT_SYMBOL(ieee80211_find_sta);
933
934static void clear_sta_ps_flags(void *_sta)
935{
936 struct sta_info *sta = _sta;
937 struct ieee80211_sub_if_data *sdata = sta->sdata;
938
939 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
940 if (test_and_clear_sta_flag(sta, WLAN_STA_PS_STA))
941 atomic_dec(&sdata->bss->num_sta_ps);
942}
943
944
945void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
946{
947 struct ieee80211_sub_if_data *sdata = sta->sdata;
948 struct ieee80211_local *local = sdata->local;
949 struct sk_buff_head pending;
950 int filtered = 0, buffered = 0, ac;
951 unsigned long flags;
952
953 clear_sta_flag(sta, WLAN_STA_SP);
954
955 BUILD_BUG_ON(BITS_TO_LONGS(STA_TID_NUM) > 1);
956 sta->driver_buffered_tids = 0;
957
958 if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
959 drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
960
961 skb_queue_head_init(&pending);
962
963
964 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
965 int count = skb_queue_len(&pending), tmp;
966
967 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
968 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
969 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
970 tmp = skb_queue_len(&pending);
971 filtered += tmp - count;
972 count = tmp;
973
974 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
975 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
976 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
977 tmp = skb_queue_len(&pending);
978 buffered += tmp - count;
979 }
980
981 ieee80211_add_pending_skbs_fn(local, &pending, clear_sta_ps_flags, sta);
982
983 local->total_ps_buffered -= buffered;
984
985 sta_info_recalc_tim(sta);
986
987 ps_dbg(sdata,
988 "STA %pM aid %d sending %d filtered/%d PS frames since STA not sleeping anymore\n",
989 sta->sta.addr, sta->sta.aid, filtered, buffered);
990}
991
992static void ieee80211_send_null_response(struct ieee80211_sub_if_data *sdata,
993 struct sta_info *sta, int tid,
994 enum ieee80211_frame_release_type reason)
995{
996 struct ieee80211_local *local = sdata->local;
997 struct ieee80211_qos_hdr *nullfunc;
998 struct sk_buff *skb;
999 int size = sizeof(*nullfunc);
1000 __le16 fc;
1001 bool qos = test_sta_flag(sta, WLAN_STA_WME);
1002 struct ieee80211_tx_info *info;
1003
1004 if (qos) {
1005 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1006 IEEE80211_STYPE_QOS_NULLFUNC |
1007 IEEE80211_FCTL_FROMDS);
1008 } else {
1009 size -= 2;
1010 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1011 IEEE80211_STYPE_NULLFUNC |
1012 IEEE80211_FCTL_FROMDS);
1013 }
1014
1015 skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
1016 if (!skb)
1017 return;
1018
1019 skb_reserve(skb, local->hw.extra_tx_headroom);
1020
1021 nullfunc = (void *) skb_put(skb, size);
1022 nullfunc->frame_control = fc;
1023 nullfunc->duration_id = 0;
1024 memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
1025 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
1026 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
1027
1028 skb->priority = tid;
1029 skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1030 if (qos) {
1031 nullfunc->qos_ctrl = cpu_to_le16(tid);
1032
1033 if (reason == IEEE80211_FRAME_RELEASE_UAPSD)
1034 nullfunc->qos_ctrl |=
1035 cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
1036 }
1037
1038 info = IEEE80211_SKB_CB(skb);
1039
1040
1041
1042
1043
1044
1045
1046 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
1047 IEEE80211_TX_STATUS_EOSP |
1048 IEEE80211_TX_CTL_REQ_TX_STATUS;
1049
1050 drv_allow_buffered_frames(local, sta, BIT(tid), 1, reason, false);
1051
1052 ieee80211_xmit(sdata, skb);
1053}
1054
1055static void
1056ieee80211_sta_ps_deliver_response(struct sta_info *sta,
1057 int n_frames, u8 ignored_acs,
1058 enum ieee80211_frame_release_type reason)
1059{
1060 struct ieee80211_sub_if_data *sdata = sta->sdata;
1061 struct ieee80211_local *local = sdata->local;
1062 bool found = false;
1063 bool more_data = false;
1064 int ac;
1065 unsigned long driver_release_tids = 0;
1066 struct sk_buff_head frames;
1067
1068
1069 set_sta_flag(sta, WLAN_STA_SP);
1070
1071 __skb_queue_head_init(&frames);
1072
1073
1074
1075
1076 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1077 unsigned long tids;
1078
1079 if (ignored_acs & BIT(ac))
1080 continue;
1081
1082 tids = ieee80211_tids_for_ac(ac);
1083
1084 if (!found) {
1085 driver_release_tids = sta->driver_buffered_tids & tids;
1086 if (driver_release_tids) {
1087 found = true;
1088 } else {
1089 struct sk_buff *skb;
1090
1091 while (n_frames > 0) {
1092 skb = skb_dequeue(&sta->tx_filtered[ac]);
1093 if (!skb) {
1094 skb = skb_dequeue(
1095 &sta->ps_tx_buf[ac]);
1096 if (skb)
1097 local->total_ps_buffered--;
1098 }
1099 if (!skb)
1100 break;
1101 n_frames--;
1102 found = true;
1103 __skb_queue_tail(&frames, skb);
1104 }
1105 }
1106
1107
1108
1109
1110
1111
1112 if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
1113 hweight16(driver_release_tids) > 1) {
1114 more_data = true;
1115 driver_release_tids =
1116 BIT(ffs(driver_release_tids) - 1);
1117 break;
1118 }
1119 }
1120
1121 if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1122 !skb_queue_empty(&sta->ps_tx_buf[ac])) {
1123 more_data = true;
1124 break;
1125 }
1126 }
1127
1128 if (!found) {
1129 int tid;
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147 tid = 7 - ((ffs(~ignored_acs) - 1) << 1);
1148
1149 ieee80211_send_null_response(sdata, sta, tid, reason);
1150 return;
1151 }
1152
1153 if (!driver_release_tids) {
1154 struct sk_buff_head pending;
1155 struct sk_buff *skb;
1156 int num = 0;
1157 u16 tids = 0;
1158
1159 skb_queue_head_init(&pending);
1160
1161 while ((skb = __skb_dequeue(&frames))) {
1162 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1163 struct ieee80211_hdr *hdr = (void *) skb->data;
1164 u8 *qoshdr = NULL;
1165
1166 num++;
1167
1168
1169
1170
1171
1172
1173 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
1174
1175
1176
1177
1178
1179 if (more_data || !skb_queue_empty(&frames))
1180 hdr->frame_control |=
1181 cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1182 else
1183 hdr->frame_control &=
1184 cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
1185
1186 if (ieee80211_is_data_qos(hdr->frame_control) ||
1187 ieee80211_is_qos_nullfunc(hdr->frame_control))
1188 qoshdr = ieee80211_get_qos_ctl(hdr);
1189
1190
1191 if (skb_queue_empty(&frames)) {
1192 if (reason == IEEE80211_FRAME_RELEASE_UAPSD &&
1193 qoshdr)
1194 *qoshdr |= IEEE80211_QOS_CTL_EOSP;
1195
1196 info->flags |= IEEE80211_TX_STATUS_EOSP |
1197 IEEE80211_TX_CTL_REQ_TX_STATUS;
1198 }
1199
1200 if (qoshdr)
1201 tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK);
1202 else
1203 tids |= BIT(0);
1204
1205 __skb_queue_tail(&pending, skb);
1206 }
1207
1208 drv_allow_buffered_frames(local, sta, tids, num,
1209 reason, more_data);
1210
1211 ieee80211_add_pending_skbs(local, &pending);
1212
1213 sta_info_recalc_tim(sta);
1214 } else {
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225 drv_release_buffered_frames(local, sta, driver_release_tids,
1226 n_frames, reason, more_data);
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236 }
1237}
1238
1239void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
1240{
1241 u8 ignore_for_response = sta->sta.uapsd_queues;
1242
1243
1244
1245
1246
1247
1248 if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
1249 ignore_for_response = 0;
1250
1251 ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
1252 IEEE80211_FRAME_RELEASE_PSPOLL);
1253}
1254
1255void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
1256{
1257 int n_frames = sta->sta.max_sp;
1258 u8 delivery_enabled = sta->sta.uapsd_queues;
1259
1260
1261
1262
1263
1264
1265
1266 if (!delivery_enabled)
1267 return;
1268
1269 switch (sta->sta.max_sp) {
1270 case 1:
1271 n_frames = 2;
1272 break;
1273 case 2:
1274 n_frames = 4;
1275 break;
1276 case 3:
1277 n_frames = 6;
1278 break;
1279 case 0:
1280
1281 n_frames = 8;
1282 break;
1283 }
1284
1285 ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
1286 IEEE80211_FRAME_RELEASE_UAPSD);
1287}
1288
1289void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
1290 struct ieee80211_sta *pubsta, bool block)
1291{
1292 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1293
1294 trace_api_sta_block_awake(sta->local, pubsta, block);
1295
1296 if (block)
1297 set_sta_flag(sta, WLAN_STA_PS_DRIVER);
1298 else if (test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1299 ieee80211_queue_work(hw, &sta->drv_unblock_wk);
1300}
1301EXPORT_SYMBOL(ieee80211_sta_block_awake);
1302
1303void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta)
1304{
1305 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1306 struct ieee80211_local *local = sta->local;
1307 struct sk_buff *skb;
1308 struct skb_eosp_msg_data *data;
1309
1310 trace_api_eosp(local, pubsta);
1311
1312 skb = alloc_skb(0, GFP_ATOMIC);
1313 if (!skb) {
1314
1315 clear_sta_flag(sta, WLAN_STA_SP);
1316 return;
1317 }
1318
1319 data = (void *)skb->cb;
1320 memcpy(data->sta, pubsta->addr, ETH_ALEN);
1321 memcpy(data->iface, sta->sdata->vif.addr, ETH_ALEN);
1322 skb->pkt_type = IEEE80211_EOSP_MSG;
1323 skb_queue_tail(&local->skb_queue, skb);
1324 tasklet_schedule(&local->tasklet);
1325}
1326EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe);
1327
1328void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
1329 u8 tid, bool buffered)
1330{
1331 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1332
1333 if (WARN_ON(tid >= STA_TID_NUM))
1334 return;
1335
1336 if (buffered)
1337 set_bit(tid, &sta->driver_buffered_tids);
1338 else
1339 clear_bit(tid, &sta->driver_buffered_tids);
1340
1341 sta_info_recalc_tim(sta);
1342}
1343EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1344
1345int sta_info_move_state(struct sta_info *sta,
1346 enum ieee80211_sta_state new_state)
1347{
1348 might_sleep();
1349
1350 if (sta->sta_state == new_state)
1351 return 0;
1352
1353
1354
1355 switch (new_state) {
1356 case IEEE80211_STA_NONE:
1357 if (sta->sta_state != IEEE80211_STA_AUTH)
1358 return -EINVAL;
1359 break;
1360 case IEEE80211_STA_AUTH:
1361 if (sta->sta_state != IEEE80211_STA_NONE &&
1362 sta->sta_state != IEEE80211_STA_ASSOC)
1363 return -EINVAL;
1364 break;
1365 case IEEE80211_STA_ASSOC:
1366 if (sta->sta_state != IEEE80211_STA_AUTH &&
1367 sta->sta_state != IEEE80211_STA_AUTHORIZED)
1368 return -EINVAL;
1369 break;
1370 case IEEE80211_STA_AUTHORIZED:
1371 if (sta->sta_state != IEEE80211_STA_ASSOC)
1372 return -EINVAL;
1373 break;
1374 default:
1375 WARN(1, "invalid state %d", new_state);
1376 return -EINVAL;
1377 }
1378
1379 sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
1380 sta->sta.addr, new_state);
1381
1382
1383
1384
1385
1386 if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
1387 int err = drv_sta_state(sta->local, sta->sdata, sta,
1388 sta->sta_state, new_state);
1389 if (err)
1390 return err;
1391 }
1392
1393
1394
1395 switch (new_state) {
1396 case IEEE80211_STA_NONE:
1397 if (sta->sta_state == IEEE80211_STA_AUTH)
1398 clear_bit(WLAN_STA_AUTH, &sta->_flags);
1399 break;
1400 case IEEE80211_STA_AUTH:
1401 if (sta->sta_state == IEEE80211_STA_NONE)
1402 set_bit(WLAN_STA_AUTH, &sta->_flags);
1403 else if (sta->sta_state == IEEE80211_STA_ASSOC)
1404 clear_bit(WLAN_STA_ASSOC, &sta->_flags);
1405 break;
1406 case IEEE80211_STA_ASSOC:
1407 if (sta->sta_state == IEEE80211_STA_AUTH) {
1408 set_bit(WLAN_STA_ASSOC, &sta->_flags);
1409 } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
1410 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1411 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1412 !sta->sdata->u.vlan.sta))
1413 atomic_dec(&sta->sdata->bss->num_mcast_sta);
1414 clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1415 }
1416 break;
1417 case IEEE80211_STA_AUTHORIZED:
1418 if (sta->sta_state == IEEE80211_STA_ASSOC) {
1419 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1420 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1421 !sta->sdata->u.vlan.sta))
1422 atomic_inc(&sta->sdata->bss->num_mcast_sta);
1423 set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1424 }
1425 break;
1426 default:
1427 break;
1428 }
1429
1430 sta->sta_state = new_state;
1431
1432 return 0;
1433}
1434