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