STRUCT IEEE80211_RX_STATUS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ NAME ✨

okay bestie, welcome to the struct ieee80211_rx_status(9) page from the Kernel API Manual πŸ’– this is literally the receive status struct, and it is giving β€œdriver hands mac80211 a whole little receipt for every frame” energy. no cap.


πŸ¦‹ SYNOPSIS πŸ¦‹

here’s the actual shape of the struct, bestie β€” keep every field exactly as it is:

       struct ieee80211_rx_status {
           u64 mactime;
           union {
             u64 boottime_ns;
             ktime_t ack_tx_hwtstamp;
           };
           u32 device_timestamp;
           u32 ampdu_reference;
           u32 flag;
           u16 freq: 13, freq_offset: 1;
           u8 enc_flags;
           u8 encoding:3, bw:4;
           union {
             struct {
               u8 he_ru:3;
               u8 he_gi:2;
               u8 he_dcm:1;
             };
             struct {
               u8 ru:4;
               u8 gi:2;
             } eht;
             struct {
               u8 ru:4;
               u8 gi:2;
               u8 elr:1;
               u8 im:1;
             } uhr;
           };
           u8 rate_idx;
           u8 nss;
           u8 rx_flags;
           u8 band;
           u8 antenna;
           s8 signal;
           u8 chains;
           s8 chain_signal[IEEE80211_MAX_CHAINS];
           u8 zero_length_psdu_type;
           u8 link_valid:1, link_id:4;
        };

🫢 Members 🫢

  • mactime β€” value in microseconds of the 64-bit Time Synchronization Function (TSF) timer when the first data symbol (MPDU) arrived at the hardware ⏱️
  • {unnamed_union} β€” anonymous.
  • boottime_ns β€” CLOCK_BOOTTIME timestamp the frame was received at. this is needed only for beacons and probe responses that update the scan cache πŸ‘‘
  • ack_tx_hwtstamp β€” hardware timestamp for the ack TX in nanoseconds. only needed for Timing measurement and Fine timing measurement action frames. only reported by devices that have timestamping enabled ✨
  • device_timestamp β€” arbitrary timestamp for the device. mac80211 doesn’t use it, but can store it and pass it back to the driver for synchronisation πŸŽ€
  • ampdu_reference β€” A-MPDU reference number. it must be a different value for each A-MPDU, but the same for each subframe within one A-MPDU πŸ”₯
  • flag β€” RX_FLAG_
  • freq β€” frequency the radio was tuned to when receiving this frame, in MHz. this field must be set for management frames, but isn’t strictly needed for data (other) frames β€” for those it only affects radiotap reporting πŸ“‘
  • freq_offset β€” freq has a positive offset of 500Khz.
  • enc_flags β€” uses bits from enum mac80211_rx_encoding_flags
  • encoding β€” enum mac80211_rx_encoding
  • bw β€” enum rate_info_bw
  • {unnamed_union} β€” anonymous.
  • {unnamed_struct} β€” anonymous.
  • he_ru β€” HE RU, from enum nl80211_he_ru_alloc
  • he_gi β€” HE GI, from enum nl80211_he_gi
  • he_dcm β€” HE DCM value
  • eht β€” EHT specific rate information 🌸
  • eht.ru β€” EHT RU, from enum nl80211_eht_ru_alloc
  • eht.gi β€” EHT GI, from enum nl80211_eht_gi
  • uhr β€” UHR specific rate information πŸ’œ
  • uhr.ru β€” UHR RU, from enum nl80211_eht_ru_alloc
  • uhr.gi β€” UHR GI, from enum nl80211_eht_gi
  • uhr.elr β€” UHR ELR MCS was used
  • uhr.im β€” UHR interference mitigation was used
  • rate_idx β€” index of data rate into band’s supported rates or MCS index if HT or VHT is used (RX_FLAG_HT/RX_FLAG_VHT)
  • nss β€” number of streams (VHT, HE, EHT and UHR only)
  • rx_flags β€” internal RX flags for mac80211
  • band β€” the active band when this frame was received
  • antenna β€” antenna used
  • signal β€” signal strength when receiving this frame, either in dBm, in dB or unspecified depending on the hardware capabilities flags IEEE80211_HW_SIGNAL_* πŸ“Ά
  • chains β€” bitmask of receive chains for which separate signal strength values were filled.
  • chain_signal β€” per-chain signal strength, in dBm (unlike signal, doesn’t support dB or unspecified units)
  • zero_length_psdu_type β€” radiotap type of the 0-length PSDU
  • link_valid β€” if the link which is identified by link_id is valid. this flag is set only when connection is MLO πŸ’…
  • link_id β€” id of the link used to receive the packet. this is used along with link_valid.

🌈 Description 🌈

the low-level driver should provide this information (the subset supported by hardware) to the 802.11 code with each received frame, in the skb’s control buffer (cb). periodt πŸ’–

πŸ‘€ SEE ALSO (aka the reading list) πŸ‘€

okay bestie you made it to the end, and now we hit the part where the manual page just. keeps. going. this is the see-also zone and it is long β€” but every single one of these is a real page you can pull up, so here's the whole list, zero skips, no cap πŸ’…


ngl that was a lot of cross-references, so if you read all of them you're genuinely the main character of the kernel docs πŸ’€πŸ«Ά

and that's a wrap on struct ieee80211_rx_status(9) bestie!! the whole thing lives in ./include/net, and this particular page is dated October 2026 β€” so go forth, cite it, and slay your driver code βœ¨πŸŽ€πŸ’–

πŸ“¦ where this page comes from