All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations.
@ 2016-10-13 15:15 Purushottam Kushwaha
  2016-10-21 12:27 ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Purushottam Kushwaha @ 2016-10-13 15:15 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, jouni, usdutt, amarnath, pkushwah

This commit enhances the current beacon interval validation to also consider
the "radar_detect" and "num_different_channels".

Move calculation of GCD for all beaconing interfaces to "cfg80211_iter_combinations".

Rename "cfg80211_validate_beacon_int" to "cfg80211_validate_beacon_combination"
as the validation considers other parameters.

Signed-off-by: Purushottam Kushwaha <pkushwah@qti.qualcomm.com>
---
 include/net/cfg80211.h |  3 --
 net/wireless/core.h    |  7 ++--
 net/wireless/mesh.c    |  7 ++++
 net/wireless/nl80211.c | 32 ++++++++----------
 net/wireless/util.c    | 91 +++++++++++++++++++++++++++++++++++++++-----------
 5 files changed, 97 insertions(+), 43 deletions(-)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 5000ec7..f5e076c 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -788,15 +788,12 @@ struct cfg80211_csa_settings {
  *	the GCD of a single value is considered the value itself, so for
  *	a single interface this should be set to that interface's beacon
  *	interval
- * @beacon_int_different: a flag indicating whether or not all beacon
- *	intervals (of beaconing interfaces) are different or not.
  */
 struct iface_combination_params {
 	int num_different_channels;
 	u8 radar_detect;
 	int iftype_num[NUM_NL80211_IFTYPES];
 	u32 beacon_int_gcd;
-	bool beacon_int_different;
 };
 
 /**
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 21e3188..e39c8a9 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -474,8 +474,11 @@ int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
 			   const u8 *rates, unsigned int n_rates,
 			   u32 *mask);
 
-int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev,
-				 enum nl80211_iftype iftype, u32 beacon_int);
+int
+cfg80211_validate_beacon_combination(struct cfg80211_registered_device *rdev,
+				     enum nl80211_iftype iftype,
+				     struct cfg80211_chan_def *chandef,
+				     u32 beacon_int);
 
 void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
 			       enum nl80211_iftype iftype, int num);
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c
index fa2066b..1d864b4 100644
--- a/net/wireless/mesh.c
+++ b/net/wireless/mesh.c
@@ -178,6 +178,13 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
 				     NL80211_IFTYPE_MESH_POINT))
 		return -EINVAL;
 
+	err = cfg80211_validate_beacon_combination(rdev,
+						   NL80211_IFTYPE_MESH_POINT,
+						   &setup->chandef,
+						   setup->beacon_interval);
+	if (err)
+		return err;
+
 	err = rdev_join_mesh(rdev, dev, conf, setup);
 	if (!err) {
 		memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 903cd5a..eb2bfae 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -3807,11 +3807,6 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 	params.dtim_period =
 		nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
 
-	err = cfg80211_validate_beacon_int(rdev, dev->ieee80211_ptr->iftype,
-					   params.beacon_interval);
-	if (err)
-		return err;
-
 	/*
 	 * In theory, some of these attributes should be required here
 	 * but since they were not used when the command was originally
@@ -3899,6 +3894,13 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 					   wdev->iftype))
 		return -EINVAL;
 
+	err = cfg80211_validate_beacon_combination(rdev,
+						   dev->ieee80211_ptr->iftype,
+						   &params.chandef,
+						   params.beacon_interval);
+	if (err)
+		return err;
+
 	if (info->attrs[NL80211_ATTR_TX_RATES]) {
 		err = nl80211_parse_tx_bitrate_mask(info, &params.beacon_rate);
 		if (err)
@@ -8157,11 +8159,6 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 		ibss.beacon_interval =
 			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]);
 
-	err = cfg80211_validate_beacon_int(rdev, NL80211_IFTYPE_ADHOC,
-					   ibss.beacon_interval);
-	if (err)
-		return err;
-
 	if (!rdev->ops->join_ibss)
 		return -EOPNOTSUPP;
 
@@ -8188,6 +8185,12 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 	if (err)
 		return err;
 
+	err = cfg80211_validate_beacon_combination(rdev, NL80211_IFTYPE_ADHOC,
+						   &ibss.chandef,
+						   ibss.beacon_interval);
+	if (err)
+		return err;
+
 	if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef,
 				     NL80211_IFTYPE_ADHOC))
 		return -EINVAL;
@@ -9419,17 +9422,10 @@ static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info)
 			    nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE])))
 			return -EINVAL;
 
-	if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) {
+	if (info->attrs[NL80211_ATTR_BEACON_INTERVAL])
 		setup.beacon_interval =
 			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]);
 
-		err = cfg80211_validate_beacon_int(rdev,
-						   NL80211_IFTYPE_MESH_POINT,
-						   setup.beacon_interval);
-		if (err)
-			return err;
-	}
-
 	if (info->attrs[NL80211_ATTR_DTIM_PERIOD]) {
 		setup.dtim_period =
 			nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
diff --git a/net/wireless/util.c b/net/wireless/util.c
index d2ea1f1..eb89cb9 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -1558,44 +1558,67 @@ bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
 }
 EXPORT_SYMBOL(ieee80211_chandef_to_operating_class);
 
-int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev,
-				 enum nl80211_iftype iftype, u32 beacon_int)
+int
+cfg80211_validate_beacon_combination(struct cfg80211_registered_device *rdev,
+				     enum nl80211_iftype iftype,
+				     struct cfg80211_chan_def *chandef,
+				     u32 beacon_int)
 {
+	int res, i;
 	struct wireless_dev *wdev;
+	struct ieee80211_channel *ch;
+	enum cfg80211_chan_mode chmode;
+	struct ieee80211_channel
+		*used_channels[CFG80211_MAX_NUM_DIFFERENT_CHANNELS];
 	struct iface_combination_params params = {
+		.num_different_channels = 1,
 		.beacon_int_gcd = beacon_int,	/* GCD(n) = n */
 	};
 
 	if (beacon_int < 10 || beacon_int > 10000)
 		return -EINVAL;
 
