ENUM IEEE80211_HW_FLAGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay bestie, this is the enum ieee80211_hw_flags(9) page: the hardware flags enum. Think of it as the little checklist of hardware vibes β€” every flag is literally a capability your driver/hardware is telling the stack about. πŸ’…


✨ SYNOPSIS ✨

here's the whole enum in its natural habitat, character-for-character:

       enum ieee80211_hw_flags {
           IEEE80211_HW_HAS_RATE_CONTROL ,
           IEEE80211_HW_RX_INCLUDES_FCS ,
           IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING ,
           IEEE80211_HW_SIGNAL_UNSPEC ,
           IEEE80211_HW_SIGNAL_DBM ,
           IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC ,
           IEEE80211_HW_SPECTRUM_MGMT ,
           IEEE80211_HW_AMPDU_AGGREGATION ,
           IEEE80211_HW_SUPPORTS_PS ,
           IEEE80211_HW_PS_NULLFUNC_STACK ,
           IEEE80211_HW_SUPPORTS_DYNAMIC_PS ,
           IEEE80211_HW_MFP_CAPABLE ,
           IEEE80211_HW_WANT_MONITOR_VIF ,
           IEEE80211_HW_NO_VIRTUAL_MONITOR ,
           IEEE80211_HW_NO_AUTO_VIF ,
           IEEE80211_HW_SW_CRYPTO_CONTROL ,
           IEEE80211_HW_SUPPORT_FAST_XMIT ,
           IEEE80211_HW_REPORTS_TX_ACK_STATUS ,
           IEEE80211_HW_CONNECTION_MONITOR ,
           IEEE80211_HW_QUEUE_CONTROL ,
           IEEE80211_HW_SUPPORTS_PER_STA_GTK ,
           IEEE80211_HW_AP_LINK_PS ,
           IEEE80211_HW_TX_AMPDU_SETUP_IN_HW ,
           IEEE80211_HW_SUPPORTS_RC_TABLE ,
           IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF ,
           IEEE80211_HW_TIMING_BEACON_ONLY ,
           IEEE80211_HW_SUPPORTS_HT_CCK_RATES ,
           IEEE80211_HW_CHANCTX_STA_CSA ,
           IEEE80211_HW_SUPPORTS_CLONED_SKBS ,
           IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS ,
           IEEE80211_HW_TDLS_WIDER_BW ,
           IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU ,
           IEEE80211_HW_BEACON_TX_STATUS ,
           IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR ,
           IEEE80211_HW_SUPPORTS_REORDERING_BUFFER ,
           IEEE80211_HW_USES_RSS ,
           IEEE80211_HW_TX_AMSDU ,
           IEEE80211_HW_TX_FRAG_LIST ,
           IEEE80211_HW_REPORTS_LOW_ACK ,
           IEEE80211_HW_SUPPORTS_TX_FRAG ,
           IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA ,
           IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP ,
           IEEE80211_HW_BUFF_MMPDU_TXQ ,
           IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW ,
           IEEE80211_HW_STA_MMPDU_TXQ ,
           IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN ,
           IEEE80211_HW_SUPPORTS_MULTI_BSSID ,
           IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID ,
           IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT ,
           IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD ,
           IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD ,
           IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP ,
           IEEE80211_HW_DETECTS_COLOR_COLLISION ,
           IEEE80211_HW_MLO_MCAST_MULTI_LINK_TX ,
           IEEE80211_HW_DISALLOW_PUNCTURING ,
           IEEE80211_HW_HANDLES_QUIET_CSA ,
           IEEE80211_HW_STRICT ,
           IEEE80211_HW_SUPPORTS_NDP_BLOCKACK ,
           NUM_IEEE80211_HW_FLAGS

       };

πŸŽ€ Constants πŸŽ€

