ENUM MAC80211_TX_INFO_FLAGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ enum mac80211_tx_info_flags(9) β€” the Kernel API Manual, bestie edition πŸ¦‹

okay so you're digging into the kernel API, specifically the enum mac80211_tx_info_flags page, and honestly? iconic of you. this is literally the main character enum for describing transmission information/status. ngl it's a long one, so buckle up πŸŽ€


✨ NAME ✨

enum mac80211_tx_info_flags β€” the flags that describe transmission information/status. periodt.


🌸 SYNOPSIS 🌸

okay so this is the full enum, and yes, you're getting every single one of them, no skips:

enum mac80211_tx_info_flags {
    IEEE80211_TX_CTL_REQ_TX_STATUS ,
    IEEE80211_TX_CTL_ASSIGN_SEQ ,
    IEEE80211_TX_CTL_NO_ACK ,
    IEEE80211_TX_CTL_CLEAR_PS_FILT ,
    IEEE80211_TX_CTL_FIRST_FRAGMENT ,
    IEEE80211_TX_CTL_SEND_AFTER_DTIM ,
    IEEE80211_TX_CTL_AMPDU ,
    IEEE80211_TX_CTL_INJECTED ,
    IEEE80211_TX_STAT_TX_FILTERED ,
    IEEE80211_TX_STAT_ACK ,
    IEEE80211_TX_STAT_AMPDU ,
    IEEE80211_TX_STAT_AMPDU_NO_BACK ,
    IEEE80211_TX_CTL_RATE_CTRL_PROBE ,
    IEEE80211_TX_INTFL_OFFCHAN_TX_OK ,
    IEEE80211_TX_CTL_HW_80211_ENCAP ,
    IEEE80211_TX_INTFL_RETRIED ,
    IEEE80211_TX_INTFL_DONT_ENCRYPT ,
    IEEE80211_TX_CTL_NO_PS_BUFFER ,
    IEEE80211_TX_CTL_MORE_FRAMES ,
    IEEE80211_TX_INTFL_RETRANSMISSION ,
    IEEE80211_TX_INTFL_MLME_CONN_TX ,
    IEEE80211_TX_INTFL_NL80211_FRAME_TX ,
    IEEE80211_TX_CTL_LDPC ,
    IEEE80211_TX_CTL_STBC ,
    IEEE80211_TX_CTL_TX_OFFCHAN ,
    IEEE80211_TX_INTFL_TKIP_MIC_FAILURE ,
    IEEE80211_TX_CTL_NO_CCK_RATE ,
    IEEE80211_TX_STATUS_EOSP ,
    IEEE80211_TX_CTL_USE_MINRATE ,
    IEEE80211_TX_CTL_DONTFRAG ,
    IEEE80211_TX_STAT_NOACK_TRANSMITTED

};

πŸ’… Constants πŸ’…

