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 __skb_queue_purge(&sta->ps_tx_buf[ac]);
734 __skb_queue_purge(&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 __skb_queue_purge(&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
952 clear_sta_flag(sta, WLAN_STA_SP);
953
954 BUILD_BUG_ON(BITS_TO_LONGS(STA_TID_NUM) > 1);
955 sta->driver_buffered_tids = 0;
956
957 if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
958 drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
959
960 skb_queue_head_init(&pending);
961
962
963 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
964 int count = skb_queue_len(&pending), tmp;
965
966 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
967 tmp = skb_queue_len(&pending);
968 filtered += tmp - count;
969 count = tmp;
970
971 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
972 tmp = skb_queue_len(&pending);
973 buffered += tmp - count;
974 }
975
976 ieee80211_add_pending_skbs_fn(local, &pending, clear_sta_ps_flags, sta);
977
978 local->total_ps_buffered -= buffered;
979
980 sta_info_recalc_tim(sta);
981
982 ps_dbg(sdata,
983 "STA %pM aid %d sending %d filtered/%d PS frames since STA not sleeping anymore\n",
984 sta->sta.addr, sta->sta.aid, filtered, buffered);
985}
986
987static void ieee80211_send_null_response(struct ieee80211_sub_if_data *sdata,
988 struct sta_info *sta, int tid,
989 enum ieee80211_frame_release_type reason)
990{
991 struct ieee80211_local *local = sdata->local;
992 struct ieee80211_qos_hdr *nullfunc;
993 struct sk_buff *skb;
994 int size = sizeof(*nullfunc);
995 __le16 fc;
996 bool qos = test_sta_flag(sta, WLAN_STA_WME);
997 struct ieee80211_tx_info *info;
998
999 if (qos) {
1000 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1001 IEEE80211_STYPE_QOS_NULLFUNC |
1002 IEEE80211_FCTL_FROMDS);
1003 } else {
1004 size -= 2;
1005 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1006 IEEE80211_STYPE_NULLFUNC |
1007 IEEE80211_FCTL_FROMDS);
1008 }
1009
1010 skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
1011 if (!skb)
1012 return;
1013
1014 skb_reserve(skb, local->hw.extra_tx_headroom);
1015
1016 nullfunc = (void *) skb_put(skb, size);
1017 nullfunc->frame_control = fc;
1018 nullfunc->duration_id = 0;
1019 memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
1020 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
1021 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
1022
1023 skb->priority = tid;
1024 skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1025 if (qos) {
1026 nullfunc->qos_ctrl = cpu_to_le16(tid);
1027
1028 if (reason == IEEE80211_FRAME_RELEASE_UAPSD)
1029 nullfunc->qos_ctrl |=
1030 cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
1031 }
1032
1033 info = IEEE80211_SKB_CB(skb);
1034
1035
1036
1037
1038
1039
1040
1041 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
1042 IEEE80211_TX_STATUS_EOSP |
1043 IEEE80211_TX_CTL_REQ_TX_STATUS;
1044
1045 drv_allow_buffered_frames(local, sta, BIT(tid), 1, reason, false);
1046
1047 ieee80211_xmit(sdata, skb);
1048}
1049
1050static void
1051ieee80211_sta_ps_deliver_response(struct sta_info *sta,
1052 int n_frames, u8 ignored_acs,
1053 enum ieee80211_frame_release_type reason)
1054{
1055 struct ieee80211_sub_if_data *sdata = sta->sdata;
1056 struct ieee80211_local *local = sdata->local;
1057 bool found = false;
1058 bool more_data = false;
1059 int ac;
1060 unsigned long driver_release_tids = 0;
1061 struct sk_buff_head frames;
1062
1063
1064 set_sta_flag(sta, WLAN_STA_SP);
1065
1066 __skb_queue_head_init(&frames);
1067
1068
1069
1070
1071 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1072 unsigned long tids;
1073
1074 if (ignored_acs & BIT(ac))
1075 continue;
1076
1077 tids = ieee80211_tids_for_ac(ac);
1078
1079 if (!found) {
1080 driver_release_tids = sta->driver_buffered_tids & tids;
1081 if (driver_release_tids) {
1082 found = true;
1083 } else {
1084 struct sk_buff *skb;
1085
1086 while (n_frames > 0) {
1087 skb = skb_dequeue(&sta->tx_filtered[ac]);
1088 if (!skb) {
1089 skb = skb_dequeue(
1090 &sta->ps_tx_buf[ac]);
1091 if (skb)
1092 local->total_ps_buffered--;
1093 }
1094 if (!skb)
1095 break;
1096 n_frames--;
1097 found = true;
1098 __skb_queue_tail(&frames, skb);
1099 }
1100 }
1101
1102
1103
1104
1105
1106
1107 if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
1108 hweight16(driver_release_tids) > 1) {
1109 more_data = true;
1110 driver_release_tids =
1111 BIT(ffs(driver_release_tids) - 1);
1112 break;
1113 }
1114 }
1115
1116 if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1117 !skb_queue_empty(&sta->ps_tx_buf[ac])) {
1118 more_data = true;
1119 break;
1120 }
1121 }
1122
1123 if (!found) {
1124 int tid;
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142 tid = 7 - ((ffs(~ignored_acs) - 1) << 1);
1143
1144 ieee80211_send_null_response(sdata, sta, tid, reason);
1145 return;
1146 }
1147
1148 if (!driver_release_tids) {
1149 struct sk_buff_head pending;
1150 struct sk_buff *skb;
1151 int num = 0;
1152 u16 tids = 0;
1153
1154 skb_queue_head_init(&pending);
1155
1156 while ((skb = __skb_dequeue(&frames))) {
1157 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1158 struct ieee80211_hdr *hdr = (void *) skb->data;
1159 u8 *qoshdr = NULL;
1160
1161 num++;
1162
1163
1164
1165
1166
1167
1168 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
1169
1170
1171
1172
1173
1174 if (more_data || !skb_queue_empty(&frames))
1175 hdr->frame_control |=
1176 cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1177 else
1178 hdr->frame_control &=
1179 cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
1180
1181 if (ieee80211_is_data_qos(hdr->frame_control) ||
1182 ieee80211_is_qos_nullfunc(hdr->frame_control))
1183 qoshdr = ieee80211_get_qos_ctl(hdr);
1184
1185
1186 if (skb_queue_empty(&frames)) {
1187 if (reason == IEEE80211_FRAME_RELEASE_UAPSD &&
1188 qoshdr)
1189 *qoshdr |= IEEE80211_QOS_CTL_EOSP;
1190
1191 info->flags |= IEEE80211_TX_STATUS_EOSP |
1192 IEEE80211_TX_CTL_REQ_TX_STATUS;
1193 }
1194
1195 if (qoshdr)
1196 tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK);
1197 else
1198 tids |= BIT(0);
1199
1200 __skb_queue_tail(&pending, skb);
1201 }
1202
1203 drv_allow_buffered_frames(local, sta, tids, num,
1204 reason, more_data);
1205
1206 ieee80211_add_pending_skbs(local, &pending);
1207
1208 sta_info_recalc_tim(sta);
1209 } else {
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220 drv_release_buffered_frames(local, sta, driver_release_tids,
1221 n_frames, reason, more_data);
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231 }
1232}
1233
1234void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
1235{
1236 u8 ignore_for_response = sta->sta.uapsd_queues;
1237
1238
1239
1240
1241
1242
1243 if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
1244 ignore_for_response = 0;
1245
1246 ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
1247 IEEE80211_FRAME_RELEASE_PSPOLL);
1248}
1249
1250void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
1251{
1252 int n_frames = sta->sta.max_sp;
1253 u8 delivery_enabled = sta->sta.uapsd_queues;
1254
1255
1256
1257
1258
1259
1260
1261 if (!delivery_enabled)
1262 return;
1263
1264 switch (sta->sta.max_sp) {
1265 case 1:
1266 n_frames = 2;
1267 break;
1268 case 2:
1269 n_frames = 4;
1270 break;
1271 case 3:
1272 n_frames = 6;
1273 break;
1274 case 0:
1275
1276 n_frames = 8;
1277 break;
1278 }
1279
1280 ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
1281 IEEE80211_FRAME_RELEASE_UAPSD);
1282}
1283
1284void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
1285 struct ieee80211_sta *pubsta, bool block)
1286{
1287 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1288
1289 trace_api_sta_block_awake(sta->local, pubsta, block);
1290
1291 if (block)
1292 set_sta_flag(sta, WLAN_STA_PS_DRIVER);
1293 else if (test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1294 ieee80211_queue_work(hw, &sta->drv_unblock_wk);
1295}
1296EXPORT_SYMBOL(ieee80211_sta_block_awake);
1297
1298void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta)
1299{
1300 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1301 struct ieee80211_local *local = sta->local;
1302 struct sk_buff *skb;
1303 struct skb_eosp_msg_data *data;
1304
1305 trace_api_eosp(local, pubsta);
1306
1307 skb = alloc_skb(0, GFP_ATOMIC);
1308 if (!skb) {
1309
1310 clear_sta_flag(sta, WLAN_STA_SP);
1311 return;
1312 }
1313
1314 data = (void *)skb->cb;
1315 memcpy(data->sta, pubsta->addr, ETH_ALEN);
1316 memcpy(data->iface, sta->sdata->vif.addr, ETH_ALEN);
1317 skb->pkt_type = IEEE80211_EOSP_MSG;
1318 skb_queue_tail(&local->skb_queue, skb);
1319 tasklet_schedule(&local->tasklet);
1320}
1321EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe);
1322
1323void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
1324 u8 tid, bool buffered)
1325{
1326 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1327
1328 if (WARN_ON(tid >= STA_TID_NUM))
1329 return;
1330
1331 if (buffered)
1332 set_bit(tid, &sta->driver_buffered_tids);
1333 else
1334 clear_bit(tid, &sta->driver_buffered_tids);
1335
1336 sta_info_recalc_tim(sta);
1337}
1338EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1339
1340int sta_info_move_state(struct sta_info *sta,
1341 enum ieee80211_sta_state new_state)
1342{
1343 might_sleep();
1344
1345 if (sta->sta_state == new_state)
1346 return 0;
1347
1348
1349
1350 switch (new_state) {
1351 case IEEE80211_STA_NONE:
1352 if (sta->sta_state != IEEE80211_STA_AUTH)
1353 return -EINVAL;
1354 break;
1355 case IEEE80211_STA_AUTH:
1356 if (sta->sta_state != IEEE80211_STA_NONE &&
1357 sta->sta_state != IEEE80211_STA_ASSOC)
1358 return -EINVAL;
1359 break;
1360 case IEEE80211_STA_ASSOC:
1361 if (sta->sta_state != IEEE80211_STA_AUTH &&
1362 sta->sta_state != IEEE80211_STA_AUTHORIZED)
1363 return -EINVAL;
1364 break;
1365 case IEEE80211_STA_AUTHORIZED:
1366 if (sta->sta_state != IEEE80211_STA_ASSOC)
1367 return -EINVAL;
1368 break;
1369 default:
1370 WARN(1, "invalid state %d", new_state);
1371 return -EINVAL;
1372 }
1373
1374 sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
1375 sta->sta.addr, new_state);
1376
1377
1378
1379
1380
1381 if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
1382 int err = drv_sta_state(sta->local, sta->sdata, sta,
1383 sta->sta_state, new_state);
1384 if (err)
1385 return err;
1386 }
1387
1388
1389
1390 switch (new_state) {
1391 case IEEE80211_STA_NONE:
1392 if (sta->sta_state == IEEE80211_STA_AUTH)
1393 clear_bit(WLAN_STA_AUTH, &sta->_flags);
1394 break;
1395 case IEEE80211_STA_AUTH:
1396 if (sta->sta_state == IEEE80211_STA_NONE)
1397 set_bit(WLAN_STA_AUTH, &sta->_flags);
1398 else if (sta->sta_state == IEEE80211_STA_ASSOC)
1399 clear_bit(WLAN_STA_ASSOC, &sta->_flags);
1400 break;
1401 case IEEE80211_STA_ASSOC:
1402 if (sta->sta_state == IEEE80211_STA_AUTH) {
1403 set_bit(WLAN_STA_ASSOC, &sta->_flags);
1404 } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
1405 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1406 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1407 !sta->sdata->u.vlan.sta))
1408 atomic_dec(&sta->sdata->bss->num_mcast_sta);
1409 clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1410 }
1411 break;
1412 case IEEE80211_STA_AUTHORIZED:
1413 if (sta->sta_state == IEEE80211_STA_ASSOC) {
1414 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1415 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1416 !sta->sdata->u.vlan.sta))
1417 atomic_inc(&sta->sdata->bss->num_mcast_sta);
1418 set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1419 }
1420 break;
1421 default:
1422 break;
1423 }
1424
1425 sta->sta_state = new_state;
1426
1427 return 0;
1428}
1429