+	used_channels[0] = chandef->chan;
 	params.iftype_num[iftype] = 1;
-	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
-		if (!wdev->beacon_interval)
-			continue;
 
-		params.iftype_num[wdev->iftype]++;
-	}
+	res = cfg80211_chandef_dfs_required(&rdev->wiphy, chandef, iftype);
+	if (res < 0)
+		return res;
+	if (res)
+		params.radar_detect = BIT(chandef->width);
 
 	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
-		u32 bi_prev = wdev->beacon_interval;
-
 		if (!wdev->beacon_interval)
 			continue;
 
-		/* slight optimisation - skip identical BIs */
-		if (wdev->beacon_interval == beacon_int)
-			continue;
+		mutex_lock_nested(&wdev->mtx, 1);
+		__acquire(wdev->mtx);
+		cfg80211_get_chan_state(wdev, &ch, &chmode,
+					&params.radar_detect);
+		wdev_unlock(wdev);
 
-		params.beacon_int_different = true;
+		switch (chmode) {
+		case CHAN_MODE_UNDEFINED:
+			break;
+		case CHAN_MODE_SHARED:
+			for (i = 0; i < CFG80211_MAX_NUM_DIFFERENT_CHANNELS; i++)
+				if (!used_channels[i] || used_channels[i] == ch)
+					break;
 
-		/* Get the GCD */
-		while (bi_prev != 0) {
-			u32 tmp_bi = bi_prev;
+			if (i == CFG80211_MAX_NUM_DIFFERENT_CHANNELS)
+				return -EBUSY;
 
-			bi_prev = params.beacon_int_gcd % bi_prev;
-			params.beacon_int_gcd = tmp_bi;
+			if (!used_channels[i]) {
+				used_channels[i] = ch;
+				params.num_different_channels++;
+			}
+			break;
+		case CHAN_MODE_EXCLUSIVE:
+			params.num_different_channels++;
+			break;
 		}
+
+		params.iftype_num[wdev->iftype]++;
 	}
 
 	return cfg80211_check_combinations(&rdev->wiphy, &params);
