ENUM MAC80211_TX_INFO_FLAGS(9)
π¦ 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 theIEEE80211_TX_CTL_FIRST_FRAGMENTflag 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 settingIEEE80211_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 withIEEE80211_TX_CTL_NO_ACKhas 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 withIEEE80211_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
- 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