ENUM MAC80211_RX_FLAGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

enum mac80211_rx_flags β€” receive flags πŸ’…

okay so this is the enum that holds all the little flaggy flags you slap onto a received frame in mac80211, and every single one of them is down below, no skips, no cap ✨


πŸŽ€ SYNOPSIS πŸŽ€

enum mac80211_rx_flags {
    RX_FLAG_MMIC_ERROR ,
    RX_FLAG_DECRYPTED ,
    RX_FLAG_ONLY_MONITOR ,
    RX_FLAG_MMIC_STRIPPED ,
    RX_FLAG_IV_STRIPPED ,
    RX_FLAG_FAILED_FCS_CRC ,
    RX_FLAG_FAILED_PLCP_CRC ,
    RX_FLAG_MACTIME_IS_RTAP_TS64 ,
    RX_FLAG_NO_SIGNAL_VAL ,
    RX_FLAG_AMPDU_DETAILS ,
    RX_FLAG_PN_VALIDATED ,
    RX_FLAG_DUP_VALIDATED ,
    RX_FLAG_AMPDU_LAST_KNOWN ,
    RX_FLAG_AMPDU_IS_LAST ,
    RX_FLAG_AMPDU_DELIM_CRC_ERROR ,
    RX_FLAG_MACTIME ,
    RX_FLAG_MACTIME_PLCP_START ,
    RX_FLAG_MACTIME_START ,
    RX_FLAG_MACTIME_END ,
    RX_FLAG_SKIP_MONITOR ,
    RX_FLAG_AMSDU_MORE ,
    RX_FLAG_RADIOTAP_TLV_AT_END ,
    RX_FLAG_MIC_STRIPPED ,
    RX_FLAG_ALLOW_SAME_PN ,
    RX_FLAG_ICV_STRIPPED ,
    RX_FLAG_AMPDU_EOF_BIT ,
    RX_FLAG_AMPDU_EOF_BIT_KNOWN ,
    RX_FLAG_RADIOTAP_HE ,
    RX_FLAG_RADIOTAP_HE_MU ,
    RX_FLAG_RADIOTAP_LSIG ,
    RX_FLAG_NO_PSDU ,
    RX_FLAG_8023 ,
    RX_FLAG_RADIOTAP_VHT

};

that's thirty-three constants bestie, count 'em, they're all getting explained one by one πŸ‘‘


