STRUCT LINK_STA_INFO(9)
π struct link_sta_info(9) π
okay bestie, so this is a page out of the Kernel API Manual, and it's literally all about struct link_sta_info β the Link STA information situation. β¨
The tea: all link specific sta info is stored here for reference. And here's the vibe check β this can be a single entry for a non-MLD STA, or multiple entries for an MLD STA. That's it, that's the whole point of the struct. π«Ά
β¨ SYNOPSIS β¨
Like, here's the whole thing, every field, no skipping:
struct link_sta_info {
u8 addr[ETH_ALEN];
u8 link_id;
u8 op_mode_nss, capa_nss;
struct rhlist_head link_hash_node;
struct sta_info *sta;
struct ieee80211_key *gtk[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS + NUM_DEFAULT_BEACON_KEYS];
struct ieee80211_sta_rx_stats __percpu *pcpu_rx_stats;
struct ieee80211_sta_rx_stats rx_stats;
struct {
struct ewma_signal signal;
struct ewma_signal chain_signal[IEEE80211_MAX_CHAINS];
} rx_stats_avg;
struct {
unsigned long filtered;
unsigned long retry_failed, retry_count;
unsigned int lost_packets;
unsigned long last_pkt_time;
u64 msdu_retries[IEEE80211_NUM_TIDS + 1];
u64 msdu_failed[IEEE80211_NUM_TIDS + 1];
unsigned long last_ack;
s8 last_ack_signal;
bool ack_signal_filled;
struct ewma_avg_signal avg_ack_signal;
} status_stats;
struct {
u64 packets[IEEE80211_NUM_ACS];
u64 bytes[IEEE80211_NUM_ACS];
struct ieee80211_tx_rate last_rate;
struct rate_info last_rate_info;
u64 msdu[IEEE80211_NUM_TIDS + 1];
} tx_stats;
enum ieee80211_sta_rx_bandwidth op_mode_bw;
enum ieee80211_sta_rx_bandwidth rx_omi_bw_rx, rx_omi_bw_tx, rx_omi_bw_staging;
enum ieee80211_sta_rx_bandwidth uhr_usable_tx_width;
bool uhr_dbe_enabled;
#ifdef CONFIG_MAC80211_DEBUGFS;
struct dentry *debugfs_dir;
#endif;
struct ieee80211_link_sta *pub;
};
πΈ MEMBERS πΈ
like, meet the whole cast of fields. every single one is doing its job and we love that for them π
addrβ the Link MAC address. It can be the same as the MLD STA mac address, and it's always the same for a non-MLD STA. Fun fact: this is used as the key for searching link STA πlink_idβ Link ID that uniquely identifies the link STA. It's0for non-MLD, and gets set to the corresponding vif LinkId for MLD STA. iykyk β¨op_mode_nssβ the NSS limit as set by operating mode notification, or0capa_nssβ the NSS limit as determined by local and peer capabilitieslink_hash_nodeβ hash node for rhashtablestaβ points to the STA infogtkβ group keys negotiated with this station, if anypcpu_rx_statsβ per-CPU RX statistics, assigned only if the driver needs this (by advertising theUSES_RSShw flag). not me gatekeeping stats πrx_statsβ RX statisticsrx_stats_avgβ averaged RX statisticsrx_stats_avg.signalβ averaged signalrx_stats_avg.chain_signalβ averaged per-chain signalstatus_statsβ TX status statisticsstatus_stats.filteredβ # of filtered framesstatus_stats.retry_failedβ # of frames that failed after retry πstatus_stats.retry_countβ # of retries attemptedstatus_stats.lost_packetsβ # of lost packets πstatus_stats.last_pkt_timeβ timestamp of last ACKed packetstatus_stats.msdu_retriesβ # of MSDU retriesstatus_stats.msdu_failedβ # of failed MSDUsstatus_stats.last_ackβ last ack timestamp (jiffies)status_stats.last_ack_signalβ last ACK signalstatus_stats.ack_signal_filledβ last ACK signal validitystatus_stats.avg_ack_signalβ average ACK signaltx_statsβ TX statisticstx_stats.packetsβ # of packets transmittedtx_stats.bytesβ # of bytes in all packets transmittedtx_stats.last_rateβ last TX ratetx_stats.msduβ # of transmitted MSDUs per TIDop_mode_bwβ the dynamic bandwidth limit to transmit to the STA, taken from HT/VHT capabilities or VHT operating mode notification. β οΈ Invalid for NAN since that is operating on multiple bands. (yes, NAN is the exception, she's built different)rx_omi_bw_rxβ RX OMI bandwidth restriction to apply for RXrx_omi_bw_txβ RX OMI bandwidth restriction to apply for TXrx_omi_bw_stagingβ RX OMI bandwidth restriction to apply later during finalize. queue it up bestie πuhr_usable_tx_widthβ bandwidth restriction for UHR for TX, only when the link_sta is an AP, to restrict TX to BSS width during DBE enablementuhr_dbe_enabledβ for STAs as clients to an AP interface, indicates DBE is enabled by the STAdebugfs_dirβ debug filesystem directory dentrypubβ public (driver visible) link STA data. main character energy for the drivers π
π¦ SEE ALSO π¦
go read these next, bestie, they're all iconic in their own way:
- Kernel file
./net/mac80211/sta_info.h enum ieee80211_sta_info_flags(9)struct tid_ampdu_tx(9)struct tid_ampdu_rx(9)struct sta_ampdu_mlme(9)struct ieee80211_fast_tx(9)struct ieee80211_fast_rx(9)struct mesh_sta(9)struct ieee80211_sta_removed_link_stats(9)struct sta_info(9)__sta_info_flush(9)sta_info_flush(9)
okay that's the whole page, no cap, nothing skipped π this little beauty lives in ./net/mac80211 and the docs over here were stamped October 2026, so she's fresh. mwah, go forth and read your link STA info πππ¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms