linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Unsolicited broadcast probe resp support
@ 2020-07-15 23:05 Aloka Dixit
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-07-15 23:05 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, Aloka Dixit

Unsolicited broadcast probe response tranmission is used for in-band
discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior for
fast passive scanning).

v3: Rebased. Removed check for 6Ghz, drivers should add that check.

v2: Removed flag 'enabled' and changed 6GHz frequency range as per
    IEEE P802.11ax/D6.1.

Aloka Dixit (2):
  nl80211: Unsolicited broadcast probe response support
  mac80211: Unsolicited broadcast probe response support

 include/net/cfg80211.h       | 18 ++++++++++++++
 include/net/mac80211.h       | 21 ++++++++++++++++
 include/uapi/linux/nl80211.h | 32 ++++++++++++++++++++++++
 net/mac80211/cfg.c           | 42 ++++++++++++++++++++++++++++++++
 net/mac80211/ieee80211_i.h   |  7 ++++++
 net/mac80211/tx.c            | 26 ++++++++++++++++++++
 net/wireless/nl80211.c       | 47 ++++++++++++++++++++++++++++++++++++
 7 files changed, 193 insertions(+)

-- 
2.25.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-07-15 23:05 [PATCH v3 0/2] Unsolicited broadcast probe resp support Aloka Dixit
@ 2020-07-15 23:05 ` Aloka Dixit
  2020-08-03 10:18   ` Johannes Berg
                     ` (2 more replies)
  2020-07-15 23:05 ` [PATCH v3 2/2] mac80211: " Aloka Dixit
  2020-07-16  9:35 ` [PATCH v3 0/2] Unsolicited broadcast probe resp support Arend Van Spriel
  2 siblings, 3 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-07-15 23:05 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, Aloka Dixit

This patch adds new attributes to support unsolicited broadcast
probe response transmission used for in-band
discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior for
fast passive scanning).
The new attribute, NL80211_ATTR_UNSOL_BCAST_PROBE_RESP, is nested which
supports following parameters:
(1) NL80211_UNSOL_BCAST_PROBE_RESP_INT - Packet interval
(2) NL80211_UNSOL_BCAST_PROBE_RESP_TMPL - Template data

Signed-off-by: Aloka Dixit <alokad@codeaurora.org>
---
 include/net/cfg80211.h       | 18 ++++++++++++++
 include/uapi/linux/nl80211.h | 32 ++++++++++++++++++++++++
 net/wireless/nl80211.c       | 47 ++++++++++++++++++++++++++++++++++++
 3 files changed, 97 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index fc7e8807838d..884050bf5c74 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1047,6 +1047,22 @@ struct cfg80211_acl_data {
 	struct mac_address mac_addrs[];
 };
 
+/**
+ * struct cfg80211_unsol_bcast_probe_resp - Unsolicited broadcast probe
+ *	response parameters in 6GHz.
+ *
+ * @interval: Packet interval in TUs. Maximum allowed is 20 TU, as mentioned
+ *	in IEEE P802.11ax/D6.0 26.17.2.3.2 - AP behavior for fast passive
+ *	scanning
+ * @tmpl_len: Template length
+ * @tmpl: Template data for probe response
+ */
+struct cfg80211_unsol_bcast_probe_resp {
+	u32 interval;
+	size_t tmpl_len;
+	const u8 *tmpl;
+};
+
 /**
  * enum cfg80211_ap_settings_flags - AP settings flags
  *
@@ -1094,6 +1110,7 @@ enum cfg80211_ap_settings_flags {
  * @he_obss_pd: OBSS Packet Detection settings
  * @he_bss_color: BSS Color settings
  * @he_oper: HE operation IE (or %NULL if HE isn't enabled)
+ * @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
  */
 struct cfg80211_ap_settings {
 	struct cfg80211_chan_def chandef;
@@ -1124,6 +1141,7 @@ struct cfg80211_ap_settings {
 	u32 flags;
 	struct ieee80211_he_obss_pd he_obss_pd;
 	struct cfg80211_he_bss_color he_bss_color;
+	struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
 };
 
 /**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 4e6339ab1fce..f3e6a37f0df8 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2505,6 +2505,10 @@ enum nl80211_commands {
  * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from
  *	association request when used with NL80211_CMD_NEW_STATION).
  *
+ * @NL80211_ATTR_UNSOL_BCAST_PROBE_RESP: Optional parameter to configure
+ *	unsolicited broadcast probe response. It is a nested attribute, see
+ *	&enum nl80211_unsol_bcast_probe_resp_attributes.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2987,6 +2991,8 @@ enum nl80211_attrs {
 
 	NL80211_ATTR_HE_6GHZ_CAPABILITY,
 
+	NL80211_ATTR_UNSOL_BCAST_PROBE_RESP,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -6922,4 +6928,30 @@ enum nl80211_iftype_akm_attributes {
 	NL80211_IFTYPE_AKM_ATTR_MAX = __NL80211_IFTYPE_AKM_ATTR_LAST - 1,
 };
 
+/**
+ * enum nl80211_unsol_bcast_probe_resp_attributes - Unsolicited broadcast probe
+ *	response configuration. Applicable only in 6GHz.
+ *
+ * @__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID: Invalid
+ *
+ * @NL80211_UNSOL_BCAST_PROBE_RESP_INT: Maximum packet interval (u32, TU).
+ *	Allowed range: 0..20 (TU = Time Unit). IEEE P802.11ax/D6.0
+ *	26.17.2.3.2 (AP behavior for fast passive scanning.
+ * @NL80211_UNSOL_BCAST_PROBE_RESP_TMPL: Unsolicited broadcast probe response
+ *	frame template (binary).
+ *
+ * @__NL80211_UNSOL_BCAST_PROBE_RESP_LAST: Internal
+ * @NL80211_UNSOL_BCAST_PROBE_RESP_MAX: highest attribute
+ */
+enum nl80211_unsol_bcast_probe_resp_attributes {
+	__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID,
+
+	NL80211_UNSOL_BCAST_PROBE_RESP_INT,
+	NL80211_UNSOL_BCAST_PROBE_RESP_TMPL,
+
+	/* keep last */
+	__NL80211_UNSOL_BCAST_PROBE_RESP_LAST,
+	NL80211_UNSOL_BCAST_PROBE_RESP_MAX =
+		__NL80211_UNSOL_BCAST_PROBE_RESP_LAST - 1
+};
 #endif /* __LINUX_NL80211_H */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 263ae395ad44..d42056421e55 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -338,6 +338,13 @@ static const struct nla_policy nl80211_txattr_policy[NL80211_TXRATE_MAX + 1] = {
 	[NL80211_TXRATE_GI] = { .type = NLA_U8 },
 };
 
+static const struct nla_policy
+unsol_bcast_probe_resp_policy[NL80211_UNSOL_BCAST_PROBE_RESP_MAX + 1] = {
+	[NL80211_UNSOL_BCAST_PROBE_RESP_INT] = NLA_POLICY_MAX(NLA_U32, 20),
+	[NL80211_UNSOL_BCAST_PROBE_RESP_TMPL] = { .type = NLA_BINARY,
+						  .len = IEEE80211_MAX_DATA_LEN }
+};
+
 static const struct nla_policy
 nl80211_tid_config_attr_policy[NL80211_TID_CONFIG_ATTR_MAX + 1] = {
 	[NL80211_TID_CONFIG_ATTR_VIF_SUPP] = { .type = NLA_U64 },
@@ -658,6 +665,9 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
 		.type = NLA_EXACT_LEN,
 		.len = sizeof(struct ieee80211_he_6ghz_capa),
 	},
+
+	[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP] =
+		NLA_POLICY_NESTED(unsol_bcast_probe_resp_policy),
 };
 
 /* policy for the key attributes */
@@ -4721,6 +4731,35 @@ static int nl80211_parse_he_bss_color(struct nlattr *attrs,
 	return 0;
 }
 
+static int
+nl80211_parse_unsol_bcast_probe_resp(struct nlattr *attrs,
+				     struct cfg80211_ap_settings *params)
+{
+	struct nlattr *tmpl;
+	struct nlattr *tb[NL80211_UNSOL_BCAST_PROBE_RESP_MAX + 1];
+	int ret;
+	struct cfg80211_unsol_bcast_probe_resp *presp =
+					&params->unsol_bcast_probe_resp;
+
+	ret = nla_parse_nested(tb, NL80211_UNSOL_BCAST_PROBE_RESP_MAX, attrs,
+			       unsol_bcast_probe_resp_policy, NULL);
+	if (ret)
+		return ret;
+
+	if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_INT])
+		return -EINVAL;
+
+	presp->interval = nla_get_u32(tb[NL80211_UNSOL_BCAST_PROBE_RESP_INT]);
+
+	tmpl = tb[NL80211_UNSOL_BCAST_PROBE_RESP_TMPL];
+	if (tmpl) {
+		presp->tmpl = nla_data(tmpl);
+		presp->tmpl_len = nla_len(tmpl);
+	}
+
+	return 0;
+}
+
 static void nl80211_check_ap_rate_selectors(struct cfg80211_ap_settings *params,
 					    const u8 *rates)
 {
@@ -5027,6 +5066,14 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 			return err;
 	}
 
+	if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) {
+		err = nl80211_parse_unsol_bcast_probe_resp(
+			info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP],
+			&params);
+		if (err)
+			return err;
+	}
+
 	nl80211_calculate_ap_params(&params);
 
 	if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 2/2] mac80211: Unsolicited broadcast probe response support
  2020-07-15 23:05 [PATCH v3 0/2] Unsolicited broadcast probe resp support Aloka Dixit
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
@ 2020-07-15 23:05 ` Aloka Dixit
  2020-07-16  9:35 ` [PATCH v3 0/2] Unsolicited broadcast probe resp support Arend Van Spriel
  2 siblings, 0 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-07-15 23:05 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, Aloka Dixit

This patch adds mac80211 support to configure unsolicited
broadcast probe response transmission for in-band discovery in 6GHz.

Changes include functions to store and retrieve probe response template,
and packet interval (0 - 20 TUs).
Setting interval to 0 disables the unsolicited broadcast probe response
transmission.

Signed-off-by: Aloka Dixit <alokad@codeaurora.org>
---
 include/net/mac80211.h     | 21 +++++++++++++++++++
 net/mac80211/cfg.c         | 42 ++++++++++++++++++++++++++++++++++++++
 net/mac80211/ieee80211_i.h |  7 +++++++
 net/mac80211/tx.c          | 26 +++++++++++++++++++++++
 4 files changed, 96 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 11d5610d2ad5..90800558725c 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -317,6 +317,8 @@ struct ieee80211_vif_chanctx_switch {
  * @BSS_CHANGED_TWT: TWT status changed
  * @BSS_CHANGED_HE_OBSS_PD: OBSS Packet Detection status changed.
  * @BSS_CHANGED_HE_BSS_COLOR: BSS Color has changed
+ * @BSS_CHANGED_UNSOL_BCAST_PROBE_RESP: Unsolicited broadcast probe response
+ *	status changed.
  *
  */
 enum ieee80211_bss_change {
@@ -350,6 +352,7 @@ enum ieee80211_bss_change {
 	BSS_CHANGED_TWT			= 1<<27,
 	BSS_CHANGED_HE_OBSS_PD		= 1<<28,
 	BSS_CHANGED_HE_BSS_COLOR	= 1<<29,
+	BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<30,
 
 	/* when adding here, make sure to change ieee80211_reconfig */
 };
@@ -607,6 +610,8 @@ struct ieee80211_ftm_responder_params {
  * @he_oper: HE operation information of the AP we are connected to
  * @he_obss_pd: OBSS Packet Detection parameters.
  * @he_bss_color: BSS coloring settings, if BSS supports HE
+ * @unsol_bcast_probe_resp_interval: Unsolicited broadcast probe response
+ *	interval.
  */
 struct ieee80211_bss_conf {
 	const u8 *bssid;
@@ -674,6 +679,7 @@ struct ieee80211_bss_conf {
 	} he_oper;
 	struct ieee80211_he_obss_pd he_obss_pd;
 	struct cfg80211_he_bss_color he_bss_color;
+	u32 unsol_bcast_probe_resp_interval;
 };
 
 /**
@@ -6558,4 +6564,19 @@ u32 ieee80211_calc_tx_airtime(struct ieee80211_hw *hw,
  */
 bool ieee80211_set_hw_80211_encap(struct ieee80211_vif *vif, bool enable);
 
+
+/**
+ * ieee80211_get_unsol_bcast_probe_resp_tmpl - Get unsolicited broadcast
+ *	probe response template.
+ * @hw: pointer obtained from ieee80211_alloc_hw().
+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
+ *
+ * The driver is responsible for freeing the returned skb.
+ *
+ * Return: Unsolicited broadcast probe response template. %NULL on error.
+ */
+struct sk_buff *
+ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
+					  struct ieee80211_vif *vif);
+
 #endif /* MAC80211_H */
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 9b360544ad6f..3db24325f545 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -837,6 +837,32 @@ static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
 	return 0;
 }
 
+static int
+ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
+				     struct cfg80211_unsol_bcast_probe_resp *params)
+{
+	struct unsol_bcast_probe_resp_data *new, *old = NULL;
+
+	sdata->vif.bss_conf.unsol_bcast_probe_resp_interval =
+							params->interval;
+
+	if (!params->tmpl || !params->tmpl_len) /* Optional template */
+		return 0;
+
+	old = sdata_dereference(sdata->u.ap.unsol_bcast_probe_resp, sdata);
+	new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
+	if (!new)
+		return -ENOMEM;
+	new->len = params->tmpl_len;
+	memcpy(new->data, params->tmpl, params->tmpl_len);
+	rcu_assign_pointer(sdata->u.ap.unsol_bcast_probe_resp, new);
+
+	if (old)
+		kfree_rcu(old, rcu_head);
+
+	return 0;
+}
+
 static int ieee80211_set_ftm_responder_params(
 				struct ieee80211_sub_if_data *sdata,
 				const u8 *lci, size_t lci_len,
@@ -1103,6 +1129,15 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
 	}
 	changed |= err;
 
+	err = ieee80211_set_unsol_bcast_probe_resp(sdata,
+						   &params->unsol_bcast_probe_resp);
+	if (err < 0) {
+		ieee80211_vif_release_channel(sdata);
+		return err;
+	} else if (err == 0) {
+		changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
+	}
+
 	err = drv_start_ap(sdata->local, sdata);
 	if (err) {
 		old = sdata_dereference(sdata->u.ap.beacon, sdata);
@@ -1158,6 +1193,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
 	struct ieee80211_local *local = sdata->local;
 	struct beacon_data *old_beacon;
 	struct probe_resp *old_probe_resp;
+	struct unsol_bcast_probe_resp_data *old_unsol_bcast_probe_resp;
 	struct cfg80211_chan_def chandef;
 
 	sdata_assert_lock(sdata);
@@ -1166,6 +1202,9 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
 	if (!old_beacon)
 		return -ENOENT;
 	old_probe_resp = sdata_dereference(sdata->u.ap.probe_resp, sdata);
+	old_unsol_bcast_probe_resp =
+		sdata_dereference(sdata->u.ap.unsol_bcast_probe_resp,
+				  sdata);
 
 	/* abort any running channel switch */
 	mutex_lock(&local->mtx);
@@ -1189,9 +1228,12 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
 	/* remove beacon and probe response */
 	RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
 	RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL);
+	RCU_INIT_POINTER(sdata->u.ap.unsol_bcast_probe_resp, NULL);
 	kfree_rcu(old_beacon, rcu_head);
 	if (old_probe_resp)
 		kfree_rcu(old_probe_resp, rcu_head);
+	if (old_unsol_bcast_probe_resp)
+		kfree_rcu(old_unsol_bcast_probe_resp, rcu_head);
 
 	kfree(sdata->vif.bss_conf.ftmr_params);
 	sdata->vif.bss_conf.ftmr_params = NULL;
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index ec1a71ac65f2..b54108ef3560 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -272,6 +272,12 @@ struct probe_resp {
 	u8 data[];
 };
 
+struct unsol_bcast_probe_resp_data {
+	struct rcu_head rcu_head;
+	int len;
+	u8 data[];
+};
+
 struct ps_data {
 	/* yes, this looks ugly, but guarantees that we can later use
 	 * bitmap_empty :)
@@ -287,6 +293,7 @@ struct ps_data {
 struct ieee80211_if_ap {
 	struct beacon_data __rcu *beacon;
 	struct probe_resp __rcu *probe_resp;
+	struct unsol_bcast_probe_resp_data __rcu *unsol_bcast_probe_resp;
 
 	/* to be used after channel switch. */
 	struct cfg80211_beacon_data *next_beacon;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index e9ce658141f5..3657dc799ca5 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -4998,6 +4998,32 @@ struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw,
 }
 EXPORT_SYMBOL(ieee80211_proberesp_get);
 
+struct sk_buff *
+ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
+					  struct ieee80211_vif *vif)
+{
+	struct sk_buff *skb = NULL;
+	struct unsol_bcast_probe_resp_data *tmpl = NULL;
+	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
+
+	if (sdata->vif.type != NL80211_IFTYPE_AP)
+		return NULL;
+
+	rcu_read_lock();
+	tmpl = rcu_dereference(sdata->u.ap.unsol_bcast_probe_resp);
+	if (!tmpl) {
+		rcu_read_unlock();
+		return NULL;
+	}
+
+	skb = dev_alloc_skb(tmpl->len);
+	if (skb)
+		skb_put_data(skb, tmpl->data, tmpl->len);
+	rcu_read_unlock();
+	return skb;
+}
+EXPORT_SYMBOL(ieee80211_get_unsol_bcast_probe_resp_tmpl);
+
 struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
 				     struct ieee80211_vif *vif)
 {
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/2] Unsolicited broadcast probe resp support
  2020-07-15 23:05 [PATCH v3 0/2] Unsolicited broadcast probe resp support Aloka Dixit
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
  2020-07-15 23:05 ` [PATCH v3 2/2] mac80211: " Aloka Dixit