πŸ’– Constants πŸ’–

  • RX_FLAG_MMIC_ERROR β€” a Michael MIC error got reported on this frame 😭. use it together with RX_FLAG_MMIC_STRIPPED, they're a matching set fr fr.
  • RX_FLAG_DECRYPTED β€” this frame was decrypted in hardware. hardware ate that, no notes πŸ’…
  • RX_FLAG_ONLY_MONITOR β€” report this frame only to monitor interfaces, and don't process it in any regular way. lowkey useful when drivers offload some frames but still want to report them for sniffing purposes πŸ‘€
  • RX_FLAG_MMIC_STRIPPED β€” the Michael MIC is stripped off this frame, and verification has been done by the hardware. she's already been checked, don't worry about it ✨
  • RX_FLAG_IV_STRIPPED β€” the IV and ICV are stripped from this frame. ⚠️ if this flag is set, the stack cannot do any replay detection, hence the driver or hardware will have to do that. so like... somebody's gotta do it, and it's not gonna be the stack πŸ™ˆ
  • RX_FLAG_FAILED_FCS_CRC β€” set this flag if the FCS check failed on the frame πŸ’€
  • RX_FLAG_FAILED_PLCP_CRC β€” set this flag if the PCLP check failed on the frame πŸ’€
  • RX_FLAG_MACTIME_IS_RTAP_TS64 β€” the timestamp passed in the RX status mactime is only for use in the radiotap timestamp header, and is not otherwise a valid mactime value. note this is a separate flag so that we continue to see RX_FLAG_MACTIME as unset πŸ‘‘. also note that in this case the timestamp is reported to be 64 bits wide, not just 32 🫢
  • RX_FLAG_NO_SIGNAL_VAL β€” the signal strength value is not present. valid only for data frames (mainly A-MPDU) πŸŽ€
  • RX_FLAG_AMPDU_DETAILS β€” the A-MPDU details are known, and in particular the reference number (ampdu_reference) must be populated and must be a distinct number for each A-MPDU πŸ¦‹
  • RX_FLAG_PN_VALIDATED β€” currently only valid for CCMP/GCMP frames, this flag indicates that the PN was verified for replay protection. note that this flag is also currently only supported when a frame is also decrypted (ie. RX_FLAG_DECRYPTED must be set) ⭐
  • RX_FLAG_DUP_VALIDATED β€” the driver should set this flag if it did de-duplication by itself. doing it yourself? iconic, mark it πŸ’…
  • RX_FLAG_AMPDU_LAST_KNOWN β€” the last subframe is known, and it should be set on all subframes of a single A-MPDU 🌸
  • RX_FLAG_AMPDU_IS_LAST β€” this subframe is the last subframe of the A-MPDU, she's the finale 🎬
  • RX_FLAG_AMPDU_DELIM_CRC_ERROR β€” a delimiter CRC error has been detected on this subframe 😭
  • RX_FLAG_MACTIME β€” the timestamp passed in the RX status (mactime field) is valid if this field is non-zero, and the position where the timestamp was sampled depends on the value ⌚
  • RX_FLAG_MACTIME_PLCP_START β€” the timestamp passed in the RX status (mactime field) is valid and contains the time the SYNC preamble was received ⏱️
  • RX_FLAG_MACTIME_START β€” the timestamp passed in the RX status (mactime field) is valid and contains the time the first symbol of the MPDU was received. this is useful in monitor mode and for proper IBSS merging πŸ’–
  • RX_FLAG_MACTIME_END β€” the timestamp passed in the RX status (mactime field) is valid and contains the time the last symbol of the MPDU (including FCS) was received 🏁
  • RX_FLAG_SKIP_MONITOR β€” process and report the frame to all interfaces except monitor interfaces. useful if drivers offload some frames but still want to report them for sniffing purposes πŸ‘€
  • RX_FLAG_AMSDU_MORE β€” some drivers may prefer to report separate A-MSDU subframes instead of one huge frame, for performance reasons. all but the last MSDU from an A-MSDU should have this flag set. e.g. if an A-MSDU has 3 frames, the first 2 must have the flag set, while the 3rd (last) one must not have this flag set 🫢. the flag is used to deal with retransmission/duplication recovery properly, since A-MSDU subframes share the same sequence number. reported subframes can be either regular MSDU or singly A-MSDUs. ⚠️ subframes must not be interleaved with other frames.
  • RX_FLAG_RADIOTAP_TLV_AT_END β€” this frame contains radiotap TLVs in the skb->data (before the 802.11 header). if used, the SKB's mac_header pointer must be set to point to the 802.11 header after the TLVs, and any padding added after TLV data to align to 4 must be cleared by the driver putting the TLVs in the skb 🧚
  • RX_FLAG_MIC_STRIPPED β€” the mic was stripped of this packet, and decryption was done by the hardware ✨
  • RX_FLAG_ALLOW_SAME_PN β€” allow the same PN as the same packet before. this is used for AMSDU subframes, which can have the same PN as the first subframe πŸ’«
  • RX_FLAG_ICV_STRIPPED β€” the ICV is stripped from this frame. CRC checking must be done in the hardware ⚠️
  • RX_FLAG_AMPDU_EOF_BIT β€” value of the EOF bit in the A-MPDU delimiter for this frame πŸ”₯
  • RX_FLAG_AMPDU_EOF_BIT_KNOWN β€” the EOF value is known βœ…
  • RX_FLAG_RADIOTAP_HE β€” HE radiotap data is present (struct ieee80211_radiotap_he, mac80211 will fill in
  • RX_FLAG_RADIOTAP_HE_MU β€” HE MU radiotap data is present (struct ieee80211_radiotap_he_mu) πŸ¦‹
  • RX_FLAG_RADIOTAP_LSIG β€” L-SIG radiotap data is present 🌈
  • RX_FLAG_NO_PSDU β€” use the frame only for radiotap reporting, with the "0-length PSDU" field included there. the value for it is in struct ieee80211_rx_status. ⚠️ note that if this value isn't known, the frame shouldn't be reported at all πŸ™ˆ
  • RX_FLAG_8023 β€” the frame has an 802.3 header (decap offload performed by hardware or driver) πŸ’…
  • RX_FLAG_RADIOTAP_VHT β€” VHT radiotap data is present ⭐

🌈 Description 🌈

these flags are used with the flag member of struct ieee80211_rx_status 🫢

  • DATA3_DATA_MCS
  • DATA3_DATA_DCM
  • DATA3_CODING
  • DATA5_GI
  • DATA5_DATA_BW_RU_ALLOC
  • DATA6_NSTS
  • DATA3_STBC

...from the RX info data, so leave those zeroed when building this data) πŸŽ€


