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