@ 2020-07-16  9:35 ` Arend Van Spriel
  2020-07-20 21:36   ` Aloka Dixit
  2 siblings, 1 reply; 12+ messages in thread
From: Arend Van Spriel @ 2020-07-16  9:35 UTC (permalink / raw)
  To: Aloka Dixit, johannes; +Cc: linux-wireless

On 7/16/2020 1:05 AM, Aloka Dixit wrote:
> Unsolicited broadcast probe response tranmission is used for in-band
> discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior for
> fast passive scanning).
> 
> v3: Rebased. Removed check for 6Ghz, drivers should add that check.

I have not seen any comments in v2 so could you motivate this removal. 
It is a sanity check that is always needed so doing it in the nl80211 
api seems the proper place.

Regards,
Arend

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/2] Unsolicited broadcast probe resp support
  2020-07-16  9:35 ` [PATCH v3 0/2] Unsolicited broadcast probe resp support Arend Van Spriel
@ 2020-07-20 21:36   ` Aloka Dixit
  0 siblings, 0 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-07-20 21:36 UTC (permalink / raw)
  To: Arend Van Spriel; +Cc: johannes, linux-wireless, linux-wireless-owner

On 2020-07-16 02:35, Arend Van Spriel wrote:
> On 7/16/2020 1:05 AM, Aloka Dixit wrote:
>> Unsolicited broadcast probe response tranmission is used for in-band
>> discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior 
>> for
>> fast passive scanning).
>> 
>> v3: Rebased. Removed check for 6Ghz, drivers should add that check.
> 
> I have not seen any comments in v2 so could you motivate this removal.
> It is a sanity check that is always needed so doing it in the nl80211
> api seems the proper place.
> 
> Regards,
> Arend

