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