STRUCT IWL_RX_MPDU_DESC_V3(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct iwl_rx_mpdu_desc_v3 β€” RX MPDU descriptor ✨

okay bestie, sit down, hydrate, and let's talk about struct iwl_rx_mpdu_desc_v3 πŸ’… this is straight out of the Kernel API Manual (section 9, iwlwifi country πŸ¦‹) and it's the RX MPDU descriptor β€” it's giving "the little receipt the hardware hands you after a frame arrives" energy. no cap.


🌸 SYNOPSIS 🌸

struct iwl_rx_mpdu_desc_v3 {
    union {
      __le32 filter_match;
      __le32 phy_data3;
    };
    union {
      __le32 rss_hash;
      __le32 phy_data2;
    };
    __le32 partial_hash;
    __be16 raw_xsum;
    __le16 reserved_xsum;
    __le32 rate_n_flags;
    u8 energy_a;
    u8 energy_b;
    u8 channel;
    u8 mac_context;
    __le32 gp2_on_air_rise;
    union {
      __le64 tsf_on_air_rise;
      struct {
        __le32 phy_data0;
        __le32 phy_data1;
      };
    };
    __le32 phy_data5;
    __le32 reserved[1];
 };

like, look at all those anonymous unions β€” someone was absolutely showing off and honestly? slay πŸŽ€


πŸ‘‘ Members πŸ‘‘

🫢 the unnamed union (filter side)

  • {unnamed_union} β€” anonymous, mysterious, doesn't need a name, main character energy honestly. it's anonymous.
  • filter_match β€” filter match value ✨
  • phy_data3 β€” depends on info type (see phy_data1) β€” yes bestie it's pointing you at itself in advance, iykyk.

πŸ¦‹ the unnamed union (hash side)

  • {unnamed_union} β€” also anonymous. two unnamed unions in one struct and not a single name between them, we love a lowkey icon.
  • rss_hash β€” RSS hash value πŸ”₯
  • phy_data2 β€” depends on info type (see phy_data1) β€” same deal.

πŸ’œ the middle bits

  • partial_hash β€” 31:0 ip/tcp header hash w/o some fields (such as IP SRC addr). so it's a hash, but it ghosted a few fields, no big deal πŸ’€
  • raw_xsum β€” raw xsum value
  • reserved_xsum β€” reserved high bits in the raw checksum (don't touch, it's reserved, hands off πŸ™ˆ)
  • rate_n_flags β€” RX rate/flags encoding ⭐
  • energy_a β€” energy chain A 🌈
  • energy_b β€” energy chain B 🌈
  • channel β€” channel number
  • mac_context β€” MAC context mask πŸŽ€
  • gp2_on_air_rise β€” GP2 timer value on air rise (INA)

🧚 the on-air-rise union, part two electric boogaloo

  • {unnamed_union} β€” anonymous again. three for three, obsessed.
  • tsf_on_air_rise β€” TSF value on air rise (INA), and heads up: only valid if IWL_RX_MPDU_PHY_TSF_OVERLOAD isn't set ⚠️
  • {unnamed_struct} β€” anonymous struct hanging out inside the union, living its best life.

πŸ’– the nested struct squad

  • phy_data0 β€” depends on info_type, see phy_data1
  • phy_data1 β€” valid only if IWL_RX_MPDU_PHY_TSF_OVERLOAD is set, see enum iwl_rx_phy_data1. read that twice bestie, the conditional is load-bearing 🫢

🌟 the stragglers

  • phy_data5 β€” valid only if IWL_RX_MPDU_PHY_TSF_OVERLOAD is set, see enum iwl_rx_phy_data5.
  • reserved β€” reserved. it's reserved. that's the whole thing. periodt πŸ’…
ngl there's a lot of "depends on info type" and "valid only if IWL_RX_MPDU_PHY_TSF_OVERLOAD is set" going on here β€” that's not me being vague, that's genuinely the contract. check the flag before you trust those fields, fr fr. 😭

πŸ”₯ SEE ALSO πŸ”₯

all the lore, all the siblings β€” go read these, they're literally in the kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/rx.h:

  • struct iwl_rx_phy_info(9)
  • struct iwl_rx_mpdu_res_start(9)
  • enum iwl_rx_phy_flags(9)
  • enum iwl_mvm_rx_status(9)
  • struct iwl_rx_mpdu_desc_v1(9)
  • struct iwl_rx_mpdu_desc(9)
  • struct iwl_rx_no_data(9)
  • struct iwl_rx_no_data_ver_3(9)
  • enum iwl_bar_frame_release_sta_tid(9)
  • enum iwl_bar_frame_release_ba_info(9)
  • struct iwl_bar_frame_release(9)
  • struct iwl_rss_config_cmd(9)
  • struct iwl_rxq_sync_cmd(9)
  • struct iwl_rxq_sync_notification(9)
  • enum iwl_mvm_pm_event(9)
  • struct iwl_mvm_pm_state_notification(9)
  • struct iwl_ba_window_status_notif(9)
  • struct iwl_rfh_queue_data(9)
  • struct iwl_rfh_queue_config(9)
  • struct iwl_beacon_filter_notif_v1(9)
  • struct iwl_beacon_filter_notif(9)
  • struct iwl_rx_phy_air_sniffer_ntfy(9)

like, that's a whole friend group πŸ’–


πŸŽ€ cute sign-off πŸŽ€

that's the whole page, bestie β€” this one came from ./drivers/net/wireless/intel/i... (the path, she's long), dated October 2026, sitting pretty in the Kernel API Manual. go forth, parse those descriptors, and remember: reserved means reserved πŸ’…βœ¨πŸ¦‹

bye bestie, drink some water 🫢

πŸ“¦ where this page comes from