STRUCT LINK_STATION_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay so bestie, welcome to the struct link_station_info(9) page from the Kernel API Manual β€” it's literally all about link station information πŸ’…βœ¨


✨ SYNOPSIS ✨

struct link_station_info {
    u64 filled;
    u32 connected_time;
    u32 inactive_time;
    u64 assoc_at;
    u64 rx_bytes;
    u64 tx_bytes;
    s8 signal;
    s8 signal_avg;
    u8 chains;
    s8 chain_signal[IEEE80211_MAX_CHAINS];
    s8 chain_signal_avg[IEEE80211_MAX_CHAINS];
    struct rate_info txrate;
    struct rate_info rxrate;
    u32 rx_packets;
    u32 tx_packets;
    u32 tx_retries;
    u32 tx_failed;
    u32 rx_dropped_misc;
    struct sta_bss_parameters bss_param;
    u32 beacon_loss_count;
    u32 expected_throughput;
    u64 tx_duration;
    u64 rx_duration;
    u64 rx_beacon;
    u8 rx_beacon_signal_avg;
    u16 airtime_weight;
    s8 ack_signal;
    s8 avg_ack_signal;
    struct cfg80211_tid_stats *pertid;
    u32 rx_mpdu_count;
    u32 fcs_err_count;
    u8 addr[ETH_ALEN];
 };

🫢 Members 🫢

  • filled β€” a bit flag of flags using the bits of enum nl80211_sta_info to show which values in this struct are relevant for them, periodt.
  • connected_time β€” time (in secs) since a link of the station was last connected ⏳
  • inactive_time β€” time since the last activity for the link station (tx/rx), in milliseconds.
  • assoc_at β€” the bootime (ns) of the last association of the link of the station.
  • rx_bytes β€” bytes (size of MPDUs) received from this link of the station.
  • tx_bytes β€” bytes (size of MPDUs) transmitted to this link of the station.
  • signal β€” the signal strength; type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, the value is expressed in _dBm_.
  • signal_avg β€” average signal strength; type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, the value is expressed in _dBm_.
  • chains β€” bitmask for the filled values in chain_signal, chain_signal_avg.
  • chain_signal β€” per-chain signal strength of the last received packet in dBm.
  • chain_signal_avg β€” per-chain signal strength average in dBm.
  • txrate β€” current unicast bitrate from this link of the station.
  • rxrate β€” current unicast bitrate to this link of the station.
  • rx_packets β€” packets (MSDUs & MMPDUs) received from this link of the station.
  • tx_packets β€” packets (MSDUs & MMPDUs) transmitted to this link of the station.
  • tx_retries β€” cumulative retry counts (MPDUs) for this link of the station.
  • tx_failed β€” number of failed transmissions (MPDUs) (retries exceeded, no ACK).
  • rx_dropped_misc β€” dropped for an un-specified reason.
  • bss_param β€” current BSS parameters.
  • beacon_loss_count β€” number of times a beacon loss event has triggered.
  • expected_throughput β€” expected throughput in kbps (including 802.11 headers) towards this station.
  • tx_duration β€” aggregate PPDU duration (usecs) for all the frames to a peer.
  • rx_duration β€” aggregate PPDU duration (usecs) for all the frames from a peer.
  • rx_beacon β€” number of beacons received from this peer.
  • rx_beacon_signal_avg β€” signal strength average (in dBm) for beacons received from this peer.
  • airtime_weight β€” current airtime scheduling weight.
  • ack_signal β€” signal strength (in dBm) of the last ACK frame.
  • avg_ack_signal β€” average rssi value of ack packet for the no of msdu's has been sent.
  • pertid β€” per-TID statistics, see struct cfg80211_tid_stats, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs.
note that this doesn't use the filled bit, but is used if non-NULL πŸ‘€
  • rx_mpdu_count β€” number of MPDUs received from this station.
  • fcs_err_count β€” number of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address.
  • addr β€” for MLO STA connection, filled with the address of the link of the station.

πŸŽ€ Description πŸŽ€

Link station information filled by the driver for get_station and dump_station. that's the whole vibe πŸ’–

🌈 SEE ALSO 🌈

okay bestie, this is the part of the page where it just spills links at you πŸ’… β€” like, an entire forest of cross-references, all of them (9), all of them real, and every single one is staying because we don't ghost our siblings. Buckle up πŸŽ€

  • ./include/net/cfg80211.h β€” the Kernel file where all of this actually lives, iykyk
  • Introduction(9), Device registration(9)

πŸ’– the channel / rate / capability girlies πŸ’–