πŸ’Œ okay bestie that's the flags tour and the description β€” but we're not done yet, there's more of this page coming, so hold that thought πŸ“

πŸ’– SEE ALSO πŸ’–

okay bestie, deep breath, because this list is the entire mac80211 cinematic universe in one place. every single one is a (9) manual page, and every single one is listed below, exactly, because I would never do you like that. think of it as the group chat member list β€” huge, chaotic, lowkey iconic 🫢


🌸 the actual file + the orientation docs

  • Kernel file ./include/net/mac80211.h β€” yes, the header itself gets a mention, it's that girl
  • Introduction(9)
  • Calling mac80211 from interrupts(9)
  • Warning(9)
  • Frame format(9)
  • mac80211 workqueue(9)
  • mac80211 software tx queueing(9)
  • HW timestamping(9)

πŸŽ€ queues & access categories

  • enum ieee80211_max_queues(9)
  • enum ieee80211_ac_numbers(9)
  • struct ieee80211_tx_queue_params(9)

πŸ¦‹ channel context era

  • 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)

✨ bss changes & the event saga

  • 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 and its extended family

  • 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)

πŸ”₯ tx flags & friends

  • enum mac80211_tx_info_flags(9)
  • 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)
  • enum mac80211_rx_encoding_flags(9)
  • struct ieee80211_rx_status(9)

πŸ’… conf & channel switch

  • enum ieee80211_conf_flags(9)
  • enum ieee80211_conf_changed(9)
  • enum ieee80211_smps_mode(9)
  • struct ieee80211_conf(9)
  • struct ieee80211_channel_switch(9)

πŸ‘‘ the vif section (main character energy)

πŸ”‘ keys, sta, and the little helpers

  • enum ieee80211_key_flags(9)
  • struct ieee80211_key_conf(9)
  • struct ieee80211_key_seq(9)
  • enum set_key_cmd(9)
  • 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)
  • struct ieee80211_tx_control(9)
  • struct ieee80211_txq(9)

🌸 hw & registration bits

🧚 the feature-explainer girlies

  • 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, ampdu, and alloc/register

  • 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)
  • ieee80211_alloc_hw_nm(9)
  • ieee80211_alloc_hw(9)
  • ieee80211_register_hw(9)

πŸ’œ LED trigger corner (underrated fr)

πŸ“ rx & powersave

πŸŽ€ tx status, all the flavours

πŸ¦‹ beacon template supremacy

✨ frame-getters & duration math

πŸ”₯ tkip & key replay things

πŸ’… queue control & scanning

🌈 iteration girlies (and the macros)

πŸŽ€ block-ack session chaos

⭐ sta lookups & airtime

🧚 iterators, keys & chanctx

πŸ’€ loss, disconnect & radar

πŸ“ rx block-ack, offline edition

πŸ‘‘ rate control, caps & the great misc pile

πŸ’œ NAN, airtime & the very last stretch


and that's the whole roster, no skips, no cuts, we ate and left zero crumbs πŸ“

ngl the best way to survive this list is to pick like three that sound relevant and let the rest be background lore. they'll still be there when you need them πŸ’…

okay that's genuinely it, bestie β€” you made it through the entire page. this one lives at ./include/net (yeah, that's the source path), it's the October 2026 version, and the page is enum mac80211_rx_flags(9). go hydrate, you earned it πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from