nl80211/cfg80211: add a flag to negotiate for LMR feedback in NDP ranging
authorAvraham Stern <avraham.stern@intel.com>
Fri, 9 Apr 2021 09:40:25 +0000 (12:40 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 19 Apr 2021 10:02:51 +0000 (12:02 +0200)
Add a flag that indicates that the ISTA shall indicate support for
LMR feedback in NDP ranging negotiation.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210409123755.eff546283504.I2606161e700ac24d94d0b50c8edcdedd4c0395c2@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
include/uapi/linux/nl80211.h
net/wireless/nl80211.c
net/wireless/pmsr.c

index 73b17ea..5224f88 100644 (file)
@@ -3521,6 +3521,8 @@ struct cfg80211_pmsr_result {
  * @non_trigger_based: use non trigger based ranging for the measurement
  *              If neither @trigger_based nor @non_trigger_based is set,
  *              EDCA based ranging will be used.
+ * @lmr_feedback: negotiate for I2R LMR feedback. Only valid if either
+ *     @trigger_based or @non_trigger_based is set.
  *
  * See also nl80211 for the respective attribute documentation.
  */
@@ -3532,7 +3534,8 @@ struct cfg80211_pmsr_ftm_request_peer {
           request_lci:1,
           request_civicloc:1,
           trigger_based:1,
-          non_trigger_based:1;
+          non_trigger_based:1,
+          lmr_feedback:1;
        u8 num_bursts_exp;
        u8 burst_duration;
        u8 ftms_per_burst;
index 18dfe74..00f696d 100644 (file)
@@ -6896,6 +6896,9 @@ enum nl80211_peer_measurement_ftm_capa {
  *      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.
+ * @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.
  *
  * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
  * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
@@ -6914,6 +6917,7 @@ enum nl80211_peer_measurement_ftm_req {
        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,
 
        /* keep last */
        NUM_NL80211_PMSR_FTM_REQ_ATTR,
index adfa07c..aad1934 100644 (file)
@@ -309,6 +309,7 @@ nl80211_pmsr_ftm_req_attr_policy[NL80211_PMSR_FTM_REQ_ATTR_MAX + 1] = {
        [NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC] = { .type = NLA_FLAG },
        [NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED] = { .type = NLA_FLAG },
        [NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED] = { .type = NLA_FLAG },
+       [NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK] = { .type = NLA_FLAG },
 };
 
 static const struct nla_policy
index a95c79d..6bdd964 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (C) 2018 - 2019 Intel Corporation
+ * Copyright (C) 2018 - 2021 Intel Corporation
  */
 #ifndef __PMSR_H
 #define __PMSR_H
@@ -158,6 +158,16 @@ static int pmsr_parse_ftm(struct cfg80211_registered_device *rdev,
                return -EINVAL;
        }
 
+       out->ftm.lmr_feedback =
+               !!tb[NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK];
+       if (!out->ftm.trigger_based && !out->ftm.non_trigger_based &&
+           out->ftm.lmr_feedback) {
+               NL_SET_ERR_MSG_ATTR(info->extack,
+                                   tb[NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK],
+                                   "FTM: LMR feedback set for EDCA based ranging");
+               return -EINVAL;
+       }
+
        return 0;
 }