STRUCT IWL_MLD_BAID_DATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_mld_baid_data β€” NAME

okay so bestie, this page is from the Kernel API Manual, and it's all about struct iwl_mld_baid_data β€” which is literally the Block Ack session data struct. that's it, that's the vibe πŸŽ€


✨ SYNOPSIS ✨

no cap, here's the whole struct, character for character, don't touch:

struct iwl_mld_baid_data {
    struct rcu_head rcu_head;
    u32 sta_mask;
    u8 tid;
    u8 baid;
    u16 buf_size;
    u16 entries_per_queue;
    u16 timeout;
    struct timer_list session_timer;
    unsigned long last_rx_timestamp;
    struct iwl_mld_baid_data **rcu_ptr;
    struct iwl_mld *mld;
    struct iwl_mld_reorder_buffer reorder_buf[IWL_MAX_RX_HW_QUEUES];
    struct iwl_mld_reorder_buf_entry entries[];
};

πŸ¦‹ Members πŸ¦‹

okay so now we go member by member, and honestly? each one is kind of iconic in its own way 🫢

  • rcu_head β€” the RCU head, and its whole job is freeing this data. that's it. that's the member πŸ’€
  • sta_mask β€” the station mask for the BAID. short and sweet, we love that for it ✨
  • tid β€” the tid of the session. lowercase, humble, doing its thing.
  • baid β€” the baid of the session. also just vibing.
  • buf_size β€” the reorder buffer size, as set by the last ADDBA request. so whatever ADDBA asked for last, that's what this is, periodt.
  • entries_per_queue β€” the number of buffers per queue. and lowkey here's the tea: this actually gets aligned up to avoid cache line sharing between queues. it's giving "i've been rounded up for my own good" πŸ™ˆ
  • timeout β€” the timeout value specified in the ADDBA request. fr fr, it's just the timeout from the request.
  • session_timer β€” okay so this timer is set to expire after 2 * timeout. why doubled? because we want to minimize the cache bouncing by updating last_rx_timestamp only once after the timeout has passed. and if no packets show up within this period, it informs mac80211 to kick off the delBA flow, which terminates the BA session. so yeah β€” no packets = session over, no cap 😭
  • last_rx_timestamp β€” the timestamp of the last received packet, and it's measured in jiffies. but here's the detail: this value only gets updated when the configured timeout has passed since the last update, all to minimize cache bouncing between RX queues. main character energy: minimal, efficient, doesn't do extra work πŸ’…
  • rcu_ptr β€” the BA data, accessed under RCU protection. protected and proud πŸ‘‘
  • mld β€” the mld pointer. it's needed for the timer context, so like... it's the one holding it down when the timer needs a hand 🫑
  • reorder_buf β€” the reorder buffer, allocated per queue. one for every queue, no sharing, no drama.
  • entries β€” data. literal data. the flexible array member doing the most by saying the least 🌸
quick vibe check: everything here is straight from the kernel docs β€” no invented behaviour, no extra tips, just the struct's actual business πŸ’–

🌈 SEE ALSO 🌈

go check these out, they're all right there in Kernel file ./drivers/net/wireless/intel/iwlwifi/mld/agg.h:

  • struct iwl_mld_reorder_buffer(9)
  • struct iwl_mld_reorder_buf_entry(9)
  • struct iwl_mld_delba_data(9)
  • enum iwl_mld_reorder_result(9)

iykyk, it's a whole little friend group 🧚


and that's the page, bestie! 🌸 it's from the Kernel API Manual, the source path is ./drivers/net/wireless/intel/i... (yes it really is truncated like that in the original, don't come for me πŸ’€), and the date on it is October 2026. mwah, go read some kernel headers, ily πŸŽ€πŸ’œ

πŸ“¦ where this page comes from