@@ -1612,6 +1635,35 @@ int cfg80211_iter_combinations(struct wiphy *wiphy,
 	int i, j, iftype;
 	int num_interfaces = 0;
 	u32 used_iftypes = 0;
+	struct wireless_dev *wdev;
+	bool beacon_int_different = false;
+
+	list_for_each_entry(wdev, &wiphy->wdev_list, list) {
+		u32 curr_bi = wdev->beacon_interval;
+
+		if (!curr_bi)
+			continue;
+
+		/* set first beacon_int as GCD if beacon_int_gcd = 0 */
+		if (!params->beacon_int_gcd) {
+			params->beacon_int_gcd = curr_bi;
+			continue;
+		}
+
+		/* slight optimisation - skip identical BIs */
+		if (curr_bi == params->beacon_int_gcd)
+			continue;
+
+		beacon_int_different = true;
+
+		/* Get the GCD */
+		while (curr_bi != 0) {
+			u32 tmp_bi = curr_bi;
+
+			curr_bi = params->beacon_int_gcd % curr_bi;
+			params->beacon_int_gcd = tmp_bi;
+		}
+	}
 
 	if (params->radar_detect) {
 		rcu_read_lock();
@@ -1678,8 +1730,7 @@ int cfg80211_iter_combinations(struct wiphy *wiphy,
 			if (c->beacon_int_min_gcd &&
 			    params->beacon_int_gcd < c->beacon_int_min_gcd)
 				return -EINVAL;
-			if (!c->beacon_int_min_gcd &&
-			    params->beacon_int_different)
+			if (!c->beacon_int_min_gcd && beacon_int_different)
 				goto cont;
 		}
 
-- 
1.9.1

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

* Re: [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations.
  2016-10-13 15:15 [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations Purushottam Kushwaha
@ 2016-10-21 12:27 ` Johannes Berg
  2016-10-24 11:59   ` Undekari, Sunil Dutt
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2016-10-21 12:27 UTC (permalink / raw)
  To: Purushottam Kushwaha; +Cc: linux-wireless, jouni, usdutt, amarnath

On Thu, 2016-10-13 at 20:45 +0530, Purushottam Kushwaha wrote:
> This commit enhances the current beacon interval validation to also
> consider
> the "radar_detect" and "num_different_channels".
> 
> Move calculation of GCD for all beaconing interfaces to
> "cfg80211_iter_combinations".
> 
> Rename "cfg80211_validate_beacon_int" to
> "cfg80211_validate_beacon_combination"
> as the validation considers other parameters.

So this was better, but I think we're mixing too many things in here.

I'm not convinced, for example, that checking if radar is required is
really the right thing, it might still be enabled even if it's not
required (any more, regulatory may change)?

Not that I don't think that's a worthwhile goal - moving more of the
data/calculation back into cfg80211 - but I don't think it should be
mixed in here.

I've just sent out a few patches that, I think, implement the necessary
validation for just the beacon intervals, without all this extra
baggage. Please take a look and let me know what you think.

johannes

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

* RE: [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations.
  2016-10-21 12:27 ` Johannes Berg
@ 2016-10-24 11:59   ` Undekari, Sunil Dutt
  2016-10-24 13:35     ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Undekari, Sunil Dutt @ 2016-10-24 11:59 UTC (permalink / raw)
  To: Johannes Berg, Kushwaha, Purushottam
  Cc: linux-wireless, Malinen, Jouni, Hullur Subramanyam, Amarnath

PiBJJ3ZlIGp1c3Qgc2VudCBvdXQgYSBmZXcgcGF0Y2hlcyB0aGF0LCBJIHRoaW5rLCBpbXBsZW1l
bnQgdGhlIG5lY2Vzc2FyeSB2YWxpZGF0aW9uIGZvciBqdXN0IHRoZSBiZWFjb24gaW50ZXJ2YWxz
LCB3aXRob3V0IGFsbCB0aGlzIGV4dHJhIGJhZ2dhZ2UuIFBsZWFzZSB0YWtlIGEgbG9vayBhbmQg
bGV0IG1lIGtub3cgd2hhdCB5b3UgdGhpbmsuDQpJIHVuZGVyc3RhbmQgdGhhdCB0aGUgbmV3IHBh
dGNoZXMgZnJvbSB5b3UgYXJlIGluIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZGVzaWdu
IG9mIHZhbGlkYXRpbmcgdGhlIHJhZGFyIGRldGVjdGlvbiAvIGNoYW5uZWxzIGJ5IGhhdmluZyB0
aGlzIHZhbGlkYXRpb24gZG9uZSBpbiB0aGUgY2ZnODAyMTEgZHJpdmVycyB0aHJvdWdoIGNmZzgw
MjExX2NoZWNrX2NvbWJpbmF0aW9ucy4NCldpdGggdGhpcyBhcHByb2FjaCAsIHdvdWxkbid0IHRo
ZSBleGlzdGluZyBjZmc4MDIxMSBkcml2ZXJzIGJlaGF2ZSB0aGUgb3RoZXIgd2F5ID8gSSBtZWFu
ICwgd2l0aCB0aGVzZSBjb21taXRzIGFuZCB0aGUgY3VycmVudCBjZmc4MDIxMSBkcml2ZXJzICgg
ZG8gbm90IGFkdmVydGlzZSBiZWFjb25faW50X21pbl9nY2QgYW5kIGludm9rZSBjZmc4MDIxMV9j
aGVja19jb21iaW5hdGlvbnMpICwgdGhlIHZhbGlkYXRpb24gZm9yIHRoZSBkaWZmZXJlbnQgYmVh
Y29uIGludGVydmFsIHNoYWxsIHN1Y2NlZWQgLCBidXQgdGhlIGN1cnJlbnQga2VybmVsICggY2Zn
ODAyMTEgaW50ZXJmYWNlICkgd2l0aCB0aGUgc2FtZSBkcml2ZXIgZmFpbHMgdGhlIHN0YXJ0IG9m
IHRoZSBBUCAvIG1lc2guIA0KSXMgaXQgbm90IGJyZWFraW5nIHRoZSBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5ID8gSXMgdGhpcyBleHBlY3RlZCA/IA0KDQpSZWdhcmRzLA0KU3VuaWwNCg0KDQoNCi0t
LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBKb2hhbm5lcyBCZXJnIFttYWlsdG86am9o
YW5uZXNAc2lwc29sdXRpb25zLm5ldF0gDQpTZW50OiBGcmlkYXksIE9jdG9iZXIgMjEsIDIwMTYg
NTo1OCBQTQ0KVG86IEt1c2h3YWhhLCBQdXJ1c2hvdHRhbSA8cGt1c2h3YWhAcXRpLnF1YWxjb21t
LmNvbT4NCkNjOiBsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmc7IE1hbGluZW4sIEpvdW5p
IDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPjsgVW5kZWthcmksIFN1bmlsIER1dHQgPHVzZHV0dEBx
dGkucXVhbGNvbW0uY29tPjsgSHVsbHVyIFN1YnJhbWFueWFtLCBBbWFybmF0aCA8YW1hcm5hdGhA
cWNhLnF1YWxjb21tLmNvbT4NClN1YmplY3Q6IFJlOiBbUEFUQ0ggdjNdIGNmZzgwMjExOiBDaGVj
ayByYWRhcl9kZXRlY3QgYW5kIG51bV9kaWZmZXJlbnRfY2hhbm5lbHMgd2l0aCBiZWFjb24gaW50
ZXJmYWNlIGNvbWJpbmF0aW9ucy4NCg0KT24gVGh1LCAyMDE2LTEwLTEzIGF0IDIwOjQ1ICswNTMw
LCBQdXJ1c2hvdHRhbSBLdXNod2FoYSB3cm90ZToNCj4gVGhpcyBjb21taXQgZW5oYW5jZXMgdGhl
IGN1cnJlbnQgYmVhY29uIGludGVydmFsIHZhbGlkYXRpb24gdG8gYWxzbyANCj4gY29uc2lkZXIg
dGhlICJyYWRhcl9kZXRlY3QiIGFuZCAibnVtX2RpZmZlcmVudF9jaGFubmVscyIuDQo+IA0KPiBN
b3ZlIGNhbGN1bGF0aW9uIG9mIEdDRCBmb3IgYWxsIGJlYWNvbmluZyBpbnRlcmZhY2VzIHRvIA0K
PiAiY2ZnODAyMTFfaXRlcl9jb21iaW5hdGlvbnMiLg0KPiANCj4gUmVuYW1lICJjZmc4MDIxMV92
YWxpZGF0ZV9iZWFjb25faW50IiB0byANCj4gImNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9jb21i
aW5hdGlvbiINCj4gYXMgdGhlIHZhbGlkYXRpb24gY29uc2lkZXJzIG90aGVyIHBhcmFtZXRlcnMu
DQoNClNvIHRoaXMgd2FzIGJldHRlciwgYnV0IEkgdGhpbmsgd2UncmUgbWl4aW5nIHRvbyBtYW55
IHRoaW5ncyBpbiBoZXJlLg0KDQpJJ20gbm90IGNvbnZpbmNlZCwgZm9yIGV4YW1wbGUsIHRoYXQg
Y2hlY2tpbmcgaWYgcmFkYXIgaXMgcmVxdWlyZWQgaXMgcmVhbGx5IHRoZSByaWdodCB0aGluZywg
aXQgbWlnaHQgc3RpbGwgYmUgZW5hYmxlZCBldmVuIGlmIGl0J3Mgbm90IHJlcXVpcmVkIChhbnkg
bW9yZSwgcmVndWxhdG9yeSBtYXkgY2hhbmdlKT8NCg0KTm90IHRoYXQgSSBkb24ndCB0aGluayB0
aGF0J3MgYSB3b3J0aHdoaWxlIGdvYWwgLSBtb3ZpbmcgbW9yZSBvZiB0aGUgZGF0YS9jYWxjdWxh
dGlvbiBiYWNrIGludG8gY2ZnODAyMTEgLSBidXQgSSBkb24ndCB0aGluayBpdCBzaG91bGQgYmUg
bWl4ZWQgaW4gaGVyZS4NCg0KSSd2ZSBqdXN0IHNlbnQgb3V0IGEgZmV3IHBhdGNoZXMgdGhhdCwg
SSB0aGluaywgaW1wbGVtZW50IHRoZSBuZWNlc3NhcnkgdmFsaWRhdGlvbiBmb3IganVzdCB0aGUg
YmVhY29uIGludGVydmFscywgd2l0aG91dCBhbGwgdGhpcyBleHRyYSBiYWdnYWdlLiBQbGVhc2Ug
dGFrZSBhIGxvb2sgYW5kIGxldCBtZSBrbm93IHdoYXQgeW91IHRoaW5rLg0KDQpqb2hhbm5lcw0K

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

* Re: [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations.
  2016-10-24 11:59   ` Undekari, Sunil Dutt
@ 2016-10-24 13:35     ` Johannes Berg
  2016-10-24 14:20       ` Undekari, Sunil Dutt
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2016-10-24 13:35 UTC (permalink / raw)
  To: Undekari, Sunil Dutt, Kushwaha, Purushottam
  Cc: linux-wireless, Malinen, Jouni, Hullur Subramanyam, Amarnath

On Mon, 2016-10-24 at 11:59 +0000, Undekari, Sunil Dutt wrote:
> > 
> > I've just sent out a few patches that, I think, implement the
> > necessary validation for just the beacon intervals, without all
> > this extra baggage. Please take a look and let me know what you
> > think.
> I understand that the new patches from you are in consistent with the
> existing design of validating the radar detection / channels by
> having this validation done in the cfg80211 drivers through
> cfg80211_check_combinations.

Ok, so we agree here, that's good :)

> With this approach , wouldn't the existing cfg80211 drivers behave
> the other way ? I mean , with these commits and the current cfg80211
> drivers ( do not advertise beacon_int_min_gcd and invoke
> cfg80211_check_combinations) , the validation for the different
> beacon interval shall succeed , but the current kernel ( cfg80211
> interface ) with the same driver fails the start of the AP / mesh. 
> Is it not breaking the backward compatibility ? Is this expected ? 

Any driver that supports combinations should also invoke
check_combinations. This doesn't appear to be true for mwifiex, but
that's already a bug/problem in that driver, it doesn't really change
much?

johannes

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

* RE: [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations.
  2016-10-24 13:35     ` Johannes Berg
@ 2016-10-24 14:20       ` Undekari, Sunil Dutt
  0 siblings, 0 replies; 5+ messages in thread
From: Undekari, Sunil Dutt @ 2016-10-24 14:20 UTC (permalink / raw)
  To: Johannes Berg, Kushwaha, Purushottam
  Cc: linux-wireless, Malinen, Jouni, Hullur Subramanyam, Amarnath

T0sgLiBUaGFua3MgLiBXZSBzaGFsbCB3YWl0IGZvciB0aGVtIHRvIGdldCB1cCBzdHJlYW1lZC4N
Cg0KUmVnYXJkcywNClN1bmlsDQogIA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJv
bTogSm9oYW5uZXMgQmVyZyBbbWFpbHRvOmpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXRdIA0KU2Vu
dDogTW9uZGF5LCBPY3RvYmVyIDI0LCAyMDE2IDc6MDYgUE0NClRvOiBVbmRla2FyaSwgU3VuaWwg
RHV0dCA8dXNkdXR0QHF0aS5xdWFsY29tbS5jb20+OyBLdXNod2FoYSwgUHVydXNob3R0YW0gPHBr
dXNod2FoQHF0aS5xdWFsY29tbS5jb20+DQpDYzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwu
b3JnOyBNYWxpbmVuLCBKb3VuaSA8am91bmlAcWNhLnF1YWxjb21tLmNvbT47IEh1bGx1ciBTdWJy
YW1hbnlhbSwgQW1hcm5hdGggPGFtYXJuYXRoQHFjYS5xdWFsY29tbS5jb20+DQpTdWJqZWN0OiBS
ZTogW1BBVENIIHYzXSBjZmc4MDIxMTogQ2hlY2sgcmFkYXJfZGV0ZWN0IGFuZCBudW1fZGlmZmVy
ZW50X2NoYW5uZWxzIHdpdGggYmVhY29uIGludGVyZmFjZSBjb21iaW5hdGlvbnMuDQoNCk9uIE1v
biwgMjAxNi0xMC0yNCBhdCAxMTo1OSArMDAwMCwgVW5kZWthcmksIFN1bmlsIER1dHQgd3JvdGU6
DQo+ID4gDQo+ID4gSSd2ZSBqdXN0IHNlbnQgb3V0IGEgZmV3IHBhdGNoZXMgdGhhdCwgSSB0aGlu
aywgaW1wbGVtZW50IHRoZSANCj4gPiBuZWNlc3NhcnkgdmFsaWRhdGlvbiBmb3IganVzdCB0aGUg
YmVhY29uIGludGVydmFscywgd2l0aG91dCBhbGwgdGhpcyANCj4gPiBleHRyYSBiYWdnYWdlLiBQ
bGVhc2UgdGFrZSBhIGxvb2sgYW5kIGxldCBtZSBrbm93IHdoYXQgeW91IHRoaW5rLg0KPiBJIHVu
ZGVyc3RhbmQgdGhhdCB0aGUgbmV3IHBhdGNoZXMgZnJvbSB5b3UgYXJlIGluIGNvbnNpc3RlbnQg
d2l0aCB0aGUgDQo+IGV4aXN0aW5nIGRlc2lnbiBvZiB2YWxpZGF0aW5nIHRoZSByYWRhciBkZXRl
Y3Rpb24gLyBjaGFubmVscyBieSBoYXZpbmcgDQo+IHRoaXMgdmFsaWRhdGlvbiBkb25lIGluIHRo
ZSBjZmc4MDIxMSBkcml2ZXJzIHRocm91Z2ggDQo+IGNmZzgwMjExX2NoZWNrX2NvbWJpbmF0aW9u
cy4NCg0KT2ssIHNvIHdlIGFncmVlIGhlcmUsIHRoYXQncyBnb29kIDopDQoNCj4gV2l0aCB0aGlz
IGFwcHJvYWNoICwgd291bGRuJ3QgdGhlIGV4aXN0aW5nIGNmZzgwMjExIGRyaXZlcnMgYmVoYXZl
IHRoZSANCj4gb3RoZXIgd2F5ID8gSSBtZWFuICwgd2l0aCB0aGVzZSBjb21taXRzIGFuZCB0aGUg
Y3VycmVudCBjZmc4MDIxMSANCj4gZHJpdmVycyAoIGRvIG5vdCBhZHZlcnRpc2UgYmVhY29uX2lu
dF9taW5fZ2NkIGFuZCBpbnZva2UNCj4gY2ZnODAyMTFfY2hlY2tfY29tYmluYXRpb25zKSAsIHRo
ZSB2YWxpZGF0aW9uIGZvciB0aGUgZGlmZmVyZW50IGJlYWNvbiANCj4gaW50ZXJ2YWwgc2hhbGwg
c3VjY2VlZCAsIGJ1dCB0aGUgY3VycmVudCBrZXJuZWwgKCBjZmc4MDIxMSBpbnRlcmZhY2UgKSAN
Cj4gd2l0aCB0aGUgc2FtZSBkcml2ZXIgZmFpbHMgdGhlIHN0YXJ0IG9mIHRoZSBBUCAvIG1lc2gu
DQo+IElzIGl0IG5vdCBicmVha2luZyB0aGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSA/IElzIHRo
aXMgZXhwZWN0ZWQgPw0KDQpBbnkgZHJpdmVyIHRoYXQgc3VwcG9ydHMgY29tYmluYXRpb25zIHNo
b3VsZCBhbHNvIGludm9rZSBjaGVja19jb21iaW5hdGlvbnMuIFRoaXMgZG9lc24ndCBhcHBlYXIg
dG8gYmUgdHJ1ZSBmb3IgbXdpZmlleCwgYnV0IHRoYXQncyBhbHJlYWR5IGEgYnVnL3Byb2JsZW0g
aW4gdGhhdCBkcml2ZXIsIGl0IGRvZXNuJ3QgcmVhbGx5IGNoYW5nZSBtdWNoPw0KDQpqb2hhbm5l
cw0K

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

end of thread, other threads:[~2016-10-24 14:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-13 15:15 [PATCH v3] cfg80211: Check radar_detect and num_different_channels with beacon interface combinations Purushottam Kushwaha
2016-10-21 12:27 ` Johannes Berg
2016-10-24 11:59   ` Undekari, Sunil Dutt
2016-10-24 13:35     ` Johannes Berg
2016-10-24 14:20       ` Undekari, Sunil Dutt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.