STRUCT TID_AMPDU_TX(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ struct tid_ampdu_tx(9) πŸ‘‘

okay bestie, welcome to the Kernel API Manual, section 9 β€” this is the whole entire glow-up of struct tid_ampdu_tx, aka TID aggregation info but make it transmit. she's the Tx sister, she's booked and busy, and she's about to explain herself. periodt. πŸ’…


✨ NAME ✨

struct tid_ampdu_tx β€” TID aggregation information (Tx). yes that's literally what it is, no notes, she ate. πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

struct tid_ampdu_tx {
    struct rcu_head rcu_head;
    struct timer_list session_timer;
    struct timer_list addba_resp_timer;
    struct sk_buff_head pending;
    struct sta_info *sta;
    unsigned long state;
    unsigned long last_tx;
    u16 timeout;
    u8 dialog_token;
    u8 stop_initiator;
    bool tx_stop;
    u16 buf_size;
    u16 ssn;
    u16 failed_bar_ssn;
    bool bar_pending;
    bool amsdu;
    bool ndp;
    u8 tid;
 };

look at her. seventeen fields. main character energy fr fr. every single one is listed below, so don't you dare skip ahead πŸ‘€


🌸 MEMBERS 🌸

  • rcu_head β€” the rcu head for freeing the structure. she's the exit plan, lowkey iconic of her.
  • session_timer β€” checks if we keep Tx-ing on the TID, based on the timeout value. she's the vibe check that keeps the session alive. ⏰
  • addba_resp_timer β€” timer for the peer's response to the addba request. it's giving "waiting for the group chat to text back". 😭
  • pending β€” the pending frames queue β€” and heads up, use the sta's spinlock to protect it. πŸ”’
  • sta β€” the station we are attached to. our plus-one. 🫢
  • state β€” session state (see above). yes, "see above", that's what the manpage says, iykyk.
  • last_tx β€” jiffies of the last tx activity. timestamping the last time she spoke, honestly relatable.
  • timeout β€” session timeout value, to be filled in ADDBA requests. she's the deadline queen. πŸ‘‘
  • dialog_token β€” dialog token for the aggregation session. no cap, she's just the token.
  • stop_initiator β€” the initiator of a session stop. who hit the brakes, exactly.
  • tx_stop β€” TX DelBA frame when stopping. yes babe, announce your exit. 🌈
  • buf_size β€” reorder buffer size at the receiver. not ours! theirs. keep up. πŸ’€
  • ssn β€” starting sequence number of the session. the origin story, literally.
  • failed_bar_ssn β€” ssn of the last failed BAR tx attempt. the flop we don't talk about. πŸ™ˆ
  • bar_pending β€” BAR needs to be re-sent. she's got a draft that never got sent, we've all been there. πŸ“©
  • amsdu β€” support A-MSDU within A-MDPU. (yes, that's how the original spells it, we don't fix it, we don't touch it, we respect it. πŸŽ€)
  • ndp β€” this session is using NDP Block ACKs. fancy.
  • tid β€” the TID number. the number herself.

πŸ’– DESCRIPTION πŸ’–

so this structure's lifetime is managed by RCU, and any assignment to the array that holds it must hold the aggregation mutex. rules are rules bestie, no skipping. πŸ”’

now here's the spicy part β€” the TX path can access it under RCU lock-free if, and only if, the state has the flag HT_AGG_STATE_OPERATIONAL set. otherwise? the TX path must also acquire the spinlock and re-check the state. read the comments in the tx code that touches it, i'm begging. 😭

fr fr, "if and only if" is doing a LOT of heavy lifting in that sentence. don't be the person who ignores it. that's not a vibe, that's a bug.

⭐ SEE ALSO ⭐

Kernel file ./net/mac80211/sta_info.h enum ieee80211_sta_info_flags(9), struct tid_ampdu_rx(9), struct sta_ampdu_mlme(9), struct ieee80211_fast_tx(9), struct ieee80211_fast_rx(9), struct mesh_sta(9), struct link_sta_info(9), struct ieee80211_sta_removed_link_stats(9), struct sta_info(9), __sta_info_flush(9), sta_info_flush(9)

like the whole friend group showed up. slay. πŸ«ΆπŸ’œ


that's the page babes β€” brought to you straight out of ./net/mac80211, dated October 2026, with love. 🧚✨ go read struct tid_ampdu_rx(9) next, she misses you. πŸ“πŸ’–

πŸ“¦ where this page comes from