STRUCT IWL_MLD_BAID_DATA(9)
π 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β thetidof the session. lowercase, humble, doing its thing.baidβ thebaidof 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 updatinglast_rx_timestamponly 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β themldpointer. 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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms