History

wifi: cfg80211: add NTB continuous ranging and FTM request type support

Enable NTB continuous ranging with configurable timing and measurement parameters as per the Wi-Fi Alliance specification "Proximity Ranging (PR) Implementation Consideration Draft 1.9 Rev 1, section 5.3". Add new FTM request attributes for min/max time between measurements, nominal time (mandatory for NTB), AW duration, and total measurement count. Add NL80211_PMSR_PEER_ATTR_REQ_TYPE attribute using the new nl80211_peer_measurement_ftm_req_type enum to allow userspace to specify the ranging request type per peer: - NL80211_PMSR_FTM_REQ_TYPE_INFRA: STA-to-AP or AP-to-STA ranging (default if attribute is absent) - NL80211_PMSR_FTM_REQ_TYPE_PD: peer-to-peer ranging Validate the request type against the device TYPE_CAPS capabilities advertised via NL80211_PMSR_FTM_CAPA_ATTR_TYPE_CAPS. Reject PD requests if the device does not advertise PD support. Reject PD requests that set trigger-based ranging, as TB ranging is not compatible with peer-to-peer proximity detection. Add ftms_per_burst limit of 4 for PD NTB ranging requests.

Peddolla Harshavardhan Reddy committed 6 months ago

Commit 8823a9b1 parent 18709c64 files · +163 −6Browse files

Showing the changes to include/uapi (1 of 4 files). Show all

Unified · Split

include/uapi/linux/nl80211.h+60−2
@@ -7991,6 +7991,26 @@ enum nl80211_peer_measurement_resp { · 7990 unmodified lines
79917991 NL80211_PMSR_RESP_ATTR_MAX = NUM_NL80211_PMSR_RESP_ATTRS - 1
79927992 };
79937993
7994+/**
7995+ * enum nl80211_peer_measurement_ftm_req_type - FTM ranging request type,
7996+ * used with %NL80211_PMSR_PEER_ATTR_REQ_TYPE
7997+ *
7998+ * @NL80211_PMSR_FTM_REQ_TYPE_INFRA: infrastructure ranging, i.e. STA-to-AP
7999+ * @NL80211_PMSR_FTM_REQ_TYPE_PD: peer-to-peer ranging as defined in the
8000+ * Wi-Fi Alliance specification "Proximity Ranging (PR) Implementation
8001+ * Consideration Draft 1.9 Rev 1"
8002+ * @NUM_NL80211_PMSR_FTM_REQ_TYPE: internal
8003+ * @NL80211_PMSR_FTM_REQ_TYPE_MAX: highest request type value
8004+ */
8005+enum nl80211_peer_measurement_ftm_req_type {
8006+ NL80211_PMSR_FTM_REQ_TYPE_INFRA,
8007+ NL80211_PMSR_FTM_REQ_TYPE_PD,
8008+
8009+ /* keep last */
8010+ NUM_NL80211_PMSR_FTM_REQ_TYPE,
8011+ NL80211_PMSR_FTM_REQ_TYPE_MAX = NUM_NL80211_PMSR_FTM_REQ_TYPE - 1
8012+};
8013+
79948014 /**
79958015 * enum nl80211_peer_measurement_peer_attrs - peer attributes for measurement
79968016 * @__NL80211_PMSR_PEER_ATTR_INVALID: invalid
@@ -8004,6 +8024,9 @@ enum nl80211_peer_measurement_resp { · 7 unmodified lines
80048024 * @NL80211_PMSR_PEER_ATTR_RESP: This is a nested attribute indexed by
80058025 * measurement type, with attributes from the
80068026 * &enum nl80211_peer_measurement_resp inside.
8027+ * @NL80211_PMSR_PEER_ATTR_REQ_TYPE: u32 attribute specifying the ranging
8028+ * request type, using values from &enum nl80211_peer_measurement_ftm_req_type.
8029+ * If absent, defaults to %NL80211_PMSR_FTM_REQ_TYPE_INFRA.
80078030 *
80088031 * @NUM_NL80211_PMSR_PEER_ATTRS: internal
80098032 * @NL80211_PMSR_PEER_ATTR_MAX: highest attribute number
@@ -8015,6 +8038,7 @@ enum nl80211_peer_measurement_peer_attrs { · 5 unmodified lines
80158038 NL80211_PMSR_PEER_ATTR_CHAN,
80168039 NL80211_PMSR_PEER_ATTR_REQ,
80178040 NL80211_PMSR_PEER_ATTR_RESP,
8041+ NL80211_PMSR_PEER_ATTR_REQ_TYPE,
80188042
80198043 /* keep last */
80208044 NUM_NL80211_PMSR_PEER_ATTRS,
@@ -8238,9 +8262,11 @@ enum nl80211_peer_measurement_ftm_type_capa { · 217 unmodified lines
82388262 * default 15 i.e. "no preference"). For non-EDCA ranging, this is the
82398263 * burst duration in milliseconds (optional with default 0, i.e. let the
82408264 * device decide).
8241− * @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: number of successful FTM frames
8242− * requested per burst
8265+ * @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: (Optional) number of successful
8266+ * FTM frames requested per burst
82438267 * (u8, 0-31, optional with default 0 i.e. "no preference")
8268+ * If the attribute is absent ("no preference"), the driver or firmware can
8269+ * choose a suitable value.
82448270 * @NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES: number of FTMR frame retries
82458271 * (u8, default 3)
82468272 * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI: request LCI data (flag)
@@ -8274,6 +8300,33 @@ enum nl80211_peer_measurement_ftm_type_capa { · 27 unmodified lines
82748300 * Only valid if %NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK is set (so the
82758301 * RSTA will have the measurement results to report back in the FTM
82768302 * response).
8303+ * @NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS: minimum time
8304+ * between two consecutive range measurements in units of 100 microseconds,
8305+ * for non-trigger based ranging (u32). Should be set as short as possible
8306+ * to minimize turnaround time, since two-way ranging with delayed LMR
8307+ * requires two measurements. Only valid if
8308+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
8309+ * @NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS: maximum time
8310+ * between two consecutive range measurements in units of 10 milliseconds,
8311+ * for non-trigger based ranging (u32). Acts as a session timeout; if
8312+ * exceeded, the ranging session should be terminated. Only valid if
8313+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
8314+ * @NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME: The nominal time field shall be
8315+ * set to the nominal duration between adjacent Availability Windows in
8316+ * units of milli seconds (u32). Mandatory if
8317+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
8318+ * @NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION: (Optional) The AW duration field
8319+ * shall be set to the duration of the AW in units of 1ms (0-255 ms) (u32).
8320+ * Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
8321+ * If the attribute is absent ("no preference"), the driver or firmware
8322+ * can choose a suitable value.
8323+ * @NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS: (Optional) number of
8324+ * Availability Windows (AWs) to schedule for non-trigger-based ranging.
8325+ * Each AW may contain multiple FTM exchanges as configured by
8326+ * %NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST. Only valid if
8327+ * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
8328+ * If the attribute is absent ("no preference"), the driver or firmware
8329+ * can choose a suitable value.
82778330 *
82788331 * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
82798332 * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
@@ -8295,6 +8348,11 @@ enum nl80211_peer_measurement_ftm_req { · 15 unmodified lines
82958348 NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
82968349 NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
82978350 NL80211_PMSR_FTM_REQ_ATTR_RSTA,
8351+ NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS,
8352+ NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS,
8353+ NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME,
8354+ NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION,
8355+ NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS,
82988356
82998357 /* keep last */
83008358 NUM_NL80211_PMSR_FTM_REQ_ATTR,