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