like, here's where it gets juicy. every constant, explained with love:

  • IEEE80211_TX_CTL_REQ_TX_STATUS β€” this frame requires a TX status callback. like it's demanding receipts, fr fr.
  • IEEE80211_TX_CTL_ASSIGN_SEQ β€” okay so this one's important. the driver has to assign a sequence number to this frame, and the way it does that matters: it must take care of not overwriting the fragment number, and it should only increase the sequence number when the IEEE80211_TX_CTL_FIRST_FRAGMENT flag is set. mac80211 will properly assign sequence numbers to QoS-data frames but cannot do so correctly for non-QoS-data and management frames, because beacons need them from that counter as well and mac80211 cannot guarantee proper sequencing. if this flag is set, the driver should tell the hardware to assign a sequence number to the frame, or just assign one itself. cf. IEEE 802.11-2007 7.1.3.4.1 paragraph 3. also this flag will always be set for beacons and always be clear for frames that don't have a sequence number field. iykyk.
  • IEEE80211_TX_CTL_NO_ACK β€” tell the low level not to wait for an ack. like sending a text and not caring if they read it πŸ™ˆ.
  • IEEE80211_TX_CTL_CLEAR_PS_FILT β€” clear the powersave filter for the destination station. bye bye filter ✨.
  • IEEE80211_TX_CTL_FIRST_FRAGMENT β€” this is a first fragment of the frame. the opening act, the main character fragment πŸ’….
  • IEEE80211_TX_CTL_SEND_AFTER_DTIM β€” send this frame after the DTIM beacon. patience is a virtue bestie.
  • IEEE80211_TX_CTL_AMPDU β€” this frame should be sent as part of an A-MPDU. it's a group project now.
  • IEEE80211_TX_CTL_INJECTED β€” frame was injected, internal to mac80211. lowkey a secret agent frame.
  • IEEE80211_TX_STAT_TX_FILTERED β€” the frame was not transmitted because the destination STA was in powersave mode. and okay, note this carefully: to avoid race conditions, the filter must be set by the hardware or firmware upon receiving a frame that indicates the station went to sleep (this must be done on device to filter frames already on the queue), and it may only be unset after mac80211 gives the OK for that by setting IEEE80211_TX_CTL_CLEAR_PS_FILT (see above), since only then is it guaranteed that no more frames are in the hardware queue. no cap, this ordering is serious.
  • IEEE80211_TX_STAT_ACK β€” frame was acknowledged. slay, it got through πŸ’–.
  • IEEE80211_TX_STAT_AMPDU β€” the frame was aggregated, so the status is for the whole aggregation. it's giving team effort.
  • IEEE80211_TX_STAT_AMPDU_NO_BACK β€” no block ack was returned, so consider using block ack request (BAR). awkward, but okay.
  • IEEE80211_TX_CTL_RATE_CTRL_PROBE β€” internal to mac80211, can be set by rate control algorithms to indicate a probe rate. it will be cleared for fragmented frames (except on the last fragment). noted 🫢.
  • IEEE80211_TX_INTFL_OFFCHAN_TX_OK β€” internal to mac80211. used to indicate that a frame can be transmitted while the queues are stopped for off-channel operation. multitasking queen.
  • IEEE80211_TX_CTL_HW_80211_ENCAP β€” this frame uses hardware encapsulation (header conversion). fancy.
  • IEEE80211_TX_INTFL_RETRIED β€” completely internal to mac80211, used to indicate that a frame was already retried due to PS. been there, done that.
  • IEEE80211_TX_INTFL_DONT_ENCRYPT β€” completely internal to mac80211, used to indicate the frame should not be encrypted. no secrets here πŸ”“.
  • IEEE80211_TX_CTL_NO_PS_BUFFER β€” this frame is a response to a poll frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must be sent although the station is in powersave mode. it has to go out, no excuses.
  • IEEE80211_TX_CTL_MORE_FRAMES β€” more frames will be passed to the transmit function after the current frame. drivers can use this to kick the DMA queue only if it's unset or when the queue gets full. queue management vibes.
  • IEEE80211_TX_INTFL_RETRANSMISSION β€” this frame is being retransmitted after TX status because the destination was asleep, and it must not be modified again (no seqno assignment, no crypto, etc.). hands off, bestie πŸ™…β€β™€οΈ.
  • IEEE80211_TX_INTFL_MLME_CONN_TX β€” this frame was transmitted by the MLME code for connection establishment, and this indicates that its status should kick the MLME state machine. get it moving ✨.
  • IEEE80211_TX_INTFL_NL80211_FRAME_TX β€” frame was requested through the nl80211 MLME command. it's internal to mac80211, used to figure out whether to send TX status to user space. detective work πŸ”.
  • IEEE80211_TX_CTL_LDPC β€” tells the driver to use LDPC for this frame. fancy error correction, we love.
  • IEEE80211_TX_CTL_STBC β€” enables Space-Time Block Coding (STBC) for this frame and selects the maximum number of streams that it can use. main character signal energy πŸ”₯.
  • IEEE80211_TX_CTL_TX_OFFCHAN β€” marks this packet to be transmitted on the off-channel channel when a remain-on-channel offload is done in hardware. normal packets still flow and are expected to be handled properly by the device. side quest packet πŸ¦‹.
  • IEEE80211_TX_INTFL_TKIP_MIC_FAILURE β€” marks this packet to be used for TKIP testing. it will be sent out with an incorrect Michael MIC key to allow TKIP countermeasures to be tested. it's a test, not a real one, don't panic πŸ™ˆ.
  • IEEE80211_TX_CTL_NO_CCK_RATE β€” this frame will be sent at a non-CCK rate. this flag is actually used for management frames, especially for P2P frames not being sent at CCK rate in the 2GHz band. rate drama, honestly.
  • IEEE80211_TX_STATUS_EOSP β€” this packet marks the end of service period. when its status is reported, the service period ends. for frames in an SP that mac80211 transmits, it's already set; for driver frames, the driver may set this flag. it's also used to do the same for PS-Poll responses. the end, periodt 🌈.
  • IEEE80211_TX_CTL_USE_MINRATE β€” this frame will be sent at the lowest rate. this flag is used to send a nullfunc frame at minimum rate when the nullfunc is used for connection monitoring purposes. slow and steady πŸ“.
  • IEEE80211_TX_CTL_DONTFRAG β€” don't fragment this packet even if it would be fragmented by size. this is optional and only used for monitor injection. leave it whole, bestie.
  • IEEE80211_TX_STAT_NOACK_TRANSMITTED β€” a frame that was marked with IEEE80211_TX_CTL_NO_ACK has been successfully transmitted without any errors (like issues specific to the driver/HW). and note: this flag must not be set for frames that don't request no-ack behaviour with IEEE80211_TX_CTL_NO_ACK. read that twice, it matters πŸ‘‘

