struct sta_info — STA information
struct sta_info { struct list_head list; struct list_head free_list; struct rcu_head rcu_head; struct sta_info __rcu * hnext; u8 addr[ETH_ALEN]; struct ieee80211_local * local; struct ieee80211_sub_if_data * sdata; struct ieee80211_key __rcu * gtk[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS]; struct ieee80211_key __rcu * ptk[NUM_DEFAULT_KEYS]; u8 ptk_idx; struct rate_control_ref * rate_ctrl; void * rate_ctrl_priv; spinlock_t rate_ctrl_lock; spinlock_t lock; struct ieee80211_fast_tx __rcu * fast_tx; #ifdef CONFIG_MAC80211_MESH struct mesh_sta * mesh; #endif struct work_struct drv_deliver_wk; u16 listen_interval; bool dead; bool uploaded; enum ieee80211_sta_state sta_state; unsigned long _flags; spinlock_t ps_lock; struct sk_buff_head ps_tx_buf[IEEE80211_NUM_ACS]; struct sk_buff_head tx_filtered[IEEE80211_NUM_ACS]; unsigned long driver_buffered_tids; unsigned long txq_buffered_tids; unsigned long rx_packets; u64 rx_bytes; unsigned long last_rx; long last_connected; unsigned long num_duplicates; unsigned long rx_fragments; unsigned long rx_dropped; int last_signal; struct ewma_signal avg_signal; int last_ack_signal; u8 chains; s8 chain_signal_last[IEEE80211_MAX_CHAINS]; struct ewma_signal chain_signal_avg[IEEE80211_MAX_CHAINS]; __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1]; unsigned long tx_filtered_count; unsigned long tx_retry_failed; unsigned long tx_retry_count; u64 tx_packets[IEEE80211_NUM_ACS]; u64 tx_bytes[IEEE80211_NUM_ACS]; struct ieee80211_tx_rate last_tx_rate; int last_rx_rate_idx; u32 last_rx_rate_flag; u32 last_rx_rate_vht_flag; u8 last_rx_rate_vht_nss; u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1]; u64 tx_msdu[IEEE80211_NUM_TIDS + 1]; u64 tx_msdu_retries[IEEE80211_NUM_TIDS + 1]; u64 tx_msdu_failed[IEEE80211_NUM_TIDS + 1]; u64 rx_msdu[IEEE80211_NUM_TIDS + 1]; struct sta_ampdu_mlme ampdu_mlme; u8 timer_to_tid[IEEE80211_NUM_TIDS]; #ifdef CONFIG_MAC80211_DEBUGFS struct sta_info_debugfsdentries debugfs; #endif enum ieee80211_sta_rx_bandwidth cur_max_bandwidth; unsigned int lost_packets; unsigned int beacon_loss_count; enum ieee80211_smps_mode known_smps_mode; const struct ieee80211_cipher_scheme * cipher_scheme; unsigned long last_tdls_pkt_time; u8 reserved_tid; struct cfg80211_chan_def tdls_chandef; struct ieee80211_sta sta; };
global linked list entry
list entry for keeping track of stations to free
RCU head used for freeing this station struct
hash table linked list pointer
station's MAC address - duplicated from public part to let the hash table work with just a single cacheline
pointer to the global information
virtual interface this station belongs to
group keys negotiated with this station, if any
peer keys negotiated with this station, if any
last installed peer key index
rate control algorithm reference
rate control private per-STA pointer
spinlock used to protect rate control data (data inside the algorithm, so serializes calls there)
used for locking all fields that require locking, see comments in the header file.
TX fastpath information
mesh STA information
used for delivering frames after driver PS unblocking
listen interval of this station, when we're acting as AP
set to true when sta is unlinked
set to true when sta is uploaded to the driver
duplicates information about station state (for debug)
STA flags, see enum ieee80211_sta_info_flags, do not use directly
used for powersave (when mac80211 is the AP) related locking
buffers (per AC) of frames to transmit to this station when it leaves power saving state or polls
buffers (per AC) of frames we already tried to transmit but were filtered by hardware due to STA having entered power saving state, these are also delivered to the station when it leaves powersave or polls for frames
bitmap of TIDs the driver has data buffered on
bitmap of TIDs that mac80211 has txq data buffered on
Number of MSDUs received from this STA
Number of bytes received from this STA
time (in jiffies) when last frame was received from this STA
time (in seconds) when a station got connected
number of duplicate frames received from this STA
number of received MPDUs
number of dropped MPDUs from this STA
signal of last received frame from this STA
moving average of signal of received frames from this STA
signal of last received Ack frame from this STA
chains ever used for RX from this station
last signal (per chain)
signal average (per chain)
last received seq/frag number from this STA (per TID plus one for non-QoS frames)
number of frames the hardware filtered for this STA
number of frames that failed retry
total number of retries for frames to this STA
number of RX/TX MSDUs
number of bytes transmitted to this STA
rate used for last transmit, to report to userspace as “the” transmit rate
rx status rate index of the last data packet
rx status flag of the last data packet
rx status vht flag of the last data packet
rx status nss of last data packet
per-TID sequence numbers for sending to this STA
MSDUs transmitted to this station, using IEEE80211_NUM_TID entry for non-QoS frames
MSDU retries for transmissions to to this station, using IEEE80211_NUM_TID entry for non-QoS frames
MSDU failures for transmissions to to this station, using IEEE80211_NUM_TID entry for non-QoS frames
MSDUs received from this station, using IEEE80211_NUM_TID entry for non-QoS frames
A-MPDU state machine state
identity mapping to ID timers
debug filesystem info
maximum bandwidth to use for TX to the station, taken from HT/VHT capabilities or VHT operating mode notification
number of consecutive lost packets
number of times beacon loss has triggered
the smps_mode the client thinks we are in. Relevant for AP only.
optional cipher scheme for this station
holds the time in jiffies of last TDLS pkt ACKed
reserved TID (if any, otherwise IEEE80211_TID_UNRESERVED)
a TDLS peer can have a wider chandef that is compatible to the BSS one.
station information we share with the driver