ENUM NL80211_PEER_MEASUREMENT_FTM_REQ(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌈 enum nl80211_peer_measurement_ftm_req(9) 🌈

okay bestie so this is the Kernel API Manual page for enum nl80211_peer_measurement_ftm_req β€” yes the name is a whole mouthful, iykyk β€” and it's literally the attribute list for FTM requests. We're doing this, it's giving wifi ranging lore and honestly it eats. πŸ’…


✨ NAME ✨

enum nl80211_peer_measurement_ftm_req β€” FTM request attributes πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

enum nl80211_peer_measurement_ftm_req {
    __NL80211_PMSR_FTM_REQ_ATTR_INVALID ,
    NL80211_PMSR_FTM_REQ_ATTR_ASAP ,
    NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE ,
    NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP ,
    NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD ,
    NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION ,
    NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST ,
    NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES ,
    NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI ,
    NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC ,
    NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED ,
    NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED ,
    NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK ,
    NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR ,
    NL80211_PMSR_FTM_REQ_ATTR_RSTA ,
    NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS ,
    NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS ,
    NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME ,
    NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION ,
    NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS ,
    NL80211_PMSR_FTM_REQ_ATTR_PAD ,
    NL80211_PMSR_FTM_REQ_ATTR_INGRESS ,
    NL80211_PMSR_FTM_REQ_ATTR_EGRESS ,
    NL80211_PMSR_FTM_REQ_ATTR_PD_SUPPRESS_RESULTS ,
    NUM_NL80211_PMSR_FTM_REQ_ATTR ,
    NL80211_PMSR_FTM_REQ_ATTR_MAX

};

like, that's the whole roster. every single one is iconic in its own way, no cap. πŸ‘‘


πŸ’– CONSTANTS πŸ’–

okay so here's the breakdown, one by one, main character energy for each:

  • __NL80211_PMSR_FTM_REQ_ATTR_INVALID β€” invalid. that's it, that's the vibe. placeholder queen. πŸ«₯
  • NL80211_PMSR_FTM_REQ_ATTR_ASAP β€” ASAP mode requested (flag). yes bestie, as soon as possible, we are NOT waiting. ⚑
  • NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE β€” preamble type (see enum nl80211_preamble), optional for DMG (u32). it's a u32, keep up. πŸ¦‹
  • NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP β€” number of bursts exponent as in 802.11-2016 9.4.2.168 "Fine Timing Measurement Parameters element" (u8, 0-15, optional with default 15 i.e. "no preference". No limit for non-EDCA ranging). so u8, 0 through 15, default 15 which literally means "no preference", and for non-EDCA ranging there's like, no limit. periodt. πŸ”₯
  • NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD β€” interval between bursts in units of 100ms (u16, optional with default 0). u16, default 0, measured in 100ms chunks. πŸ•°οΈ
  • NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION β€” burst duration, as in 802.11-2016 Table 9-257 "Burst Duration field encoding" (u8, 0-15, optional with default 15 i.e. "no preference"). For non-EDCA ranging, this is the burst duration in milliseconds (optional with default 0, i.e. let the device decide). two modes bestie, don't mix them up: EDCA-style is u8 0-15 default 15 ("no preference"), and non-EDCA is literally milliseconds with default 0 so the device picks. πŸŽ€
  • NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST β€” (Optional) number of successful FTM frames requested per burst (u8, 0-31, optional with default 0 i.e. "no preference") If the attribute is absent ("no preference"), the driver or firmware can choose a suitable value. so 0-31, default 0 = "no preference", and if you just don't include it at all, driver/firmware gets to choose. delegating, slay. πŸ’…
  • NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES β€” number of FTMR frame retries (u8, default 3). default is 3, we love a sensible default. πŸ”
  • NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI β€” request LCI data (flag). πŸ—ΊοΈ
  • NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC β€” request civic location data (flag). 🏠
  • NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED β€” request trigger based ranging measurement (flag). This attribute and NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED are mutually exclusive. if neither NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based ranging will be used. so like, pick one, they're mutually exclusive fr, and if you set neither you get EDCA based ranging by default. βš”οΈ
  • NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED β€” request non-trigger-based ranging measurement (flag) This attribute and NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED are mutually exclusive. if neither NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based ranging will be used. yeah same deal, the other half of the mutually-exclusive duo, and neither-set still lands you on EDCA based ranging. πŸŒ€
  • NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK β€” negotiate for LMR feedback. Only valid if either NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED or NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. so don't even try it solo, it needs one of the two above, otherwise it's not valid. 🚫
  • NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR β€” optional. The BSS color of the responder. Only valid if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED or NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED is set. again: optional, needs one of the two ranging-type flags or it's invalid. 🎨
  • NL80211_PMSR_FTM_REQ_ATTR_RSTA β€” optional. Request to perform the measurement as the RSTA (flag). When set, the device is expected to dwell on the channel specified in NL80211_PMSR_PEER_ATTR_CHAN until it receives the FTM request from the peer or the timeout specified by NL80211_ATTR_TIMEOUT has expired. Only valid if NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK is set (so the RSTA will have the measurement results to report back in the FTM response). okay so this one is a whole situation: device chills on the NL80211_PMSR_PEER_ATTR_CHAN channel until the FTM request shows up or NL80211_ATTR_TIMEOUT runs out, and it's only valid when NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK is set β€” because the RSTA needs results to report back in the FTM response. make it make sense, and it does. πŸ›‹οΈ
  • NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS β€” minimum time between two consecutive range measurements in units of 100 microseconds, for non-trigger based ranging (u32). Should be set as short as possible to minimize turnaround time, since two-way ranging with delayed LMR requires two measurements. Only valid if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. u32, units of 100 microseconds, keep it as short as possible for minimal turnaround time (two-way ranging with delayed LMR needs two measurements, so yeah), and only valid with NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED. ⏱️
  • NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS β€” maximum time between two consecutive range measurements in units of 10 milliseconds, for non-trigger based ranging (u32). Acts as a session timeout; if exceeded, the ranging session should be terminated. Only valid if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. u32, units of 10 milliseconds, and it's literally a session timeout β€” blow past it and the ranging session should be terminated, no cap. only valid with NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED. ⏳
  • NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME β€” The nominal time field shall be set to the nominal duration between adjacent Availability Windows in units of milli seconds (u32). Mandatory if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. u32, milliseconds, and it's mandatory when NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set β€” mandatory bestie, not optional. 🚨
  • NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION β€” (Optional) The AW duration field shall be set to the duration of the AW in units of 1ms (0-255 ms) (u32). Only valid if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. If the attribute is absent ("no preference"), the driver or firmware can choose a suitable value. u32, 0-255 ms, units of 1ms, only valid with NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, and absent = "no preference" = driver/firmware picks. πŸ™ˆ
  • NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS β€” (Optional) number of Availability Windows (AWs) to schedule for non-trigger-based ranging. Each AW may contain multiple FTM exchanges as configured by NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST. Only valid if NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. If the attribute is absent ("no preference"), the driver or firmware can choose a suitable value. so it's how many AWs you want scheduled, each one can hold multiple FTM exchanges per NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST, only valid with NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, and absent again means "no preference" and the driver/firmware decides. πŸ—“οΈ
  • NL80211_PMSR_FTM_REQ_ATTR_PAD β€” ignore, for u64/s64 padding only. literally just padding bestie, ignore it. 🫢
  • NL80211_PMSR_FTM_REQ_ATTR_INGRESS β€” optional u64 attribute in units of mm. When specified, the measurement result of the peer needs to be indicated if the device moves into this range. u64, millimeters, and when you set it the peer's measurement result needs to be indicated when the device moves into this range. πŸ“₯
  • NL80211_PMSR_FTM_REQ_ATTR_EGRESS β€” optional u64 attribute in units of mm. When specified, the measurement result of the peer needs to be indicated if the device moves out of this range. If neither or only one of NL80211_PMSR_FTM_REQ_ATTR_INGRESS and NL80211_PMSR_FTM_REQ_ATTR_EGRESS is specified, only the specified threshold is used. If both are specified, both thresholds are applied. If neither is specified, results are reported without threshold filtering. okay so u64, mm, and it's the out of range one. the logic, bestie, listen: neither-or-only-one β†’ only the specified threshold gets used; both β†’ both thresholds apply; neither β†’ results come back with no threshold filtering at all. πŸ“€
  • NL80211_PMSR_FTM_REQ_ATTR_PD_SUPPRESS_RESULTS β€” Flag to suppress ranging results for PD requests. When set, ranging measurements are performed but results are not reported to userspace, regardless of ranging role or type. Only valid when NL80211_PMSR_PEER_ATTR_REQ_TYPE is set to NL80211_PMSR_FTM_REQ_TYPE_PD. so the measurement still happens, the results just don't get reported to userspace β€” regardless of ranging role or type, like it does not care β€” and it's only valid when NL80211_PMSR_PEER_ATTR_REQ_TYPE is set to NL80211_PMSR_FTM_REQ_TYPE_PD. 🀫
  • NUM_NL80211_PMSR_FTM_REQ_ATTR β€” internal. that's for the kernel, not you, move along. 🧚
  • NL80211_PMSR_FTM_REQ_ATTR_MAX β€” highest attribute number. the ceiling, the finale, the top of the list. πŸ‘‘

okay so real talk β€” this page is basically a whole friend group, and you're about to be introduced to every single one of them. no skipping, bestie, we're doing the full roster πŸ’–

and yeah, all of these live in the kernel file ./include/uapi/linux/nl80211.h β€” that's the mothership.

<h2>✨ the whole extended family (SEE ALSO energy) ✨</h2>

first up, the ~concepts~ crew β€” the big-picture vibes pages:

  • Station handling (9)
  • Frame transmission/registration support (9)
  • Virtual interface / concurrency capabilities (9)
  • packet coalesce support (9)
  • WPA/WPA2 EAPOL handshake offload (9)
  • FILS shared key authentication offload (9)
  • SAE authentication offload (9)
  • VLAN offload support for setting group keys and binding STAs to VLANs (9)
  • TID configuration (9)
  • FILS shared key crypto offload (9)
  • Multi-Link Operation (9)
  • OWE DH IE handling offload (9)

then the enums and structs start rolling in like a group chat that keeps adding people 😭

  • enum nl80211_commands (9)
  • enum nl80211_attrs (9)
  • enum nl80211_iftype (9)
  • enum nl80211_sta_flags (9)
  • enum nl80211_sta_p2p_ps_status (9)
  • struct nl80211_sta_flag_update (9)
  • enum nl80211_he_gi (9)
  • enum nl80211_he_ltf (9)
  • enum nl80211_he_ru_alloc (9)
  • enum nl80211_eht_gi (9)
  • enum nl80211_eht_ltf (9)
  • enum nl80211_eht_ru_alloc (9)
  • enum nl80211_rate_info (9)
  • enum nl80211_sta_bss_param (9)
  • enum nl80211_sta_info (9)
  • enum nl80211_tid_stats (9)
  • enum nl80211_txq_stats (9)

mesh, bands, and regulatory stuff β€” the "who's allowed to do what" girlies 🌸

  • enum nl80211_mpath_flags (9)
  • enum nl80211_mpath_info (9)
  • enum nl80211_band_iftype_attr (9)
  • enum nl80211_band_attr (9)
  • enum nl80211_nan_phy_cap_attr (9)
  • enum nl80211_wmm_rule (9)
  • enum nl80211_frequency_attr (9)
  • enum nl80211_bitrate_attr (9)
  • enum nl80211_reg_initiator (9)
  • enum nl80211_reg_type (9)
  • enum nl80211_reg_rule_attr (9)
  • enum nl80211_sched_scan_match_attr (9)
  • enum nl80211_reg_rule_flags (9)
  • enum nl80211_dfs_regions (9)
  • enum nl80211_user_reg_hint_type (9)
  • enum nl80211_survey_info (9)

monitor flags, mesh power modes, and BSS lore ✨

  • enum nl80211_mntr_flags (9)
  • enum nl80211_mesh_power_mode (9)
  • enum nl80211_meshconf_params (9)
  • enum nl80211_mesh_setup_params (9)
  • enum nl80211_txq_attr (9)
  • enum nl80211_channel_type (9)
  • enum nl80211_key_mode (9)
  • enum nl80211_chan_width (9)
  • enum nl80211_bss_scan_width (9)
  • enum nl80211_bss_use_for (9)
  • enum nl80211_bss_cannot_use_reasons (9)
  • enum nl80211_bss (9)
  • enum nl80211_bss_status (9)

keys, auth, and rate tables β€” the security girlies ate πŸ”₯

  • enum nl80211_auth_type (9)
  • enum nl80211_key_type (9)
  • enum nl80211_mfp (9)
  • enum nl80211_key_default_types (9)
  • enum nl80211_key_attributes (9)
  • enum nl80211_tx_rate_attributes (9)
  • struct nl80211_txrate_vht (9)
  • struct nl80211_txrate_he (9)
  • struct nl80211_txrate_eht (9)
  • enum nl80211_band (9)
  • enum nl80211_ps_state (9)
  • enum nl80211_attr_cqm (9)
  • enum nl80211_cqm_rssi_threshold_event (9)
  • enum nl80211_tx_power_setting (9)
  • enum nl80211_tid_config (9)

wakeup-on-wifi and packet patterns, aka the "let me sleep but also stay online" era πŸ’€

  • enum nl80211_packet_pattern_attr (9)
  • struct nl80211_pattern_support (9)
  • enum nl80211_wowlan_triggers (9)
  • TCP connection wakeup (9)
  • struct nl80211_wowlan_tcp_data_seq (9)
  • struct nl80211_wowlan_tcp_data_token (9)
  • struct nl80211_wowlan_tcp_data_token_feature (9)
  • enum nl80211_wowlan_tcp_attrs (9)
  • struct nl80211_coalesce_rule_support (9)
  • enum nl80211_attr_coalesce_rule (9)
  • enum nl80211_coalesce_condition (9)

interfaces, links, and power save β€” housekeeping but make it iconic πŸŽ€

  • enum nl80211_iface_limit_attrs (9)
  • enum nl80211_if_combination_attrs (9)
  • enum nl80211_plink_state (9)
  • enum nl80211_plink_action (9)
  • enum nl80211_rekey_data (9)
  • enum nl80211_hidden_ssid (9)
  • enum nl80211_sta_wme_attr (9)
  • enum nl80211_pmksa_candidate_attr (9)
  • enum nl80211_tdls_operation (9)
  • enum nl80211_ap_sme_features (9)
  • enum nl80211_feature_flags (9)
  • enum nl80211_ext_feature_index (9)
  • enum nl80211_probe_resp_offload_support_attr (9)
  • enum nl80211_connect_failed_reason (9)
  • enum nl80211_timeout_reason (9)
  • enum nl80211_scan_flags (9)
  • enum nl80211_acl_policy (9)
  • enum nl80211_smps_mode (9)

radar, DFS, and NAN β€” the exotic ones, lowkey main character energy πŸ‘‘

  • enum nl80211_radar_event (9)
  • enum nl80211_dfs_state (9)
  • enum nl80211_protocol_features (9)
  • enum nl80211_crit_proto_id (9)
  • enum nl80211_rxmgmt_flags (9)
  • struct nl80211_vendor_cmd_info (9)
  • enum nl80211_tdls_peer_capability (9)
  • enum nl80211_sched_scan_plan (9)
  • struct nl80211_bss_select_rssi_adjust (9)
  • enum nl80211_bss_select_attr (9)
  • enum nl80211_nan_function_type (9)
  • enum nl80211_nan_publish_type (9)
  • enum nl80211_nan_func_term_reason (9)
  • enum nl80211_nan_func_attributes (9)
  • enum nl80211_nan_srf_attributes (9)
  • enum nl80211_nan_match_attributes (9)
  • enum nl80211_nan_band_conf_attributes (9)
  • enum nl80211_nan_conf_attributes (9)

and now we're in the neighbourhood of this very page β€” external auth, FTM responders, and the peer measurement squad 🫢

  • enum nl80211_external_auth_action (9)
  • enum nl80211_ftm_responder_attributes (9)
  • enum nl80211_preamble (9)
  • enum nl80211_peer_measurement_type (9)
  • enum nl80211_peer_measurement_status (9)
  • enum nl80211_peer_measurement_req (9)
  • enum nl80211_peer_measurement_resp (9)
  • enum nl80211_peer_measurement_ftm_req_type (9)
  • enum nl80211_peer_measurement_peer_attrs (9)
  • enum nl80211_peer_measurement_attrs (9)

the FTM specifics β€” capabilities, type capabilities, failure reasons, resp. the way this little cluster is so specific, we love a specialist πŸ’…

  • enum nl80211_peer_measurement_ftm_capa (9)
  • enum nl80211_peer_measurement_ftm_type_capa (9)
  • enum nl80211_peer_measurement_ftm_failure_reasons (9)
  • enum nl80211_peer_measurement_ftm_resp (9)

and finally the tail end β€” OBSS PD, BSS colour, AKM, FILS discovery, SAE PWE, SAR, M-BSSID, AP settings, wiphy radios, S1G beacons, and the rest of the NAN pages. full send 🌈

  • enum nl80211_obss_pd_attributes (9)
  • enum nl80211_bss_color_attributes (9)
  • enum nl80211_iftype_akm_attributes (9)
  • enum nl80211_fils_discovery_attributes (9)
  • enum nl80211_unsol_bcast_probe_resp_attributes (9)
  • enum nl80211_sae_pwe_mechanism (9)
  • enum nl80211_sar_type (9)
  • enum nl80211_sar_attrs (9)
  • enum nl80211_sar_specs_attrs (9)
  • enum nl80211_mbssid_config_attributes (9)
  • enum nl80211_ap_settings_flags (9)
  • enum nl80211_wiphy_radio_attrs (9)
  • enum nl80211_wiphy_radio_freq_range (9)
  • enum nl80211_s1g_short_beacon_attrs (9)
  • enum nl80211_nan_capabilities (9)
  • enum nl80211_nan_peer_map_attrs (9)

and that's the whole guest list, bestie β€” every single one accounted for, no cuts, no edits, no "we'll skip these for time" nonsense 🌸

this page ships out of ./include/uapi/linux, dated October 2026, and it's titled enum nl8021...ment_ftm_req(9) β€” so go forth, read the enums, and slay your netlink journey πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from