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