STRUCT IEEE80211_STA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

struct ieee80211_sta β€” station table entry

straight from the struct ieee80211_sta(9) Kernel API Manual page, bestie πŸ’–

✨ SYNOPSIS ✨

okay so here's the whole struct, no cap β€” every field exactly as written:

struct ieee80211_sta {
    u8 addr[ETH_ALEN];
    u16 aid;
    u16 max_rx_aggregation_subframes;
    bool wme;
    u8 uapsd_queues;
    u8 max_sp;
    struct ieee80211_sta_rates *rates;
    bool tdls;
    bool tdls_initiator;
    bool mfp;
    bool mlo;
    bool spp_amsdu;
    u8 max_amsdu_subframes;
    u16 eml_cap;
    struct ieee80211_sta_aggregates *cur;
    bool support_p2p_ps;
    struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1];
    u16 valid_links;
    u16 ext_mld_capa_ops;
    bool epp_peer;
    struct ieee80211_link_sta deflink;
    struct ieee80211_link_sta *link[IEEE80211_MLD_MAX_NUM_LINKS];
    struct ieee80211_sta *nmi;
    struct ieee80211_nan_peer_sched *nan_sched;
    u8 drv_priv[];
};

πŸŽ€ Members πŸŽ€

  • addr β€” MAC address 🫢
  • aid β€” the AID we assigned to the station if we're an AP
  • max_rx_aggregation_subframes β€” the maximal amount of frames in a single AMPDU that this station is allowed to transmit to us. Can be modified by driver. πŸ‘€
  • wme β€” indicates whether the STA supports QoS/WME (if local devices does, otherwise always false)
  • uapsd_queues β€” bitmap of queues configured for uapsd. Only valid if wme is supported. The bits order is like in IEEE80211_WMM_IE_STA_QOSINFO_AC_*. ✨
  • max_sp β€” max Service Period. Only valid if wme is supported.
  • rates β€” rate control selection table
  • tdls β€” indicates whether the STA is a TDLS peer
  • tdls_initiator β€” indicates the STA is an initiator of the TDLS link. Only valid if the STA is a TDLS peer in the first place.
  • mfp β€” indicates whether the STA uses management frame protection or not.
  • mlo β€” indicates whether the STA is MLO station.
  • spp_amsdu β€” indicates whether the STA uses SPP A-MSDU or not.
  • max_amsdu_subframes β€” indicates the maximal number of MSDUs in a single A-MSDU. Taken from the Extended Capabilities element. 0 means unlimited. πŸ”₯
  • eml_cap β€” EML capabilities of this MLO station
  • cur β€” currently valid data as aggregated from the active links For non MLO STA it will point to the deflink data. For MLO STA ieee80211_sta_recalc_aggregates must be called to update it.
  • support_p2p_ps β€” indicates whether the STA supports P2P PS mechanism or not.
  • txq β€” per-TID data TX queues; note that the last entry (IEEE80211_NUM_TIDS) is used for non-data frames
  • valid_links β€” bitmap of valid links, or 0 for non-MLO
  • ext_mld_capa_ops β€” the MLD's extended MLD capabilities and operations
  • epp_peer β€” indicates that the peer is an EPP peer.
  • deflink β€” This holds the default link STA information, for non MLO STA all link specific STA information is accessed through deflink or through link[0] which points to address of deflink. For MLO Link STA the first added link STA will point to deflink.
  • link β€” reference to Link Sta entries. For Non MLO STA, except 1st link, i.e link[0] all links would be assigned to NULL by default and would access link information via deflink or link[0]. For MLO STA, first link STA being added will point its link pointer to deflink address and remaining would be allocated and the address would be assigned to link[link_id] where link_id is the id assigned by the AP.
  • nmi β€” For NDI stations, pointer to the NMI station of the peer.
  • nan_sched β€” NAN peer schedule for this station. Valid only for NMI stations.
  • drv_priv β€” data area for driver use, will always be aligned to sizeof(void , size is determined in hw information.

🌈 Description 🌈

A station table entry represents a station we are possibly communicating with. Since stations are RCU-managed in mac80211, any ieee80211_sta pointer you get access to must either be protected by rcu_read_lock explicitly or implicitly, or you must take good care to not use such a pointer after a call to your sta_remove callback that removed it. This also represents the MLD STA in case of MLO association and holds pointers to various link STA's. πŸ’…

lowkey important: that RCU/sta_remove bit is not a vibe suggestion, bestie β€” it's the rule 😭

πŸ’€ NOTE πŸ’€

fr fr: currently only tracked for AP STAs.

✨ SEE ALSO ✨

okay so this is the part where the manpage goes β€œand here’s literally everyone else in the mac80211 cinematic universe” πŸ’« and honestly? the guest list ate. it’s giving extended-universe group chat, and every single cross-ref is invited. no skips, no cuts, no β€œyou can guess the rest” energy β€” we’re listing all of them, periodt.

I split the list into snackable bullets because the original wall-of-text vibe was lowkey doing too much 😭 same order, same exact names, just with better energy. Kernel file ./include/net/mac80211.h and Introduction(9) are first because they’re basically the opening credits 🎬

and that’s the whole guest list, bestie β€” every single cross-ref, no cap 🫢 this page lives at ./include/net, dated October 2026, and it’s literally struct ieee80211_sta(9) β€” iconic, fr fr πŸ’–βœ¨

πŸ“¦ where this page comes from