Hi Arend,
I found that if any application sends 
NL80211_ATTR_UNSOL_BCAST_PROBE_RESP with 
NL80211_UNSOL_BCAST_PROBE_RESP_INT=0 (which means disable) for 2.4/5GHz, 
the check here resulted in AP not being brought up.
Technically disabling this feature for 2.4/5GHz is not required as it is 
disabled by default but it should not cause issues if done so 
explicitly. Hence I removed the check here so that drivers can decide to 
use/ignore this attribute.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
@ 2020-08-03 10:18   ` Johannes Berg
  2020-08-03 17:28     ` Aloka Dixit
  2020-08-03 10:20   ` Johannes Berg
  2020-08-03 10:20   ` Johannes Berg
  2 siblings, 1 reply; 12+ messages in thread
From: Johannes Berg @ 2020-08-03 10:18 UTC (permalink / raw)
  To: Aloka Dixit; +Cc: linux-wireless


> +/**
> + * enum nl80211_unsol_bcast_probe_resp_attributes - Unsolicited broadcast probe
> + *	response configuration. Applicable only in 6GHz.
> + *
> + * @__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID: Invalid
> + *
> + * @NL80211_UNSOL_BCAST_PROBE_RESP_INT: Maximum packet interval (u32, TU).
> + *	Allowed range: 0..20 (TU = Time Unit). IEEE P802.11ax/D6.0
> + *	26.17.2.3.2 (AP behavior for fast passive scanning.

nit: that "(" never closes

> +	tmpl = tb[NL80211_UNSOL_BCAST_PROBE_RESP_TMPL];
> +	if (tmpl) {
> +		presp->tmpl = nla_data(tmpl);
> +		presp->tmpl_len = nla_len(tmpl);
> +	}
> 
So, hmm. Similar question here - what do you do without a template? Or
OTOH, why do you even need a template? Would you advertise something
that's *different* from the regular probe response template you already
get for offloaded probe request/response support?

johannes


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
  2020-08-03 10:18   ` Johannes Berg
@ 2020-08-03 10:20   ` Johannes Berg
  2020-08-03 17:30     ` Aloka Dixit
  2020-08-03 10:20   ` Johannes Berg
  2 siblings, 1 reply; 12+ messages in thread
From: Johannes Berg @ 2020-08-03 10:20 UTC (permalink / raw)
  To: Aloka Dixit; +Cc: linux-wireless

Also,

> +/**
> + * enum nl80211_unsol_bcast_probe_resp_attributes - Unsolicited broadcast probe
> + *	response configuration. Applicable only in 6GHz.
> + *
> + * @__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID: Invalid
> + *
> + * @NL80211_UNSOL_BCAST_PROBE_RESP_INT: Maximum packet interval (u32, TU).
> + *	Allowed range: 0..20 (TU = Time Unit). IEEE P802.11ax/D6.0

0 doesn't make sense, you should disallow that.

I see you used it for "turn off" at least in the mac80211 patch but it
seems to me that should have a more explicit way at least in the
external API? At the very least it needs to documentation.

johannes


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
  2020-08-03 10:18   ` Johannes Berg
  2020-08-03 10:20   ` Johannes Berg
@ 2020-08-03 10:20   ` Johannes Berg
  2020-08-03 10:21     ` Johannes Berg
  2020-08-03 17:33     ` Aloka Dixit
  2 siblings, 2 replies; 12+ messages in thread
From: Johannes Berg @ 2020-08-03 10:20 UTC (permalink / raw)
  To: Aloka Dixit; +Cc: linux-wireless

On Wed, 2020-07-15 at 16:05 -0700, Aloka Dixit wrote:
> This patch adds new attributes to support unsolicited broadcast
> probe response transmission used for in-band
> discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior for
> fast passive scanning).
> The new attribute, NL80211_ATTR_UNSOL_BCAST_PROBE_RESP, is nested which
> supports following parameters:
> (1) NL80211_UNSOL_BCAST_PROBE_RESP_INT - Packet interval
> (2) NL80211_UNSOL_BCAST_PROBE_RESP_TMPL - Template data

And maybe some driver support flag is needed?

johannes


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-08-03 10:20   ` Johannes Berg
@ 2020-08-03 10:21     ` Johannes Berg
  2020-08-03 17:33     ` Aloka Dixit
  1 sibling, 0 replies; 12+ messages in thread
From: Johannes Berg @ 2020-08-03 10:21 UTC (permalink / raw)
  To: Aloka Dixit; +Cc: linux-wireless

On Mon, 2020-08-03 at 12:20 +0200, Johannes Berg wrote:
> On Wed, 2020-07-15 at 16:05 -0700, Aloka Dixit wrote:
> > This patch adds new attributes to support unsolicited broadcast
> > probe response transmission used for in-band
> > discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior for
> > fast passive scanning).
> > The new attribute, NL80211_ATTR_UNSOL_BCAST_PROBE_RESP, is nested which
> > supports following parameters:
> > (1) NL80211_UNSOL_BCAST_PROBE_RESP_INT - Packet interval
> > (2) NL80211_UNSOL_BCAST_PROBE_RESP_TMPL - Template data
> 
> And maybe some driver support flag is needed?

Possibly even per band, like our discussion on the other patches?

johannes


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-08-03 10:18   ` Johannes Berg
@ 2020-08-03 17:28     ` Aloka Dixit
  0 siblings, 0 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-08-03 17:28 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

On 2020-08-03 03:18, Johannes Berg wrote:
>> +/**
>> + * enum nl80211_unsol_bcast_probe_resp_attributes - Unsolicited 
>> broadcast probe
>> + *	response configuration. Applicable only in 6GHz.
>> + *
>> + * @__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID: Invalid
>> + *
>> + * @NL80211_UNSOL_BCAST_PROBE_RESP_INT: Maximum packet interval (u32, 
>> TU).
>> + *	Allowed range: 0..20 (TU = Time Unit). IEEE P802.11ax/D6.0
>> + *	26.17.2.3.2 (AP behavior for fast passive scanning.
> 
> nit: that "(" never closes
> 
>> +	tmpl = tb[NL80211_UNSOL_BCAST_PROBE_RESP_TMPL];
>> +	if (tmpl) {
>> +		presp->tmpl = nla_data(tmpl);
>> +		presp->tmpl_len = nla_len(tmpl);
>> +	}
>> 
> So, hmm. Similar question here - what do you do without a template? Or
> OTOH, why do you even need a template? Would you advertise something
> that's *different* from the regular probe response template you already
> get for offloaded probe request/response support?
> 

The template will be same as the probe response, except for the 
destination MAC address as this one is broadcast.
Main reason is that this unsolicited broadcast probe response 
transmission is specific to 6GHz and not applicable to lower bands. 
Having a separate netlink command allowed not messing with the existing 
probe response offload feature which is for all bands. Thanks.

> johannes

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-08-03 10:20   ` Johannes Berg
@ 2020-08-03 17:30     ` Aloka Dixit
  0 siblings, 0 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-08-03 17:30 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, linux-wireless-owner

On 2020-08-03 03:20, Johannes Berg wrote:
> Also,
> 
>> +/**
>> + * enum nl80211_unsol_bcast_probe_resp_attributes - Unsolicited 
>> broadcast probe
>> + *	response configuration. Applicable only in 6GHz.
>> + *
>> + * @__NL80211_UNSOL_BCAST_PROBE_RESP_INVALID: Invalid
>> + *
>> + * @NL80211_UNSOL_BCAST_PROBE_RESP_INT: Maximum packet interval (u32, 
>> TU).
>> + *	Allowed range: 0..20 (TU = Time Unit). IEEE P802.11ax/D6.0
> 
> 0 doesn't make sense, you should disallow that.
> 
> I see you used it for "turn off" at least in the mac80211 patch but it
> seems to me that should have a more explicit way at least in the
> external API? At the very least it needs to documentation.
> 
> johannes


Hi Johannes, interval=0 means 'disable' is given in the specification, 
will extend the documentation to mention that.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support
  2020-08-03 10:20   ` Johannes Berg
  2020-08-03 10:21     ` Johannes Berg
@ 2020-08-03 17:33     ` Aloka Dixit
  1 sibling, 0 replies; 12+ messages in thread
From: Aloka Dixit @ 2020-08-03 17:33 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

On 2020-08-03 03:20, Johannes Berg wrote:
> On Wed, 2020-07-15 at 16:05 -0700, Aloka Dixit wrote:
>> This patch adds new attributes to support unsolicited broadcast
>> probe response transmission used for in-band
>> discovery in 6GHz band (IEEE P802.11ax/D6.0 26.17.2.3.2, AP behavior 
>> for
>> fast passive scanning).
>> The new attribute, NL80211_ATTR_UNSOL_BCAST_PROBE_RESP, is nested 
>> which
>> supports following parameters:
>> (1) NL80211_UNSOL_BCAST_PROBE_RESP_INT - Packet interval
>> (2) NL80211_UNSOL_BCAST_PROBE_RESP_TMPL - Template data
> 
> And maybe some driver support flag is needed?
> 
> johannes

Are you referring to enable/disable flag separate from the interval 
field being used for that? Or a different command/event from driver to 
netlink advertising if the driver supports this feature?

If former, it isn't needed because interval=0 means disable.

Thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-08-03 17:35 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-15 23:05 [PATCH v3 0/2] Unsolicited broadcast probe resp support Aloka Dixit
2020-07-15 23:05 ` [PATCH v3 1/2] nl80211: Unsolicited broadcast probe response support Aloka Dixit
2020-08-03 10:18   ` Johannes Berg
2020-08-03 17:28     ` Aloka Dixit
2020-08-03 10:20   ` Johannes Berg
2020-08-03 17:30     ` Aloka Dixit
2020-08-03 10:20   ` Johannes Berg
2020-08-03 10:21     ` Johannes Berg
2020-08-03 17:33     ` Aloka Dixit
2020-07-15 23:05 ` [PATCH v3 2/2] mac80211: " Aloka Dixit
2020-07-16  9:35 ` [PATCH v3 0/2] Unsolicited broadcast probe resp support Arend Van Spriel
2020-07-20 21:36   ` Aloka Dixit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).