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