1 /* 2 * Copyright 2002-2005, Devicescape Software, Inc. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 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/kref.h> 16 #include "ieee80211_key.h" 17 18 /** 19 * enum ieee80211_sta_info_flags - Stations flags 20 * 21 * These flags are used with &struct sta_info's @flags member. 22 * 23 * @WLAN_STA_AUTH: Station is authenticated. 24 * @WLAN_STA_ASSOC: Station is associated. 25 * @WLAN_STA_PS: Station is in power-save mode 26 * @WLAN_STA_AUTHORIZED: Station is authorized to send/receive traffic. 27 * This bit is always checked so needs to be enabled for all stations 28 * when virtual port control is not in use. 29 * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble 30 * frames. 31 * @WLAN_STA_ASSOC_AP: We're associated to that station, it is an AP. 32 * @WLAN_STA_WME: Station is a QoS-STA. 33 * @WLAN_STA_WDS: Station is one of our WDS peers. 34 * @WLAN_STA_PSPOLL: Station has just PS-polled us. 35 * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the 36 * IEEE80211_TXCTL_CLEAR_PS_FILT control flag) when the next 37 * frame to this station is transmitted. 38 */ 39 enum ieee80211_sta_info_flags { 40 WLAN_STA_AUTH = 1<<0, 41 WLAN_STA_ASSOC = 1<<1, 42 WLAN_STA_PS = 1<<2, 43 WLAN_STA_AUTHORIZED = 1<<3, 44 WLAN_STA_SHORT_PREAMBLE = 1<<4, 45 WLAN_STA_ASSOC_AP = 1<<5, 46 WLAN_STA_WME = 1<<6, 47 WLAN_STA_WDS = 1<<7, 48 WLAN_STA_PSPOLL = 1<<8, 49 WLAN_STA_CLEAR_PS_FILT = 1<<9, 50 }; 51 52 #define STA_TID_NUM 16 53 #define ADDBA_RESP_INTERVAL HZ 54 #define HT_AGG_MAX_RETRIES (0x3) 55 56 #define HT_AGG_STATE_INITIATOR_SHIFT (4) 57 58 #define HT_ADDBA_REQUESTED_MSK BIT(0) 59 #define HT_ADDBA_DRV_READY_MSK BIT(1) 60 #define HT_ADDBA_RECEIVED_MSK BIT(2) 61 #define HT_AGG_STATE_REQ_STOP_BA_MSK BIT(3) 62 #define HT_AGG_STATE_INITIATOR_MSK BIT(HT_AGG_STATE_INITIATOR_SHIFT) 63 #define HT_AGG_STATE_IDLE (0x0) 64 #define HT_AGG_STATE_OPERATIONAL (HT_ADDBA_REQUESTED_MSK | \ 65 HT_ADDBA_DRV_READY_MSK | \ 66 HT_ADDBA_RECEIVED_MSK) 67 68 /** 69 * struct tid_ampdu_tx - TID aggregation information (Tx). 70 * 71 * @state: TID's state in session state machine. 72 * @dialog_token: dialog token for aggregation session 73 * @ssn: Starting Sequence Number expected to be aggregated. 74 * @addba_resp_timer: timer for peer's response to addba request 75 * @addba_req_num: number of times addBA request has been sent. 76 */ 77 struct tid_ampdu_tx { 78 u8 state; 79 u8 dialog_token; 80 u16 ssn; 81 struct timer_list addba_resp_timer; 82 u8 addba_req_num; 83 }; 84 85 /** 86 * struct tid_ampdu_rx - TID aggregation information (Rx). 87 * 88 * @state: TID's state in session state machine. 89 * @dialog_token: dialog token for aggregation session 90 * @ssn: Starting Sequence Number expected to be aggregated. 91 * @buf_size: buffer size for incoming A-MPDUs 92 * @timeout: reset timer value. 93 * @head_seq_num: head sequence number in reordering buffer. 94 * @stored_mpdu_num: number of MPDUs in reordering buffer 95 * @reorder_buf: buffer to reorder incoming aggregated MPDUs 96 * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) 97 */ 98 struct tid_ampdu_rx { 99 u8 state; 100 u8 dialog_token; 101 u16 ssn; 102 u16 buf_size; 103 u16 timeout; 104 u16 head_seq_num; 105 u16 stored_mpdu_num; 106 struct sk_buff **reorder_buf; 107 struct timer_list session_timer; 108 }; 109 110 #ifdef CONFIG_MAC80211_MESH 111 enum plink_state { 112 LISTEN, 113 OPN_SNT, 114 OPN_RCVD, 115 CNF_RCVD, 116 ESTAB, 117 HOLDING, 118 BLOCKED 119 }; 120 #endif 121 122 /** 123 * struct sta_ampdu_mlme - STA aggregation information. 124 * 125 * @tid_rx: aggregation info for Rx per TID 126 * @tid_tx: aggregation info for Tx per TID 127 * @ampdu_rx: for locking sections in aggregation Rx flow 128 * @ampdu_tx: for locking sectionsi in aggregation Tx flow 129 * @dialog_token_allocator: dialog token enumerator for each new session; 130 */ 131 struct sta_ampdu_mlme { 132 struct tid_ampdu_rx tid_rx[STA_TID_NUM]; 133 struct tid_ampdu_tx tid_tx[STA_TID_NUM]; 134 spinlock_t ampdu_rx; 135 spinlock_t ampdu_tx; 136 u8 dialog_token_allocator; 137 }; 138 139 struct sta_info { 140 struct kref kref; 141 struct list_head list; 142 struct sta_info *hnext; /* next entry in hash table list */ 143 144 struct ieee80211_local *local; 145 146 u8 addr[ETH_ALEN]; 147 u16 aid; /* STA's unique AID (1..2007), 0 = not yet assigned */ 148 u32 flags; /* WLAN_STA_ */ 149 150 struct sk_buff_head ps_tx_buf; /* buffer of TX frames for station in 151 * power saving state */ 152 struct sk_buff_head tx_filtered; /* buffer of TX frames that were 153 * already given to low-level driver, 154 * but were filtered */ 155 unsigned long rx_packets, tx_packets; /* number of RX/TX MSDUs */ 156 unsigned long rx_bytes, tx_bytes; 157 unsigned long tx_retry_failed, tx_retry_count; 158 unsigned long tx_filtered_count; 159 /* moving percentage of failed MSDUs */ 160 unsigned int fail_avg; 161 162 unsigned int wep_weak_iv_count; /* number of RX frames with weak IV */ 163 164 unsigned long last_rx; 165 /* bitmap of supported rates per band */ 166 u64 supp_rates[IEEE80211_NUM_BANDS]; 167 int txrate_idx; 168 /* last rates used to send a frame to this STA */ 169 int last_txrate_idx, last_nonerp_txrate_idx; 170 171 struct net_device *dev; /* which net device is this station associated 172 * to */ 173 174 struct ieee80211_key *key; 175 176 u32 tx_num_consecutive_failures; 177 u32 tx_num_mpdu_ok; 178 u32 tx_num_mpdu_fail; 179 180 struct rate_control_ref *rate_ctrl; 181 void *rate_ctrl_priv; 182 183 /* last received seq/frag number from this STA (per RX queue) */ 184 __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES]; 185 unsigned long num_duplicates; /* number of duplicate frames received 186 * from this STA */ 187 unsigned long tx_fragments; /* number of transmitted MPDUs */ 188 unsigned long rx_fragments; /* number of received MPDUs */ 189 unsigned long rx_dropped; /* number of dropped MPDUs from this STA */ 190 191 int last_rssi; /* RSSI of last received frame from this STA */ 192 int last_signal; /* signal of last received frame from this STA */ 193 int last_noise; /* noise of last received frame from this STA */ 194 int channel_use; 195 int channel_use_raw; 196 197 #ifdef CONFIG_MAC80211_DEBUG_COUNTERS 198 unsigned int wme_rx_queue[NUM_RX_DATA_QUEUES]; 199 unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES]; 200 #endif /* CONFIG_MAC80211_DEBUG_COUNTERS */ 201 202 u16 listen_interval; 203 204 struct ieee80211_ht_info ht_info; /* 802.11n HT capabilities 205 of this STA */ 206 struct sta_ampdu_mlme ampdu_mlme; 207 u8 timer_to_tid[STA_TID_NUM]; /* convert timer id to tid */ 208 u8 tid_to_tx_q[STA_TID_NUM]; /* map tid to tx queue */ 209 #ifdef CONFIG_MAC80211_MESH 210 /* mesh peer link attributes */ 211 __le16 llid; /* Local link ID */ 212 __le16 plid; /* Peer link ID */ 213 __le16 reason; /* Buffer for cancel reason on HOLDING state */ 214 enum plink_state plink_state; 215 u32 plink_timeout; 216 struct timer_list plink_timer; 217 u8 plink_retries; /* Retries in establishment */ 218 bool ignore_plink_timer; 219 spinlock_t plink_lock; /* For peer_state reads / updates and other 220 updates in the structure. Ensures robust 221 transitions for the peerlink FSM */ 222 #endif 223 224 #ifdef CONFIG_MAC80211_DEBUGFS 225 struct sta_info_debugfsdentries { 226 struct dentry *dir; 227 struct dentry *flags; 228 struct dentry *num_ps_buf_frames; 229 struct dentry *inactive_ms; 230 struct dentry *last_seq_ctrl; 231 #ifdef CONFIG_MAC80211_DEBUG_COUNTERS 232 struct dentry *wme_rx_queue; 233 struct dentry *wme_tx_queue; 234 #endif 235 struct dentry *agg_status; 236 } debugfs; 237 #endif 238 }; 239 240 241 /* Maximum number of concurrently registered stations */ 242 #define MAX_STA_COUNT 2007 243 244 #define STA_HASH_SIZE 256 245 #define STA_HASH(sta) (sta[5]) 246 247 248 /* Maximum number of frames to buffer per power saving station */ 249 #define STA_MAX_TX_BUFFER 128 250 251 /* Minimum buffered frame expiry time. If STA uses listen interval that is 252 * smaller than this value, the minimum value here is used instead. */ 253 #define STA_TX_BUFFER_EXPIRE (10 * HZ) 254 255 /* How often station data is cleaned up (e.g., expiration of buffered frames) 256 */ 257 #define STA_INFO_CLEANUP_INTERVAL (10 * HZ) 258 259 static inline void __sta_info_get(struct sta_info *sta) 260 { 261 kref_get(&sta->kref); 262 } 263 264 struct sta_info * sta_info_get(struct ieee80211_local *local, u8 *addr); 265 struct sta_info *sta_info_get_by_idx(struct ieee80211_local *local, int idx, 266 struct net_device *dev); 267 void sta_info_put(struct sta_info *sta); 268 struct sta_info *sta_info_add(struct ieee80211_local *local, 269 struct net_device *dev, u8 *addr, gfp_t gfp); 270 void sta_info_remove(struct sta_info *sta); 271 void sta_info_free(struct sta_info *sta); 272 void sta_info_init(struct ieee80211_local *local); 273 int sta_info_start(struct ieee80211_local *local); 274 void sta_info_stop(struct ieee80211_local *local); 275 void sta_info_flush(struct ieee80211_local *local, struct net_device *dev); 276 277 void sta_info_set_tim_bit(struct sta_info *sta); 278 void sta_info_clear_tim_bit(struct sta_info *sta); 279 280 #endif /* STA_INFO_H */ 281