okay so these are the constants, and every single one matters β€” no skipping, bestie. πŸ’–

  • IEEE80211_HW_HAS_RATE_CONTROL β€” The hardware or firmware includes rate control, and cannot be controlled by the stack. As such, no rate control algorithm should be instantiated, and the TX rate reported to userspace will be taken from the TX status instead of the rate control algorithm. Note that this requires that the driver implement a number of callbacks so it has the correct information, it needs to have the set_rts_threshold callback and must look at the BSS config use_cts_prot for G/N protection, use_short_slot for slot timing in 2.4 GHz and use_short_preamble for preambles for CCK frames. 🫢
  • IEEE80211_HW_RX_INCLUDES_FCS β€” Indicates that received frames passed to the stack include the FCS at the end. literally that's the whole vibe check. ✨
  • IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING β€” Some wireless LAN chipsets buffer broadcast/multicast frames for power saving stations in the hardware/firmware and others rely on the host system for such buffering. This option is used to configure the IEEE 802.11 upper layer to buffer broadcast and multicast frames when there are power saving stations so that the driver can fetch them with ieee80211_get_buffered_bc. πŸŽ€
  • IEEE80211_HW_SIGNAL_UNSPEC β€” Hardware can provide signal values but we don't know its units. We expect values between 0 and max_signal. If possible please provide dB or dBm instead. ngl, dBm is the glow-up here. 🌈
  • IEEE80211_HW_SIGNAL_DBM β€” Hardware gives signal values in dBm, decibel difference from one milliwatt. This is the preferred method since it is standardized between different devices. max_signal does not need to be set. iconic, honestly. πŸ‘‘
  • IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC β€” This device needs to get data from beacon before association (i.e. dtim_period). πŸ¦‹
  • IEEE80211_HW_SPECTRUM_MGMT β€” Hardware supports spectrum management defined in 802.11h Measurement, Channel Switch, Quieting, TPC. fancy spectrum behavior activated. πŸ’…
  • IEEE80211_HW_AMPDU_AGGREGATION β€” Hardware supports 11n A-MPDU aggregation. πŸ”₯
  • IEEE80211_HW_SUPPORTS_PS β€” Hardware has power save support (i.e. can go to sleep). nap mode: supported. 😴
  • IEEE80211_HW_PS_NULLFUNC_STACK β€” Hardware requires nullfunc frame handling in stack, implies stack support for dynamic PS. 🫢
  • IEEE80211_HW_SUPPORTS_DYNAMIC_PS β€” Hardware has support for dynamic PS. ✨
  • IEEE80211_HW_MFP_CAPABLE β€” Hardware supports management frame protection (MFP, IEEE 802.11w). secure little vibe. πŸ›‘οΈ
  • IEEE80211_HW_WANT_MONITOR_VIF β€” The driver would like to be informed of a virtual monitor interface when monitor interfaces are the only active interfaces. πŸ‘€
  • IEEE80211_HW_NO_VIRTUAL_MONITOR β€” The driver would like to be informed of any monitor interface, as well as their configured channel. This is useful for supporting multiple monitor interfaces on different channels. multi-monitor main character energy. πŸ’œ
  • IEEE80211_HW_NO_AUTO_VIF β€” The driver would like for no wlanX to be created. It is expected user-space will create vifs as desired (and thus have them named as desired). name it yourself, bestie. πŸŽ€
  • IEEE80211_HW_SW_CRYPTO_CONTROL β€” The driver wants to control which of the crypto algorithms can be done in software β€” so don't automatically try to fall back to it if hardware crypto fails, but do so only if the driver returns 1. This also forces the driver to advertise its supported cipher suites. πŸ™ˆ
  • IEEE80211_HW_SUPPORT_FAST_XMIT β€” The driver/hardware supports fast-xmit, this currently requires only the ability to calculate the duration for frames. zoom zoom. ⚑
  • IEEE80211_HW_REPORTS_TX_ACK_STATUS β€” Hardware can provide ack status reports of Tx frames to the stack. receipts, but for frames. πŸ“¬
  • IEEE80211_HW_CONNECTION_MONITOR β€” The hardware performs its own connection monitoring, including periodic keep-alives to the AP and probing the AP on beacon loss. it's giving self-sufficient. πŸ’…
  • IEEE80211_HW_QUEUE_CONTROL β€” The driver wants to control per-interface queue mapping in order to use different queues (not just one per AC) for different virtual interfaces. See the doc section on HW queue control for more details. queue choreography, lowkey. 🩰
  • IEEE80211_HW_SUPPORTS_PER_STA_GTK β€” The device's crypto engine supports per-station GTKs as used by IBSS RSN or during fast transition. If the device doesn't support per-station GTKs, but can be asked not to decrypt group addressed frames, then IBSS RSN support is still possible but software crypto will be used. Advertise the wiphy flag only in that case. πŸ”
  • IEEE80211_HW_AP_LINK_PS β€” When operating in AP mode the device autonomously manages the PS status of connected stations. When this flag is set mac80211 will not trigger PS mode for connected stations based on the PM bit of incoming frames. Use ieee80211_start_ps/ieee8021_end_ps to manually configure the PS mode of connected stations. πŸ‘‘
  • IEEE80211_HW_TX_AMPDU_SETUP_IN_HW β€” The device handles TX A-MPDU session setup strictly in HW. mac80211 should not attempt to do this in software. hardware said "I got it." πŸ’ͺ
  • IEEE80211_HW_SUPPORTS_RC_TABLE β€” The driver supports using a rate selection table provided by the rate control algorithm. πŸ“Š
  • IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF β€” Use the P2P Device address for any P2P Interface. This will be honoured even if more than one interface is supported. πŸ’–
  • IEEE80211_HW_TIMING_BEACON_ONLY β€” Use sync timing from beacon frames only, to allow getting TBTT of a DTIM beacon. ⏱️
  • IEEE80211_HW_SUPPORTS_HT_CCK_RATES β€” Hardware supports mixing HT/CCK rates and can cope with CCK rates in an aggregation session (e.g. by not using aggregation for such frames.) πŸŒ€
  • IEEE80211_HW_CHANCTX_STA_CSA β€” Support 802.11h based channel-switch (CSA) for a single active channel while using channel contexts. When support is not enabled the default action is to disconnect when getting the CSA frame. ⚠️
  • IEEE80211_HW_SUPPORTS_CLONED_SKBS β€” The driver will never modify the payload or tailroom of TX skbs without copying them first. no sneaky edits, periodt. 🚫
  • IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS β€” The HW supports scanning on all bands in one command, mac80211 doesn't have to run separate scans per band. one scan, all bands, efficiency slay. 🌈
  • IEEE80211_HW_TDLS_WIDER_BW β€” The device/driver supports wider bandwidth than the BSS bandwidth for a TDLS link on the base channel. πŸ¦‹
  • IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU β€” The driver supports receiving A-MSDUs within A-MPDU. πŸŽ€
  • IEEE80211_HW_BEACON_TX_STATUS β€” The device/driver provides TX status for sent beacons. beacon receipts! πŸ“¬
  • IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR β€” Hardware (or driver) requires that each station has a unique address, i.e. each station entry can be identified by just its MAC address; this prevents, for example, the same station from connecting to two virtual AP interfaces at the same time. Note that this doesn't apply for NAN, in which the peer's NMI address can be equal to its NDI address. 🫢
  • IEEE80211_HW_SUPPORTS_REORDERING_BUFFER β€” Hardware (or driver) manages the reordering buffer internally, guaranteeing mac80211 receives frames in order and does not need to manage its own reorder buffer or BA session timeout. in-order delivery, no cap. ✨
  • IEEE80211_HW_USES_RSS β€” The device uses RSS and thus requires parallel RX, which implies using per-CPU station statistics. parallel RX, per-CPU stats, all the multiqueue vibes. πŸ’œ
  • IEEE80211_HW_TX_AMSDU β€” hardware (or driver) supports software aggregated A-MSDU frames ✨. It requires software tx queueing and fast-xmit support. When not using minstrel/minstrel_ht rate control, the driver must limit the maximum A-MSDU size based on the current tx rate by setting max_rc_amsdu_len in struct ieee80211_sta.
  • IEEE80211_HW_TX_FRAG_LIST β€” hardware (or driver) supports sending frag_list skbs, which is needed for zero-copy software A-MSDU πŸŽ€.
  • IEEE80211_HW_REPORTS_LOW_ACK β€” the driver (or firmware) reports a low ack event by ieee80211_report_low_ack based on its own algorithm. For such drivers, the mac80211 packet loss mechanism will not be triggered, and the driver is completely depending on firmware event for station kickout πŸ‘€.
  • IEEE80211_HW_SUPPORTS_TX_FRAG β€” hardware does fragmentation by itself. The stack will not do fragmentation. The callback for set_frag_threshold should be set as well 🫢.
  • IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA β€” hardware supports buffer STA on TDLS links πŸ’–.
  • IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP β€” the driver (or firmware) doesn't support QoS NDP for AP probing β€” that's most likely a driver bug πŸ’€.
  • IEEE80211_HW_BUFF_MMPDU_TXQ β€” use the TXQ for bufferable MMPDUs; this of course requires the driver to use TXQs to start with 🌸.
  • IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW β€” (Hardware) rate control supports VHT extended NSS BW (dot11VHTExtendedNSSBWCapable). This flag will be set if the selected rate control algorithm sets RATE_CTRL_CAPA_VHT_EXT_NSS_BW, but if the rate control is built-in then it must be set by the driver. See also the documentation for that flag ✨.
  • IEEE80211_HW_STA_MMPDU_TXQ β€” use the extra non-TID per-station TXQ for all MMPDUs on station interfaces. This of course requires the driver to use TXQs to start with πŸ’….
  • IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN β€” driver does not report accurate A-MPDU length in tx status information πŸ™ˆ.
  • IEEE80211_HW_SUPPORTS_MULTI_BSSID β€” hardware supports multi BSSID πŸ‘‘.
  • IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID β€” hardware supports multi BSSID only for HE APs. Applies if IEEE80211_HW_SUPPORTS_MULTI_BSSID is set πŸ¦‹.
  • IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT β€” the card and driver is only aggregating MPDUs with the same keyid, allowing mac80211 to keep Tx A-MPDU sessions active while rekeying with Extended Key ID πŸ”₯.
  • IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD β€” hardware supports tx encapsulation offload πŸ’œ.
  • IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD β€” hardware supports rx decapsulation offload 🌈.
  • IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP β€” hardware supports concurrent rx decapsulation offload and passing raw 802.11 frames for monitor iface. If this is supported, the driver must pass both 802.3 frames for real usage and 802.11 frames with RX_FLAG_ONLY_MONITOR set for monitor to the stack 🧚.
  • IEEE80211_HW_DETECTS_COLOR_COLLISION β€” HW/driver has support for BSS color collision detection and doesn't need it in software ⭐.
  • IEEE80211_HW_MLO_MCAST_MULTI_LINK_TX β€” hardware/driver handles transmitting multicast frames on all links, mac80211 should not do that πŸ’–.
  • IEEE80211_HW_DISALLOW_PUNCTURING β€” HW requires disabling puncturing in EHT and connecting with a lower bandwidth instead πŸŽ€.
  • IEEE80211_HW_HANDLES_QUIET_CSA β€” HW/driver handles quieting for CSA, so no need to stop queues. This really should be set by a driver that implements MLO, so operation can continue on other links when one link is switching πŸ’….
  • IEEE80211_HW_STRICT β€” strictly enforce certain things mandated by the spec but otherwise ignored/worked around for interoperability. This is a HW flag so drivers can opt in according to their own control, e.g. in testing πŸ”₯.
  • IEEE80211_HW_SUPPORTS_NDP_BLOCKACK β€” HW can transmit/receive S1G NDP BlockAck frames 🌸.
  • NUM_IEEE80211_HW_FLAGS β€” number of hardware flags, used for sizing arrays 🫢.

πŸ’– DESCRIPTION πŸ’–

These flags are used to indicate hardware capabilities to the stack β€” like little β€œhey bestie, here’s what I can do” signals. Generally, flags here should have their meaning done in a way that the simplest hardware doesn't need setting any particular flags. There are some exceptions to this rule, however, so you are advised to review these flags carefully πŸ‘‘βœ¨.

πŸ’– SEE ALSO πŸ’–

okay bestie, this is the see-also motherload 😭 The Kernel file callout is ./include/net/mac80211.h β€” exact path, no edits, no cap 🏠. Below is every single cross-reference from the original, in order, zero skips. It’s giving β€œfestival lineup” and yes, all of them are invited 🫢.

the whole lineup, in order, no cap 🫢


that’s the whole see-also universe, bestie πŸ’…βœ¨ The source path on this glow-up is ./include/net, the date stamp is October 2026, and the page title is enum ieee80211_hw_flags(9). Go be iconic with your cross-references πŸŽ€πŸ’–

πŸ“¦ where this page comes from