1
2
3
4
5
6
7
8
9#ifndef STA_INFO_H
10#define STA_INFO_H
11
12#include <linux/list.h>
13#include <linux/types.h>
14#include <linux/if_ether.h>
15#include <linux/workqueue.h>
16#include <linux/average.h>
17#include <linux/bitfield.h>
18#include <linux/etherdevice.h>
19#include <linux/rhashtable.h>
20#include <linux/u64_stats_sync.h>
21#include "key.h"
22
23
24
25
26
27
28
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
67
68
69
70
71
72
73
74
75
76
77
78enum ieee80211_sta_info_flags {
79 WLAN_STA_AUTH,
80 WLAN_STA_ASSOC,
81 WLAN_STA_PS_STA,
82 WLAN_STA_AUTHORIZED,
83 WLAN_STA_SHORT_PREAMBLE,
84 WLAN_STA_WDS,
85 WLAN_STA_CLEAR_PS_FILT,
86 WLAN_STA_MFP,
87 WLAN_STA_BLOCK_BA,
88 WLAN_STA_PS_DRIVER,
89 WLAN_STA_PSPOLL,
90 WLAN_STA_TDLS_PEER,
91 WLAN_STA_TDLS_PEER_AUTH,
92 WLAN_STA_TDLS_INITIATOR,
93 WLAN_STA_TDLS_CHAN_SWITCH,
94 WLAN_STA_TDLS_OFF_CHANNEL,
95 WLAN_STA_TDLS_WIDER_BW,
96 WLAN_STA_UAPSD,
97 WLAN_STA_SP,
98 WLAN_STA_4ADDR_EVENT,
99 WLAN_STA_INSERTED,
100 WLAN_STA_RATE_CONTROL,
101 WLAN_STA_TOFFSET_KNOWN,
102 WLAN_STA_MPSP_OWNER,
103 WLAN_STA_MPSP_RECIPIENT,
104 WLAN_STA_PS_DELIVER,
105 WLAN_STA_USES_ENCRYPTION,
106 WLAN_STA_DECAP_OFFLOAD,
107
108 NUM_WLAN_STA_FLAGS,
109};
110
111#define ADDBA_RESP_INTERVAL HZ
112#define HT_AGG_MAX_RETRIES 15
113#define HT_AGG_BURST_RETRIES 3
114#define HT_AGG_RETRIES_PERIOD (15 * HZ)
115
116#define HT_AGG_STATE_DRV_READY 0
117#define HT_AGG_STATE_RESPONSE_RECEIVED 1
118#define HT_AGG_STATE_OPERATIONAL 2
119#define HT_AGG_STATE_STOPPING 3
120#define HT_AGG_STATE_WANT_START 4
121#define HT_AGG_STATE_WANT_STOP 5
122#define HT_AGG_STATE_START_CB 6
123#define HT_AGG_STATE_STOP_CB 7
124#define HT_AGG_STATE_SENT_ADDBA 8
125
126DECLARE_EWMA(avg_signal, 10, 8)
127enum ieee80211_agg_stop_reason {
128 AGG_STOP_DECLINED,
129 AGG_STOP_LOCAL_REQUEST,
130 AGG_STOP_PEER_REQUEST,
131 AGG_STOP_DESTROY_STA,
132};
133
134
135#define AIRTIME_USE_TX BIT(0)
136#define AIRTIME_USE_RX BIT(1)
137
138
139struct airtime_info {
140 u64 rx_airtime;
141 u64 tx_airtime;
142 u64 v_t;
143 u64 last_scheduled;
144 struct list_head list;
145 atomic_t aql_tx_pending;
146 u32 aql_limit_low;
147 u32 aql_limit_high;
148 u32 weight_reciprocal;
149 u16 weight;
150};
151
152void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
153 struct sta_info *sta, u8 ac,
154 u16 tx_airtime, bool tx_completed);
155void ieee80211_register_airtime(struct ieee80211_txq *txq,
156 u32 tx_airtime, u32 rx_airtime);
157
158struct sta_info;
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189struct tid_ampdu_tx {
190 struct rcu_head rcu_head;
191 struct timer_list session_timer;
192 struct timer_list addba_resp_timer;
193 struct sk_buff_head pending;
194 struct sta_info *sta;
195 unsigned long state;
196 unsigned long last_tx;
197 u16 timeout;
198 u8 dialog_token;
199 u8 stop_initiator;
200 bool tx_stop;
201 u16 buf_size;
202
203 u16 failed_bar_ssn;
204 bool bar_pending;
205 bool amsdu;
206 u8 tid;
207};
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242struct tid_ampdu_rx {
243 struct rcu_head rcu_head;
244 spinlock_t reorder_lock;
245 u64 reorder_buf_filtered;
246 struct sk_buff_head *reorder_buf;
247 unsigned long *reorder_time;
248 struct sta_info *sta;
249 struct timer_list session_timer;
250 struct timer_list reorder_timer;
251 unsigned long last_rx;
252 u16 head_seq_num;
253 u16 stored_mpdu_num;
254 u16 ssn;
255 u16 buf_size;
256 u16 timeout;
257 u8 tid;
258 u8 auto_seq:1,
259 removed:1,
260 started:1;
261};
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287struct sta_ampdu_mlme {
288 struct mutex mtx;
289
290 struct tid_ampdu_rx __rcu *tid_rx[IEEE80211_NUM_TIDS];
291 u8 tid_rx_token[IEEE80211_NUM_TIDS];
292 unsigned long tid_rx_timer_expired[BITS_TO_LONGS(IEEE80211_NUM_TIDS)];
293 unsigned long tid_rx_stop_requested[BITS_TO_LONGS(IEEE80211_NUM_TIDS)];
294 unsigned long tid_rx_manage_offl[BITS_TO_LONGS(2 * IEEE80211_NUM_TIDS)];
295 unsigned long agg_session_valid[BITS_TO_LONGS(IEEE80211_NUM_TIDS)];
296 unsigned long unexpected_agg[BITS_TO_LONGS(IEEE80211_NUM_TIDS)];
297
298 struct work_struct work;
299 struct tid_ampdu_tx __rcu *tid_tx[IEEE80211_NUM_TIDS];
300 struct tid_ampdu_tx *tid_start_tx[IEEE80211_NUM_TIDS];
301 unsigned long last_addba_req_time[IEEE80211_NUM_TIDS];
302 u8 addba_req_num[IEEE80211_NUM_TIDS];
303 u8 dialog_token_allocator;
304};
305
306
307
308#define IEEE80211_TID_UNRESERVED 0xff
309
310#define IEEE80211_FAST_XMIT_MAX_IV 18
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327struct ieee80211_fast_tx {
328 struct ieee80211_key *key;
329 u8 hdr_len;
330 u8 sa_offs, da_offs, pn_offs;
331 u8 band;
332 u8 hdr[30 + 2 + IEEE80211_FAST_XMIT_MAX_IV +
333 sizeof(rfc1042_header)] __aligned(2);
334
335 struct rcu_head rcu_head;
336};
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354struct ieee80211_fast_rx {
355 struct net_device *dev;
356 enum nl80211_iftype vif_type;
357 u8 vif_addr[ETH_ALEN] __aligned(2);
358 u8 rfc1042_hdr[6] __aligned(2);
359 __be16 control_port_protocol;
360 __le16 expected_ds_bits;
361 u8 icv_len;
362 u8 key:1,
363 internal_forward:1,
364 uses_rss:1;
365 u8 da_offs, sa_offs;
366
367 struct rcu_head rcu_head;
368};
369
370
371DECLARE_EWMA(mesh_fail_avg, 20, 8)
372DECLARE_EWMA(mesh_tx_rate_avg, 8, 16)
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399struct mesh_sta {
400 struct timer_list plink_timer;
401 struct sta_info *plink_sta;
402
403 s64 t_offset;
404 s64 t_offset_setpoint;
405
406 spinlock_t plink_lock;
407 u16 llid;
408 u16 plid;
409 u16 aid;
410 u16 reason;
411 u8 plink_retries;
412
413 bool processed_beacon;
414 bool connected_to_gate;
415 bool connected_to_as;
416
417 enum nl80211_plink_state plink_state;
418 u32 plink_timeout;
419
420
421 enum nl80211_mesh_power_mode local_pm;
422 enum nl80211_mesh_power_mode peer_pm;
423 enum nl80211_mesh_power_mode nonpeer_pm;
424
425
426 struct ewma_mesh_fail_avg fail_avg;
427
428 struct ewma_mesh_tx_rate_avg tx_rate_avg;
429};
430
431DECLARE_EWMA(signal, 10, 8)
432
433struct ieee80211_sta_rx_stats {
434 unsigned long packets;
435 unsigned long last_rx;
436 unsigned long num_duplicates;
437 unsigned long fragments;
438 unsigned long dropped;
439 int last_signal;
440 u8 chains;
441 s8 chain_signal_last[IEEE80211_MAX_CHAINS];
442 u32 last_rate;
443 struct u64_stats_sync syncp;
444 u64 bytes;
445 u64 msdu[IEEE80211_NUM_TIDS + 1];
446};
447
448
449
450
451
452
453
454
455
456#define IEEE80211_FRAGMENT_MAX 4
457
458struct ieee80211_fragment_entry {
459 struct sk_buff_head skb_list;
460 unsigned long first_frag_time;
461 u16 seq;
462 u16 extra_len;
463 u16 last_frag;
464 u8 rx_queue;
465 u8 check_sequential_pn:1,
466 is_protected:1;
467 u8 last_pn[6];
468 unsigned int key_color;
469};
470
471struct ieee80211_fragment_cache {
472 struct ieee80211_fragment_entry entries[IEEE80211_FRAGMENT_MAX];
473 unsigned int next;
474};
475
476
477
478
479
480
481
482#define STA_SLOW_THRESHOLD 6000
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570struct sta_info {
571
572 struct list_head list, free_list;
573 struct rcu_head rcu_head;
574 struct rhlist_head hash_node;
575 u8 addr[ETH_ALEN];
576 struct ieee80211_local *local;
577 struct ieee80211_sub_if_data *sdata;
578 struct ieee80211_key __rcu *gtk[NUM_DEFAULT_KEYS +
579 NUM_DEFAULT_MGMT_KEYS +
580 NUM_DEFAULT_BEACON_KEYS];
581 struct ieee80211_key __rcu *ptk[NUM_DEFAULT_KEYS];
582 u8 ptk_idx;
583 struct rate_control_ref *rate_ctrl;
584 void *rate_ctrl_priv;
585 spinlock_t rate_ctrl_lock;
586 spinlock_t lock;
587
588 struct ieee80211_fast_tx __rcu *fast_tx;
589 struct ieee80211_fast_rx __rcu *fast_rx;
590 struct ieee80211_sta_rx_stats __percpu *pcpu_rx_stats;
591
592#ifdef CONFIG_MAC80211_MESH
593 struct mesh_sta *mesh;
594#endif
595
596 struct work_struct drv_deliver_wk;
597
598 u16 listen_interval;
599
600 bool dead;
601 bool removed;
602
603 bool uploaded;
604
605 enum ieee80211_sta_state sta_state;
606
607
608 unsigned long _flags;
609
610
611 spinlock_t ps_lock;
612 struct sk_buff_head ps_tx_buf[IEEE80211_NUM_ACS];
613 struct sk_buff_head tx_filtered[IEEE80211_NUM_ACS];
614 unsigned long driver_buffered_tids;
615 unsigned long txq_buffered_tids;
616
617 u64 assoc_at;
618 long last_connected;
619
620
621 struct ieee80211_sta_rx_stats rx_stats;
622 struct {
623 struct ewma_signal signal;
624 struct ewma_signal chain_signal[IEEE80211_MAX_CHAINS];
625 } rx_stats_avg;
626
627
628 __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1];
629
630
631 struct {
632 unsigned long filtered;
633 unsigned long retry_failed, retry_count;
634 unsigned int lost_packets;
635 unsigned long last_pkt_time;
636 u64 msdu_retries[IEEE80211_NUM_TIDS + 1];
637 u64 msdu_failed[IEEE80211_NUM_TIDS + 1];
638 unsigned long last_ack;
639 s8 last_ack_signal;
640 bool ack_signal_filled;
641 struct ewma_avg_signal avg_ack_signal;
642 } status_stats;
643
644
645 struct {
646 u64 packets[IEEE80211_NUM_ACS];
647 u64 bytes[IEEE80211_NUM_ACS];
648 struct ieee80211_tx_rate last_rate;
649 struct rate_info last_rate_info;
650 u64 msdu[IEEE80211_NUM_TIDS + 1];
651 } tx_stats;
652 u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
653
654 struct airtime_info airtime[IEEE80211_NUM_ACS];
655
656
657
658
659 struct sta_ampdu_mlme ampdu_mlme;
660
661#ifdef CONFIG_MAC80211_DEBUGFS
662 struct dentry *debugfs_dir;
663#endif
664
665 enum ieee80211_sta_rx_bandwidth cur_max_bandwidth;
666
667 enum ieee80211_smps_mode known_smps_mode;
668 const struct ieee80211_cipher_scheme *cipher_scheme;
669
670 struct codel_params cparams;
671
672 u8 reserved_tid;
673
674 struct cfg80211_chan_def tdls_chandef;
675
676 struct ieee80211_fragment_cache frags;
677
678
679 struct ieee80211_sta sta;
680};
681
682static inline enum nl80211_plink_state sta_plink_state(struct sta_info *sta)
683{
684#ifdef CONFIG_MAC80211_MESH
685 return sta->mesh->plink_state;
686#endif
687 return NL80211_PLINK_LISTEN;
688}
689
690static inline void set_sta_flag(struct sta_info *sta,
691 enum ieee80211_sta_info_flags flag)
692{
693 WARN_ON(flag == WLAN_STA_AUTH ||
694 flag == WLAN_STA_ASSOC ||
695 flag == WLAN_STA_AUTHORIZED);
696 set_bit(flag, &sta->_flags);
697}
698
699static inline void clear_sta_flag(struct sta_info *sta,
700 enum ieee80211_sta_info_flags flag)
701{
702 WARN_ON(flag == WLAN_STA_AUTH ||
703 flag == WLAN_STA_ASSOC ||
704 flag == WLAN_STA_AUTHORIZED);
705 clear_bit(flag, &sta->_flags);
706}
707
708static inline int test_sta_flag(struct sta_info *sta,
709 enum ieee80211_sta_info_flags flag)
710{
711 return test_bit(flag, &sta->_flags);
712}
713
714static inline int test_and_clear_sta_flag(struct sta_info *sta,
715 enum ieee80211_sta_info_flags flag)
716{
717 WARN_ON(flag == WLAN_STA_AUTH ||
718 flag == WLAN_STA_ASSOC ||
719 flag == WLAN_STA_AUTHORIZED);
720 return test_and_clear_bit(flag, &sta->_flags);
721}
722
723static inline int test_and_set_sta_flag(struct sta_info *sta,
724 enum ieee80211_sta_info_flags flag)
725{
726 WARN_ON(flag == WLAN_STA_AUTH ||
727 flag == WLAN_STA_ASSOC ||
728 flag == WLAN_STA_AUTHORIZED);
729 return test_and_set_bit(flag, &sta->_flags);
730}
731
732int sta_info_move_state(struct sta_info *sta,
733 enum ieee80211_sta_state new_state);
734
735static inline void sta_info_pre_move_state(struct sta_info *sta,
736 enum ieee80211_sta_state new_state)
737{
738 int ret;
739
740 WARN_ON_ONCE(test_sta_flag(sta, WLAN_STA_INSERTED));
741
742 ret = sta_info_move_state(sta, new_state);
743 WARN_ON_ONCE(ret);
744}
745
746
747void ieee80211_assign_tid_tx(struct sta_info *sta, int tid,
748 struct tid_ampdu_tx *tid_tx);
749
750static inline struct tid_ampdu_tx *
751rcu_dereference_protected_tid_tx(struct sta_info *sta, int tid)
752{
753 return rcu_dereference_protected(sta->ampdu_mlme.tid_tx[tid],
754 lockdep_is_held(&sta->lock) ||
755 lockdep_is_held(&sta->ampdu_mlme.mtx));
756}
757
758
759#define STA_MAX_TX_BUFFER 64
760
761
762
763#define STA_TX_BUFFER_EXPIRE (10 * HZ)
764
765
766
767#define STA_INFO_CLEANUP_INTERVAL (10 * HZ)
768
769struct rhlist_head *sta_info_hash_lookup(struct ieee80211_local *local,
770 const u8 *addr);
771
772
773
774
775struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
776 const u8 *addr);
777
778struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
779 const u8 *addr);
780
781
782struct sta_info *sta_info_get_by_addrs(struct ieee80211_local *local,
783 const u8 *sta_addr, const u8 *vif_addr);
784
785#define for_each_sta_info(local, _addr, _sta, _tmp) \
786 rhl_for_each_entry_rcu(_sta, _tmp, \
787 sta_info_hash_lookup(local, _addr), hash_node)
788
789
790
791
792struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
793 int idx);
794
795
796
797
798struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
799 const u8 *addr, gfp_t gfp);
800
801void sta_info_free(struct ieee80211_local *local, struct sta_info *sta);
802
803
804
805
806
807
808
809
810
811int sta_info_insert(struct sta_info *sta);
812int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU);
813
814int __must_check __sta_info_destroy(struct sta_info *sta);
815int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata,
816 const u8 *addr);
817int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
818 const u8 *addr);
819
820void sta_info_recalc_tim(struct sta_info *sta);
821
822int sta_info_init(struct ieee80211_local *local);
823void sta_info_stop(struct ieee80211_local *local);
824
825
826
827
828
829
830
831
832
833int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans);
834
835
836
837
838
839
840
841
842static inline int sta_info_flush(struct ieee80211_sub_if_data *sdata)
843{
844 return __sta_info_flush(sdata, false);
845}
846
847void sta_set_rate_info_tx(struct sta_info *sta,
848 const struct ieee80211_tx_rate *rate,
849 struct rate_info *rinfo);
850void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
851 bool tidstats);
852
853u32 sta_get_expected_throughput(struct sta_info *sta);
854
855void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
856 unsigned long exp_time);
857u8 sta_info_tx_streams(struct sta_info *sta);
858
859void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta);
860void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta);
861void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta);
862
863unsigned long ieee80211_sta_last_active(struct sta_info *sta);
864
865enum sta_stats_type {
866 STA_STATS_RATE_TYPE_INVALID = 0,
867 STA_STATS_RATE_TYPE_LEGACY,
868 STA_STATS_RATE_TYPE_HT,
869 STA_STATS_RATE_TYPE_VHT,
870 STA_STATS_RATE_TYPE_HE,
871 STA_STATS_RATE_TYPE_S1G,
872};
873
874#define STA_STATS_FIELD_HT_MCS GENMASK( 7, 0)
875#define STA_STATS_FIELD_LEGACY_IDX GENMASK( 3, 0)
876#define STA_STATS_FIELD_LEGACY_BAND GENMASK( 7, 4)
877#define STA_STATS_FIELD_VHT_MCS GENMASK( 3, 0)
878#define STA_STATS_FIELD_VHT_NSS GENMASK( 7, 4)
879#define STA_STATS_FIELD_HE_MCS GENMASK( 3, 0)
880#define STA_STATS_FIELD_HE_NSS GENMASK( 7, 4)
881#define STA_STATS_FIELD_BW GENMASK(11, 8)
882#define STA_STATS_FIELD_SGI GENMASK(12, 12)
883#define STA_STATS_FIELD_TYPE GENMASK(15, 13)
884#define STA_STATS_FIELD_HE_RU GENMASK(18, 16)
885#define STA_STATS_FIELD_HE_GI GENMASK(20, 19)
886#define STA_STATS_FIELD_HE_DCM GENMASK(21, 21)
887
888#define STA_STATS_FIELD(_n, _v) FIELD_PREP(STA_STATS_FIELD_ ## _n, _v)
889#define STA_STATS_GET(_n, _v) FIELD_GET(STA_STATS_FIELD_ ## _n, _v)
890
891#define STA_STATS_RATE_INVALID 0
892
893static inline u32 sta_stats_encode_rate(struct ieee80211_rx_status *s)
894{
895 u32 r;
896
897 r = STA_STATS_FIELD(BW, s->bw);
898
899 if (s->enc_flags & RX_ENC_FLAG_SHORT_GI)
900 r |= STA_STATS_FIELD(SGI, 1);
901
902 switch (s->encoding) {
903 case RX_ENC_VHT:
904 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_VHT);
905 r |= STA_STATS_FIELD(VHT_NSS, s->nss);
906 r |= STA_STATS_FIELD(VHT_MCS, s->rate_idx);
907 break;
908 case RX_ENC_HT:
909 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_HT);
910 r |= STA_STATS_FIELD(HT_MCS, s->rate_idx);
911 break;
912 case RX_ENC_LEGACY:
913 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_LEGACY);
914 r |= STA_STATS_FIELD(LEGACY_BAND, s->band);
915 r |= STA_STATS_FIELD(LEGACY_IDX, s->rate_idx);
916 break;
917 case RX_ENC_HE:
918 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_HE);
919 r |= STA_STATS_FIELD(HE_NSS, s->nss);
920 r |= STA_STATS_FIELD(HE_MCS, s->rate_idx);
921 r |= STA_STATS_FIELD(HE_GI, s->he_gi);
922 r |= STA_STATS_FIELD(HE_RU, s->he_ru);
923 r |= STA_STATS_FIELD(HE_DCM, s->he_dcm);
924 break;
925 default:
926 WARN_ON(1);
927 return STA_STATS_RATE_INVALID;
928 }
929
930 return r;
931}
932
933#endif
934