🌺 Description 🌺

so basically, these flags are used with the flags member of ieee80211_tx_info. that's the whole vibe. simple but crucial.


πŸ’œ Note πŸ’œ

if you ever have to add new flags to the enumeration, then please don't forget to update IEEE80211_TX_TEMPORARY_FLAGS when necessary. like, don't leave your bestie hanging, okay? 🫢


okay that's the big list β€” more coming in part 2, so don't panic, we're not done yet πŸ’–

πŸ’… SEE ALSO πŸ’…

okay bestie, this is the part where the man page just dumps the whole friend group at you 😭 like the whole kernel squad shows up to the party. Everything below comes from the kernel file ./include/net/mac80211.h, and every single one of these babies lives in section 9. Go say hi πŸ‘‹

  • the starter pack πŸ“š β€” Introduction(9), Calling mac80211 from interrupts(9), Warning(9), Frame format(9), mac80211 workqueue(9), mac80211 software tx queueing(9), HW timestamping(9)
  • queues & ACs, the traffic-jam girlies 🚦 β€” enum ieee80211_max_queues(9), enum ieee80211_ac_numbers(9), struct ieee80211_tx_queue_params(9)
  • channel context crew, very main character energy πŸ“‘ β€” enum ieee80211_chanctx_change(9), struct ieee80211_chan_req(9), struct ieee80211_chanctx_conf(9), enum ieee80211_chanctx_switch_mode(9), struct ieee80211_vif_chanctx_switch(9)
  • changes & events, the drama notifications πŸ”” β€” enum ieee80211_bss_change(9), enum ieee80211_event_type(9), enum ieee80211_rssi_event_data(9), struct ieee80211_rssi_event(9), enum ieee80211_mlme_event_data(9), enum ieee80211_mlme_event_status(9), struct ieee80211_mlme_event(9), struct ieee80211_ba_event(9), struct ieee80211_event(9)
  • BSS-conf extended universe ✨ β€” struct ieee80211_mu_group_data(9), struct ieee80211_ftm_responder_params(9), struct ieee80211_fils_discovery(9), struct ieee80211_parsed_tpe(9), struct ieee80211_bss_npca_params(9), struct ieee80211_bss_conf(9), struct ieee80211_nan_channel(9), struct ieee80211_nan_peer_map(9), struct ieee80211_nan_peer_sched(9)
  • the tx-flags inner circle (literally our whole page's besties) πŸ’– β€” enum mac80211_tx_control_flags(9), enum mac80211_tx_status_flags(9), enum mac80211_rate_control_flags(9), struct ieee80211_tx_rate(9), struct ieee80211_tx_info(9), struct ieee80211_tx_status(9), struct ieee80211_scan_ies(9), ieee80211_tx_info_clear_status(9)
  • rx side of the group chat πŸ“₯ β€” enum mac80211_rx_flags(9), enum mac80211_rx_encoding_flags(9), struct ieee80211_rx_status(9)
  • conf girlies, soft-launching their settings πŸŽ€ β€” enum ieee80211_conf_flags(9), enum ieee80211_conf_changed(9), enum ieee80211_smps_mode(9), struct ieee80211_conf(9), struct ieee80211_channel_switch(9)
  • vif squad, absolute icons πŸ‘‘ β€” enum ieee80211_vif_flags(9), enum ieee80211_offload_flags(9), struct ieee80211_eml_params(9), struct ieee80211_nan_sched_cfg(9), struct ieee80211_vif_cfg(9), struct ieee80211_neg_ttlm(9), enum ieee80211_neg_ttlm_res(9), struct ieee80211_vif(9), ieee80211_vif_usable_links(9), ieee80211_vif_is_mld(9), ieee80211_vif_link_active(9), wdev_to_ieee80211_vif(9), ieee80211_vif_to_wdev(9)
  • key management, keeping it locked down πŸ” β€” enum ieee80211_key_flags(9), struct ieee80211_key_conf(9), struct ieee80211_key_seq(9), enum set_key_cmd(9)
  • station state, the situationship tracker 🌸 β€” enum ieee80211_sta_state(9), enum ieee80211_sta_rx_bandwidth(9), struct ieee80211_sta_rates(9), struct ieee80211_sta_txpwr(9), struct ieee80211_sta_aggregates(9), struct ieee80211_link_sta(9), struct ieee80211_sta(9), enum sta_notify_cmd(9)
  • tx control & txq & hw, the whole hardware clique πŸ› οΈ β€” struct ieee80211_tx_control(9), struct ieee80211_txq(9), enum ieee80211_hw_flags(9), struct ieee80211_hw(9), struct ieee80211_scan_request(9), struct ieee80211_tdls_ch_sw_params(9), wiphy_to_ieee80211_hw(9), SET_IEEE80211_DEV(9), SET_IEEE80211_PERM_ADDR(9), ieee80211_free_txskb(9), ieee80211_purge_tx_queue(9)
  • the lore chapters, read these for context fr fr πŸ“– β€” Hardware crypto acceleration(9), Powersave support(9), Beacon filter support(9), Spatial multiplexing power save(9), Frame filtering(9), AP support for powersaving clients(9), HW queue control(9)
  • ops & aggregation, the business side πŸ“‹ β€” enum ieee80211_filter_flags(9), enum ieee80211_ampdu_mlme_action(9), struct ieee80211_ampdu_params(9), enum ieee80211_frame_release_type(9), enum ieee80211_rate_control_changed(9), enum ieee80211_roc_type(9), enum ieee80211_reconfig_type(9), struct ieee80211_prep_tx_info(9), struct ieee80211_ops(9)
  • hw lifecycle + LEDs, she glows πŸ’‘ β€” ieee80211_alloc_hw_nm(9), ieee80211_alloc_hw(9), ieee80211_register_hw(9), struct ieee80211_tpt_blink(9), enum ieee80211_tpt_led_trigger_flags(9), ieee80211_get_tx_led_name(9), ieee80211_get_rx_led_name(9), ieee80211_get_assoc_led_name(9), ieee80211_get_radio_led_name(9), ieee80211_create_tpt_led_trigger(9), ieee80211_unregister_hw(9), ieee80211_free_hw(9), ieee80211_restart_hw(9)
  • rx entry points, come on in πŸšͺ β€” ieee80211_rx_list(9), ieee80211_rx_napi(9), ieee80211_rx(9), ieee80211_rx_irqsafe(9), ieee80211_rx_ni(9)
  • powersave besties, napping is valid 😴 β€” ieee80211_sta_ps_transition(9), ieee80211_sta_ps_transition_ni(9), ieee80211_sta_pspoll(9), ieee80211_sta_uapsd_trigger(9), ieee80211_sta_set_buffered(9)
  • tx status & rates, the receipts 🧾 β€” ieee80211_get_tx_rates(9), ieee80211_tx_rate_update(9), ieee80211_tx_status_skb(9), ieee80211_tx_status_ext(9), ieee80211_tx_status_noskb(9), ieee80211_tx_status_ni(9), ieee80211_tx_status_irqsafe(9), ieee80211_report_low_ack(9)
  • beacon fam, always on air πŸ“£ β€” struct ieee80211_mutable_offsets(9), ieee80211_beacon_get_template(9), ieee80211_beacon_get_template_ema_index(9), struct ieee80211_ema_beacons(9), ieee80211_beacon_get_template_ema_list(9), ieee80211_beacon_free_ema_list(9), ieee80211_beacon_get_tim(9), ieee80211_beacon_get(9), ieee80211_beacon_update_cntdwn(9), ieee80211_beacon_set_cntdwn(9), ieee80211_csa_finish(9), ieee80211_beacon_cntdwn_is_complete(9), ieee80211_color_change_finish(9)
  • frame templates, copy-paste slay 🧚 β€” ieee80211_proberesp_get(9), ieee80211_pspoll_get(9), ieee80211_nullfunc_get(9), ieee80211_probereq_get(9), ieee80211_rts_get(9), ieee80211_rts_duration(9), ieee80211_ctstoself_get(9), ieee80211_ctstoself_duration(9), ieee80211_generic_frame_duration(9), ieee80211_get_buffered_bc(9)
  • TKIP & key sequence stuff, vintage but iconic πŸ•°οΈ β€” ieee80211_get_tkip_p1k_iv(9), ieee80211_get_tkip_p1k(9), ieee80211_get_tkip_rx_p1k(9), ieee80211_get_tkip_p2k(9), ieee80211_tkip_add_iv(9), ieee80211_get_key_rx_seq(9), ieee80211_set_key_rx_seq(9), ieee80211_gtk_rekey_add(9), ieee80211_gtk_rekey_notify(9), ieee80211_key_mic_failure(9), ieee80211_key_replay(9)
  • queue control, start/stop the vibe πŸš₯ β€” ieee80211_wake_queue(9), ieee80211_stop_queue(9), ieee80211_queue_stopped(9), ieee80211_stop_queues(9), ieee80211_wake_queues(9)
  • scanning, the "looking for someone" era πŸ” β€” ieee80211_scan_completed(9), ieee80211_sched_scan_results(9), ieee80211_sched_scan_stopped(9)
  • iteration nation, going through everyone's profiles πŸŒ€ β€” enum ieee80211_interface_iteration_flags(9), ieee80211_iterate_interfaces(9), ieee80211_iterate_active_interfaces(9), ieee80211_iterate_active_interfaces_atomic(9), for_each_interface(9), for_each_active_interface(9), ieee80211_iterate_active_interfaces_mtx(9), ieee80211_iterate_stations_atomic(9), for_each_station(9), ieee80211_iterate_stations_mtx(9)
  • work queues, delegating like a queen πŸ‘‘ β€” ieee80211_queue_work(9), ieee80211_queue_delayed_work(9)
  • block-ack sessions, the group project 🀝 β€” ieee80211_refresh_tx_agg_session_timer(9), ieee80211_start_tx_ba_session(9), ieee80211_start_tx_ba_cb_irqsafe(9), ieee80211_stop_tx_ba_session(9), ieee80211_stop_tx_ba_cb_irqsafe(9)
  • finding your people (and their airtime) 🫢 β€” ieee80211_find_sta(9), ieee80211_find_sta_by_ifaddr(9), ieee80211_find_sta_by_link_addrs(9), ieee80211_sta_block_awake(9), ieee80211_sta_eosp(9), ieee80211_send_eosp_nullfunc(9), ieee80211_sta_recalc_aggregates(9), ieee80211_sta_register_airtime(9), ieee80211_txq_airtime_check(9), ieee80211_txq_aql_pending(9)
  • iterating keys & chan contexts, thorough bestie πŸ—οΈ β€” ieee80211_iter_keys(9), ieee80211_iter_keys_rcu(9), ieee80211_iter_chan_contexts_atomic(9), ieee80211_iter_chan_contexts_mtx(9)
  • sad girl hours: loss, disconnect, radar 😭 β€” ieee80211_ap_probereq_get(9), ieee80211_beacon_loss(9), ieee80211_connection_loss(9), ieee80211_disconnect(9), ieee80211_resume_disconnect(9), ieee80211_hw_restart_disconnect(9), ieee80211_cqm_rssi_notify(9), ieee80211_cqm_beacon_loss_notify(9), ieee80211_radar_detected(9), ieee80211_chswitch_done(9), ieee80211_channel_switch_disconnect(9), ieee80211_request_smps(9), ieee80211_ready_on_channel(9), ieee80211_remain_on_channel_expired(9)
  • rx block-ack offload, handling it in the background πŸ’… β€” ieee80211_stop_rx_ba_session(9), ieee80211_mark_rx_ba_filtered_frames(9), ieee80211_send_bar(9), ieee80211_manage_rx_ba_offl(9), ieee80211_start_rx_ba_session_offl(9), ieee80211_stop_rx_ba_session_offl(9), ieee80211_rx_ba_timer_expired(9)
  • rate control, choosing the right speed πŸ”₯ β€” struct ieee80211_tx_rate_control(9), enum rate_control_capabilities(9), rate_control_set_rates(9)
  • caps, rssi & timing, the flex zone ⭐ β€” ieee80211_get_he_iftype_cap_vif(9), ieee80211_get_he_6ghz_capa_vif(9), ieee80211_get_eht_iftype_cap_vif(9), ieee80211_get_uhr_iftype_cap_vif(9), ieee80211_update_mu_groups(9), ieee80211_ave_rssi(9), ieee80211_calculate_rx_timestamp(9), ieee80211_report_wowlan_wakeup(9)
  • radiotap & NOA, the niche legends πŸ¦‹ β€” ieee80211_tx_prepare_skb(9), ieee80211_parse_tx_radiotap(9), struct ieee80211_noa_data(9), ieee80211_parse_p2p_noa(9), ieee80211_update_p2p_noa(9)
  • TDLS & TIDs, reserved for you 🎟️ β€” ieee80211_tdls_oper_request(9), ieee80211_reserve_tid(9), ieee80211_unreserve_tid(9)
  • txq scheduling, the queue choreography πŸ’ƒ β€” ieee80211_tx_dequeue(9), ieee80211_tx_dequeue_ni(9), ieee80211_handle_wake_tx_queue(9), ieee80211_next_txq(9), ieee80211_txq_schedule_start(9), ieee80211_schedule_txq(9), ieee80211_return_txq(9), ieee80211_txq_may_transmit(9), ieee80211_txq_get_depth(9)
  • NAN, the neighbor awareness besties πŸ§šβ€β™€οΈ β€” ieee80211_nan_func_terminated(9), ieee80211_nan_func_match(9), ieee80211_nan_sched_update_done(9), ieee80211_nan_cluster_joined(9), ieee80211_nan_try_evacuate(9)
  • airtime & templates, measuring the moment 🌈 β€” ieee80211_calc_rx_airtime(9), ieee80211_calc_tx_airtime(9), ieee80211_get_fils_discovery_tmpl(9), ieee80211_get_unsol_bcast_probe_resp_tmpl(9), ieee80211_obss_color_collision_notify(9), ieee80211_is_tx_data(9)
  • MLO & friends, multi-link main character energy πŸ¦‹ β€” ieee80211_set_active_links(9), ieee80211_set_active_links_async(9), ieee80211_send_teardown_neg_ttlm(9), ieee80211_chan_width_to_rx_bw(9), ieee80211_prepare_rx_omi_bw(9), ieee80211_finalize_rx_omi_bw(9), ieee80211_vif_nan_started(9), ieee80211_encrypt_tx_skb(9)

and that's the whole roster, bestie, no gatekeeping πŸ’œ this page ships out of ./include/net in the October 2026 edition, and it's filed under enum mac80211_tx_info_flags(9) β€” go read the rest of the squad and stan responsibly 🫢✨

πŸ“¦ where this page comes from