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
520struct sta_info {
521
522 struct list_head list, free_list;
523 struct rcu_head rcu_head;
524 struct rhlist_head hash_node;
525 u8 addr[ETH_ALEN];
526 struct ieee80211_local *local;
527 struct ieee80211_sub_if_data *sdata;
528 struct ieee80211_key __rcu *gtk[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
529 struct ieee80211_key __rcu *ptk[NUM_DEFAULT_KEYS];
530 u8 ptk_idx;
531 struct rate_control_ref *rate_ctrl;
532 void *rate_ctrl_priv;
533 spinlock_t rate_ctrl_lock;
534 spinlock_t lock;
535
536 struct ieee80211_fast_tx __rcu *fast_tx;
537 struct ieee80211_fast_rx __rcu *fast_rx;
538 struct ieee80211_sta_rx_stats __percpu *pcpu_rx_stats;
539
540#ifdef CONFIG_MAC80211_MESH
541 struct mesh_sta *mesh;
542#endif
543
544 struct work_struct drv_deliver_wk;
545
546 u16 listen_interval;
547
548 bool dead;
549 bool removed;
550
551 bool uploaded;
552
553 enum ieee80211_sta_state sta_state;
554
555
556 unsigned long _flags;
557
558
559 spinlock_t ps_lock;
560 struct sk_buff_head ps_tx_buf[IEEE80211_NUM_ACS];
561 struct sk_buff_head tx_filtered[IEEE80211_NUM_ACS];
562 unsigned long driver_buffered_tids;
563 unsigned long txq_buffered_tids;
564
565 long last_connected;
566
567
568 struct ieee80211_sta_rx_stats rx_stats;
569 struct {
570 struct ewma_signal signal;
571 struct ewma_signal chain_signal[IEEE80211_MAX_CHAINS];
572 } rx_stats_avg;
573
574
575 __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1];
576
577
578 struct {
579 unsigned long filtered;
580 unsigned long retry_failed, retry_count;
581 unsigned int lost_packets;
582 unsigned long last_tdls_pkt_time;
583 u64 msdu_retries[IEEE80211_NUM_TIDS + 1];
584 u64 msdu_failed[IEEE80211_NUM_TIDS + 1];
585 unsigned long last_ack;
586 s8 last_ack_signal;
587 bool ack_signal_filled;
588 struct ewma_avg_signal avg_ack_signal;
589 } status_stats;
590
591
592 struct {
593 u64 packets[IEEE80211_NUM_ACS];
594 u64 bytes[IEEE80211_NUM_ACS];
595 struct ieee80211_tx_rate last_rate;
596 u64 msdu[IEEE80211_NUM_TIDS + 1];
597 } tx_stats;
598 u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
599
600 struct airtime_info airtime[IEEE80211_NUM_ACS];
601 u16 airtime_weight;
602
603
604
605
606 struct sta_ampdu_mlme ampdu_mlme;
607
608#ifdef CONFIG_MAC80211_DEBUGFS
609 struct dentry *debugfs_dir;
610#endif
611
612 enum ieee80211_sta_rx_bandwidth cur_max_bandwidth;
613
614 enum ieee80211_smps_mode known_smps_mode;
615 const struct ieee80211_cipher_scheme *cipher_scheme;
616
617 struct codel_params cparams;
618
619 u8 reserved_tid;
620
621 struct cfg80211_chan_def tdls_chandef;
622
623
624 struct ieee80211_sta sta;
625};
626
627static inline enum nl80211_plink_state sta_plink_state(struct sta_info *sta)
628{
629#ifdef CONFIG_MAC80211_MESH
630 return sta->mesh->plink_state;
631#endif
632 return NL80211_PLINK_LISTEN;
633}
634
635static inline void set_sta_flag(struct sta_info *sta,
636 enum ieee80211_sta_info_flags flag)
637{
638 WARN_ON(flag == WLAN_STA_AUTH ||
639 flag == WLAN_STA_ASSOC ||
640 flag == WLAN_STA_AUTHORIZED);
641 set_bit(flag, &sta->_flags);
642}
643
644static inline void clear_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 clear_bit(flag, &sta->_flags);
651}
652
653static inline int test_sta_flag(struct sta_info *sta,
654 enum ieee80211_sta_info_flags flag)
655{
656 return test_bit(flag, &sta->_flags);
657}
658
659static inline int test_and_clear_sta_flag(struct sta_info *sta,
660 enum ieee80211_sta_info_flags flag)
661{
662 WARN_ON(flag == WLAN_STA_AUTH ||
663 flag == WLAN_STA_ASSOC ||
664 flag == WLAN_STA_AUTHORIZED);
665 return test_and_clear_bit(flag, &sta->_flags);
666}
667
668static inline int test_and_set_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_set_bit(flag, &sta->_flags);
675}
676
677int sta_info_move_state(struct sta_info *sta,
678 enum ieee80211_sta_state new_state);
679
680static inline void sta_info_pre_move_state(struct sta_info *sta,
681 enum ieee80211_sta_state new_state)
682{
683 int ret;
684
685 WARN_ON_ONCE(test_sta_flag(sta, WLAN_STA_INSERTED));
686
687 ret = sta_info_move_state(sta, new_state);
688 WARN_ON_ONCE(ret);
689}
690
691
692void ieee80211_assign_tid_tx(struct sta_info *sta, int tid,
693 struct tid_ampdu_tx *tid_tx);
694
695static inline struct tid_ampdu_tx *
696rcu_dereference_protected_tid_tx(struct sta_info *sta, int tid)
697{
698 return rcu_dereference_protected(sta->ampdu_mlme.tid_tx[tid],
699 lockdep_is_held(&sta->lock) ||
700 lockdep_is_held(&sta->ampdu_mlme.mtx));
701}
702
703
704#define STA_MAX_TX_BUFFER 64
705
706
707
708#define STA_TX_BUFFER_EXPIRE (10 * HZ)
709
710
711
712#define STA_INFO_CLEANUP_INTERVAL (10 * HZ)
713
714struct rhlist_head *sta_info_hash_lookup(struct ieee80211_local *local,
715 const u8 *addr);
716
717
718
719
720struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
721 const u8 *addr);
722
723struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
724 const u8 *addr);
725
726#define for_each_sta_info(local, _addr, _sta, _tmp) \
727 rhl_for_each_entry_rcu(_sta, _tmp, \
728 sta_info_hash_lookup(local, _addr), hash_node)
729
730
731
732
733struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
734 int idx);
735
736
737
738
739struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
740 const u8 *addr, gfp_t gfp);
741
742void sta_info_free(struct ieee80211_local *local, struct sta_info *sta);
743
744
745
746
747
748
749
750
751
752int sta_info_insert(struct sta_info *sta);
753int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU);
754
755int __must_check __sta_info_destroy(struct sta_info *sta);
756int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata,
757 const u8 *addr);
758int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
759 const u8 *addr);
760
761void sta_info_recalc_tim(struct sta_info *sta);
762
763int sta_info_init(struct ieee80211_local *local);
764void sta_info_stop(struct ieee80211_local *local);
765
766
767
768
769
770
771
772
773
774int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans);
775
776static inline int sta_info_flush(struct ieee80211_sub_if_data *sdata)
777{
778 return __sta_info_flush(sdata, false);
779}
780
781void sta_set_rate_info_tx(struct sta_info *sta,
782 const struct ieee80211_tx_rate *rate,
783 struct rate_info *rinfo);
784void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
785 bool tidstats);
786
787u32 sta_get_expected_throughput(struct sta_info *sta);
788
789void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
790 unsigned long exp_time);
791u8 sta_info_tx_streams(struct sta_info *sta);
792
793void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta);
794void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta);
795void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta);
796
797unsigned long ieee80211_sta_last_active(struct sta_info *sta);
798
799enum sta_stats_type {
800 STA_STATS_RATE_TYPE_INVALID = 0,
801 STA_STATS_RATE_TYPE_LEGACY,
802 STA_STATS_RATE_TYPE_HT,
803 STA_STATS_RATE_TYPE_VHT,
804 STA_STATS_RATE_TYPE_HE,
805};
806
807#define STA_STATS_FIELD_HT_MCS GENMASK( 7, 0)
808#define STA_STATS_FIELD_LEGACY_IDX GENMASK( 3, 0)
809#define STA_STATS_FIELD_LEGACY_BAND GENMASK( 7, 4)
810#define STA_STATS_FIELD_VHT_MCS GENMASK( 3, 0)
811#define STA_STATS_FIELD_VHT_NSS GENMASK( 7, 4)
812#define STA_STATS_FIELD_HE_MCS GENMASK( 3, 0)
813#define STA_STATS_FIELD_HE_NSS GENMASK( 7, 4)
814#define STA_STATS_FIELD_BW GENMASK(11, 8)
815#define STA_STATS_FIELD_SGI GENMASK(12, 12)
816#define STA_STATS_FIELD_TYPE GENMASK(15, 13)
817#define STA_STATS_FIELD_HE_RU GENMASK(18, 16)
818#define STA_STATS_FIELD_HE_GI GENMASK(20, 19)
819#define STA_STATS_FIELD_HE_DCM GENMASK(21, 21)
820
821#define STA_STATS_FIELD(_n, _v) FIELD_PREP(STA_STATS_FIELD_ ## _n, _v)
822#define STA_STATS_GET(_n, _v) FIELD_GET(STA_STATS_FIELD_ ## _n, _v)
823
824#define STA_STATS_RATE_INVALID 0
825
826static inline u32 sta_stats_encode_rate(struct ieee80211_rx_status *s)
827{
828 u32 r;
829
830 r = STA_STATS_FIELD(BW, s->bw);
831
832 if (s->enc_flags & RX_ENC_FLAG_SHORT_GI)
833 r |= STA_STATS_FIELD(SGI, 1);
834
835 switch (s->encoding) {
836 case RX_ENC_VHT:
837 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_VHT);
838 r |= STA_STATS_FIELD(VHT_NSS, s->nss);
839 r |= STA_STATS_FIELD(VHT_MCS, s->rate_idx);
840 break;
841 case RX_ENC_HT:
842 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_HT);
843 r |= STA_STATS_FIELD(HT_MCS, s->rate_idx);
844 break;
845 case RX_ENC_LEGACY:
846 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_LEGACY);
847 r |= STA_STATS_FIELD(LEGACY_BAND, s->band);
848 r |= STA_STATS_FIELD(LEGACY_IDX, s->rate_idx);
849 break;
850 case RX_ENC_HE:
851 r |= STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_HE);
852 r |= STA_STATS_FIELD(HE_NSS, s->nss);
853 r |= STA_STATS_FIELD(HE_MCS, s->rate_idx);
854 r |= STA_STATS_FIELD(HE_GI, s->he_gi);
855 r |= STA_STATS_FIELD(HE_RU, s->he_ru);
856 r |= STA_STATS_FIELD(HE_DCM, s->he_dcm);
857 break;
858 default:
859 WARN_ON(1);
860 return STA_STATS_RATE_INVALID;
861 }
862
863 return r;
864}
865
866#endif
867