✨ Actions and configuration ✨

the whole "we're setting stuff up" arc, honestly iconic:


πŸ¦‹ Scanning and BSS list handling πŸ¦‹

scanning era, lowkey the main character of every connect flow:

  • struct cfg80211_ssid(9), struct cfg80211_scan_info(9), struct cfg80211_scan_6ghz_params(9), struct cfg80211_scan_request(9), struct cfg80211_match_set(9), struct cfg80211_sched_scan_plan(9), struct cfg80211_bss_select_adjust(9), struct cfg80211_sched_scan_request(9), enum cfg80211_signal_type(9)
  • struct cfg80211_inform_bss(9), struct cfg80211_bss_ies(9), struct cfg80211_bss(9), ieee80211_bss_get_elem(9), ieee80211_bss_get_ie(9)
  • struct cfg80211_auth_request(9), struct cfg80211_assoc_link(9), struct cfg80211_ml_reconf_req(9), enum cfg80211_assoc_req_flags(9), struct cfg80211_assoc_request(9), struct cfg80211_deauth_request(9), struct cfg80211_disassoc_request(9)
  • struct cfg80211_ibss_params(9), struct cfg80211_bss_selection(9), struct cfg80211_connect_params(9), enum cfg80211_connect_params_changed(9)
  • enum wiphy_params_flags(9), struct cfg80211_pmksa(9), struct cfg80211_pkt_pattern(9), struct cfg80211_wowlan_tcp(9), struct cfg80211_wowlan(9)
  • struct cfg80211_coalesce_rules(9), struct cfg80211_coalesce(9), struct cfg80211_wowlan_nd_match(9), struct cfg80211_wowlan_nd_info(9), struct cfg80211_wowlan_wakeup(9)
  • struct cfg80211_gtk_rekey_data(9), struct cfg80211_update_ft_ies_params(9), struct cfg80211_mgmt_tx_params(9), struct cfg80211_dscp_exception(9), struct cfg80211_dscp_range(9), struct cfg80211_qos_map(9)

🌸 Neighbor Awareness Networking (NAN) 🌸

NAN section, she has her own whole ✨ thing ✨ going on:

  • struct cfg80211_nan_band_config(9), struct cfg80211_nan_conf(9), struct cfg80211_nan_channel(9), struct cfg80211_nan_local_sched(9), struct cfg80211_nan_peer_map(9), struct cfg80211_nan_peer_sched(9), enum cfg80211_nan_conf_changes(9), struct cfg80211_nan_func_filter(9), struct cfg80211_nan_func(9)

🫢 the big structured pile 🫢

this is the part where the page just goes feral with structs and functions, and we respect it πŸ’€ β€” every one of them, no skips:


⭐ Utility functions ⭐

the little helpers that carry the whole squad on their back, fr fr:


🧚 Data path helpers 🧚

packets go brrr, and these are the girlies doing it:


🌺 Regulatory enforcement infrastructure 🌺

the "please stay legal, bestie" department 🫑:

πŸ’œ Internal regulatory db functions πŸ’œ


πŸ”₯ the notification / mgmt pile πŸ”₯

and then the page just keeps going, and honestly? slay:

πŸ’€ RFkill integration πŸ’€

πŸŽ€ Vendor commands πŸŽ€

πŸ“ Test mode πŸ“


πŸ‘‘ connect / roam / mgmt / sta notifs πŸ‘‘

okay this is the last big stretch and it's giving "everything that ever pings userspace":

and that's the whole link wall, no cap πŸ’– (more still coming, don't go anywhere 🌈)


okay that's the whole friend group 😭✨ like genuinely, bestie, that's everyone β€” the beaconing girlies, the channel-switch notify crew, the whole ieee80211_* to-band / to-chandef / to-khz conversion polycule, the TDLS and bitrate besties, the register/unregister netdevice twins, the wowlan wakeup reporter, the combination checkers, the entire NAN situation (there are so many of them and honestly? iconic of them), the color-change notification squad, the MLO reconf girls, the debugfs read/write duo, and the S1G frequency besties showing up fashionably late 🌸

every single one of those is a real page, no cap β€” go read them if you want the full lore πŸ’… iykyk


and that's a wrap on struct link_station_info(9) πŸŽ€πŸ«Ά you made it to the end, so proud of you fr fr. this little masterpiece lives over in ./include/net, stamped October 2026, and it's giving "documented and thriving" πŸ‘‘ go be the main character of your own driver now πŸ’–βœ¨

πŸ“¦ where this page comes from