2014-10-03 21:59:26

by Kyeyoon Park

[permalink] [raw]
Subject: [PATCH] cfg80211: Add support for ACS offloading

From: Peng Xu <[email protected]>

Add support for offloading ACS functionality to the driver. A new
feature flag NL80211_FEATURE_AP_ACS_OFFLOAD was added to support
ACS (Automatic Channel Selection) offload functionality. This flag
allows the driver to advertise its ACS capability.

When hostapd starts with the "channel" configuration set to 0, it will
check whether the driver has the capability of doing the ACS on its own.
If the driver has such capability, then the channel selection will be
done in the driver. The kernel will skip the channel information
validation since it would initially be NULL when this feature is
enabled. After the channel is selected by the driver, a channel
change event will be sent from the driver to the kernel which updates
the channel information it maintains. This event is in turn sent to
hostapd and the channel information in hostapd will get updated as well.

Signed-off-by: Peng Xu <[email protected]>
Signed-off-by: Kyeyoon Park <[email protected]>
---
include/uapi/linux/nl80211.h | 3 +++
net/wireless/nl80211.c | 15 +++++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 4b28dc0..73c0950 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -4042,6 +4042,8 @@ enum nl80211_ap_sme_features {
* multiplexing powersave, ie. can turn off all but one chain
* and then wake the rest up as required after, for example,
* rts/cts handshake.
+ * @NL80211_FEATURE_AP_ACS_OFFLOAD: This driver supports ACS (Automatic Channel
+ * Selection) during AP starting time.
*/
enum nl80211_feature_flags {
NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
@@ -4070,6 +4072,7 @@ enum nl80211_feature_flags {
NL80211_FEATURE_ACKTO_ESTIMATION = 1 << 23,
NL80211_FEATURE_STATIC_SMPS = 1 << 24,
NL80211_FEATURE_DYNAMIC_SMPS = 1 << 25,
+ NL80211_FEATURE_AP_ACS_OFFLOAD = 1 << 26,
};

/**
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index cb9f5a4..846860d 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1990,7 +1990,8 @@ static int __nl80211_set_channel(struct cfg80211_registered_device *rdev,
}

/* Only allow dynamic channel width changes */
- if (chandef.chan != wdev->preset_chandef.chan) {
+ if ((wdev->preset_chandef.chan != NULL) &&
+ chandef.chan != wdev->preset_chandef.chan) {
result = -EBUSY;
break;
}
@@ -3220,6 +3221,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
struct net_device *dev = info->user_ptr[1];
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_ap_settings params;
+ bool acs_offload = false;
int err;

if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
@@ -3333,10 +3335,15 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
return err;
} else if (wdev->preset_chandef.chan) {
params.chandef = wdev->preset_chandef;
- } else if (!nl80211_get_ap_channel(rdev, &params))
- return -EINVAL;
+ } else if (!nl80211_get_ap_channel(rdev, &params)) {
+ if (rdev->wiphy.features & NL80211_FEATURE_AP_ACS_OFFLOAD)
+ acs_offload = true;
+ else
+ return -EINVAL;
+ }

- if (!cfg80211_reg_can_beacon(&rdev->wiphy, &params.chandef,
+ if (!acs_offload &&
+ !cfg80211_reg_can_beacon(&rdev->wiphy, &params.chandef,
wdev->iftype))
return -EINVAL;

--
1.9.1



2014-10-09 18:40:42

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] cfg80211: Add support for ACS offloading

On Thu, 2014-10-09 at 17:38 +0000, Xu, Peng wrote:

> This change is originated from a problem caused by OBSS scan and ACS
> feature in the driver. When SAP is started, hostapd will do an OBSS
> scan based on the channel setting in hostapd.conf, if the wlan driver
> has the ACS capability, it may choose a different channel. Even it
> notifies hostapd about the channel selection, the OBSS scan result
> may become invalid if a different channel is selected and SAP may end
> up operating in not desired mode.
> This change will allow the wlan driver do the ACS and decide a
> channel, once hostapd is notified, it can then do OBSS scan using that
> channel. ACS operation is done during SAP starting up, beacon is sent
> after channel is selected by driver.

All of this may be true, but I was asking why this has to be part of
START_AP, and that's not answering that question.

johannes


2014-10-09 19:21:11

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] cfg80211: Add support for ACS offloading

On Thu, 2014-10-09 at 19:11 +0000, Xu, Peng wrote:
>
> Hi Johannes,
> This is because that OBSS scan happens before starting AP and ACS happens within start_ap.

So you're saying your patch doesn't work?

And it would actually be better to do what I suggested; namely:
1) ask the device to do ACS
2) do OBSS scan
3) start AP


I can also ask another way: please explain the design decisions in your
patch.

johannes


2014-10-09 19:11:23

by Xu, Peng

[permalink] [raw]
Subject: RE: [PATCH] cfg80211: Add support for ACS offloading

DQpIaSBKb2hhbm5lcywNClRoaXMgaXMgYmVjYXVzZSB0aGF0IE9CU1Mgc2NhbiBoYXBwZW5zIGJl
Zm9yZSBzdGFydGluZyBBUCBhbmQgQUNTIGhhcHBlbnMgd2l0aGluIHN0YXJ0X2FwLg0KDQpUaGFu
a3MsDQpQZW5nDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBKb2hhbm5lcyBC
ZXJnIFttYWlsdG86am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldF0gDQpTZW50OiBUaHVyc2RheSwg
T2N0b2JlciAwOSwgMjAxNCAxMTo0MSBBTQ0KVG86IFh1LCBQZW5nDQpDYzogUGFyaywgS3lleW9v
bjsgY2ZnODAyMTFtYWM4MDIxMTsgbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnDQpTdWJq
ZWN0OiBSZTogW1BBVENIXSBjZmc4MDIxMTogQWRkIHN1cHBvcnQgZm9yIEFDUyBvZmZsb2FkaW5n
DQoNCk9uIFRodSwgMjAxNC0xMC0wOSBhdCAxNzozOCArMDAwMCwgWHUsIFBlbmcgd3JvdGU6DQoN
Cj4gVGhpcyBjaGFuZ2UgaXMgb3JpZ2luYXRlZCBmcm9tIGEgcHJvYmxlbSBjYXVzZWQgYnkgT0JT
UyBzY2FuIGFuZCBBQ1MgDQo+IGZlYXR1cmUgaW4gdGhlIGRyaXZlci4gV2hlbiBTQVAgaXMgc3Rh
cnRlZCwgaG9zdGFwZCB3aWxsIGRvIGFuIE9CU1MgDQo+IHNjYW4gYmFzZWQgb24gdGhlIGNoYW5u
ZWwgc2V0dGluZyBpbiBob3N0YXBkLmNvbmYsIGlmIHRoZSB3bGFuIGRyaXZlciANCj4gaGFzIHRo
ZSBBQ1MgY2FwYWJpbGl0eSwgaXQgbWF5IGNob29zZSBhIGRpZmZlcmVudCBjaGFubmVsLiBFdmVu
IGl0IA0KPiBub3RpZmllcyBob3N0YXBkIGFib3V0IHRoZSBjaGFubmVsIHNlbGVjdGlvbiwgdGhl
IE9CU1Mgc2NhbiByZXN1bHQgbWF5IA0KPiBiZWNvbWUgaW52YWxpZCBpZiBhIGRpZmZlcmVudCBj
aGFubmVsIGlzIHNlbGVjdGVkIGFuZCBTQVAgbWF5IGVuZCB1cCANCj4gb3BlcmF0aW5nIGluIG5v
dCBkZXNpcmVkIG1vZGUuDQo+IFRoaXMgY2hhbmdlIHdpbGwgYWxsb3cgdGhlIHdsYW4gZHJpdmVy
IGRvIHRoZSBBQ1MgYW5kIGRlY2lkZSBhIA0KPiBjaGFubmVsLCBvbmNlIGhvc3RhcGQgaXMgbm90
aWZpZWQsIGl0IGNhbiB0aGVuIGRvIE9CU1Mgc2NhbiB1c2luZyB0aGF0IA0KPiBjaGFubmVsLiBB
Q1Mgb3BlcmF0aW9uIGlzIGRvbmUgZHVyaW5nIFNBUCBzdGFydGluZyB1cCwgYmVhY29uIGlzIHNl
bnQgDQo+IGFmdGVyIGNoYW5uZWwgaXMgc2VsZWN0ZWQgYnkgZHJpdmVyLg0KDQpBbGwgb2YgdGhp
cyBtYXkgYmUgdHJ1ZSwgYnV0IEkgd2FzIGFza2luZyB3aHkgdGhpcyBoYXMgdG8gYmUgcGFydCBv
ZiBTVEFSVF9BUCwgYW5kIHRoYXQncyBub3QgYW5zd2VyaW5nIHRoYXQgcXVlc3Rpb24uDQoNCmpv
aGFubmVzDQoNCg==

2014-10-09 17:38:49

by Xu, Peng

[permalink] [raw]
Subject: RE: [PATCH] cfg80211: Add support for ACS offloading

SGkgSm9oYW5uZXMsDQpUaGlzIGNoYW5nZSBpcyBvcmlnaW5hdGVkIGZyb20gYSBwcm9ibGVtIGNh
dXNlZCBieSBPQlNTIHNjYW4gYW5kIEFDUyBmZWF0dXJlIGluIHRoZSBkcml2ZXIuIFdoZW4gU0FQ
IGlzIHN0YXJ0ZWQsIGhvc3RhcGQgd2lsbCBkbyBhbiBPQlNTIHNjYW4gYmFzZWQgb24gdGhlIGNo
YW5uZWwgc2V0dGluZyBpbiBob3N0YXBkLmNvbmYsIGlmIHRoZSB3bGFuIGRyaXZlciBoYXMgdGhl
IEFDUyBjYXBhYmlsaXR5LCBpdCBtYXkgY2hvb3NlIGEgZGlmZmVyZW50IGNoYW5uZWwuIEV2ZW4g
aXQgbm90aWZpZXMgaG9zdGFwZCBhYm91dCB0aGUgY2hhbm5lbCBzZWxlY3Rpb24sIHRoZSBPQlNT
IHNjYW4gcmVzdWx0ICBtYXkgYmVjb21lIGludmFsaWQgaWYgYSBkaWZmZXJlbnQgY2hhbm5lbCBp
cyBzZWxlY3RlZCBhbmQgU0FQIG1heSBlbmQgdXAgb3BlcmF0aW5nIGluIG5vdCBkZXNpcmVkIG1v
ZGUuDQpUaGlzIGNoYW5nZSB3aWxsIGFsbG93IHRoZSB3bGFuIGRyaXZlciBkbyB0aGUgQUNTIGFu
ZCBkZWNpZGUgYSBjaGFubmVsLCBvbmNlIGhvc3RhcGQgaXMgbm90aWZpZWQsIGl0IGNhbiB0aGVu
IGRvIE9CU1Mgc2NhbiB1c2luZyB0aGF0IGNoYW5uZWwuIEFDUyBvcGVyYXRpb24gaXMgZG9uZSBk
dXJpbmcgU0FQIHN0YXJ0aW5nIHVwLCBiZWFjb24gaXMgc2VudCBhZnRlciBjaGFubmVsIGlzIHNl
bGVjdGVkIGJ5IGRyaXZlci4gDQoNClRoYW5rcywNClBlbmcNCg0KLS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCkZyb206IEpvaGFubmVzIEJlcmcgW21haWx0bzpqb2hhbm5lc0BzaXBzb2x1dGlv
bnMubmV0XSANClNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDA5LCAyMDE0IDI6NDYgQU0NClRvOiBQ
YXJrLCBLeWV5b29uDQpDYzogWHUsIFBlbmc7IGNmZzgwMjExbWFjODAyMTE7IGxpbnV4LXdpcmVs
ZXNzQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSF0gY2ZnODAyMTE6IEFkZCBz
dXBwb3J0IGZvciBBQ1Mgb2ZmbG9hZGluZw0KDQpPbiBGcmksIDIwMTQtMTAtMDMgYXQgMTQ6NTgg
LTA3MDAsIEt5ZXlvb24gUGFyayB3cm90ZToNCj4gRnJvbTogUGVuZyBYdSA8cHh1QHFjYS5xdWFs
Y29tbS5jb20+DQo+IA0KPiBBZGQgc3VwcG9ydCBmb3Igb2ZmbG9hZGluZyBBQ1MgZnVuY3Rpb25h
bGl0eSB0byB0aGUgZHJpdmVyLiBBIG5ldyANCj4gZmVhdHVyZSBmbGFnIE5MODAyMTFfRkVBVFVS
RV9BUF9BQ1NfT0ZGTE9BRCB3YXMgYWRkZWQgdG8gc3VwcG9ydCBBQ1MgDQo+IChBdXRvbWF0aWMg
Q2hhbm5lbCBTZWxlY3Rpb24pIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBmbGFnIGFsbG93
cyANCj4gdGhlIGRyaXZlciB0byBhZHZlcnRpc2UgaXRzIEFDUyBjYXBhYmlsaXR5Lg0KPiANCj4g
V2hlbiBob3N0YXBkIHN0YXJ0cyB3aXRoIHRoZSAiY2hhbm5lbCIgY29uZmlndXJhdGlvbiBzZXQg
dG8gMCwgaXQgd2lsbCANCj4gY2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGhhcyB0aGUgY2FwYWJp
bGl0eSBvZiBkb2luZyB0aGUgQUNTIG9uIGl0cyBvd24uDQo+IElmIHRoZSBkcml2ZXIgaGFzIHN1
Y2ggY2FwYWJpbGl0eSwgdGhlbiB0aGUgY2hhbm5lbCBzZWxlY3Rpb24gd2lsbCBiZSANCj4gZG9u
ZSBpbiB0aGUgZHJpdmVyLiBUaGUga2VybmVsIHdpbGwgc2tpcCB0aGUgY2hhbm5lbCBpbmZvcm1h
dGlvbiANCj4gdmFsaWRhdGlvbiBzaW5jZSBpdCB3b3VsZCBpbml0aWFsbHkgYmUgTlVMTCB3aGVu
IHRoaXMgZmVhdHVyZSBpcyANCj4gZW5hYmxlZC4gQWZ0ZXIgdGhlIGNoYW5uZWwgaXMgc2VsZWN0
ZWQgYnkgdGhlIGRyaXZlciwgYSBjaGFubmVsIGNoYW5nZSANCj4gZXZlbnQgd2lsbCBiZSBzZW50
IGZyb20gdGhlIGRyaXZlciB0byB0aGUga2VybmVsIHdoaWNoIHVwZGF0ZXMgdGhlIA0KPiBjaGFu
bmVsIGluZm9ybWF0aW9uIGl0IG1haW50YWlucy4gVGhpcyBldmVudCBpcyBpbiB0dXJuIHNlbnQg
dG8gDQo+IGhvc3RhcGQgYW5kIHRoZSBjaGFubmVsIGluZm9ybWF0aW9uIGluIGhvc3RhcGQgd2ls
bCBnZXQgdXBkYXRlZCBhcyB3ZWxsLg0KDQpJcyB0aGlzIGRlc2lnbiByZXF1aXJlZD8gVGhhdCBz
ZWVtcyBhIGJpdCBzdHJhbmdlIGJlY2F1c2UgeW91J2Qgc3RhcnQgdGhlIEFQIHdpdGggLi4uIGlu
dmFsaWQgYmVhY29uIGluZm9ybWF0aW9uPyBJbnZhbGlkIHByb2JlIHJlc3BvbnNlLCBhbmQgYWxs
IHRoYXQ/IEV2ZW4gYW4gaW52YWxpZCBjaGFubmVsIHJlcG9ydGVkIHRvIG90aGVyIHVzZXJzcGFj
ZS4NCg0KSSdkIG11Y2ggcHJlZmVyIG9mZmxvYWRpbmcgdGhpcyBhcyBhIHNlcGFyYXRlIG9wZXJh
dGlvbiwgd2l0aCB0aGUgZGV2aWNlIHJlcG9ydGluZyBiYWNrIHRoZSBiZXN0IGNoYW5uZWwgKGNv
bmZpZ3VyYXRpb24pIHRvIHVzZSwgYW5kIGhvc3RhcGQgdGhlbiB1c2luZyB0aGF0IHRvIHN0YXJ0
IHVwIGl0cyBvcGVyYXRpb24uDQoNCmpvaGFubmVzDQoNCg0K

2014-10-09 09:46:14

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] cfg80211: Add support for ACS offloading

On Fri, 2014-10-03 at 14:58 -0700, Kyeyoon Park wrote:
> From: Peng Xu <[email protected]>
>
> Add support for offloading ACS functionality to the driver. A new
> feature flag NL80211_FEATURE_AP_ACS_OFFLOAD was added to support
> ACS (Automatic Channel Selection) offload functionality. This flag
> allows the driver to advertise its ACS capability.
>
> When hostapd starts with the "channel" configuration set to 0, it will
> check whether the driver has the capability of doing the ACS on its own.
> If the driver has such capability, then the channel selection will be
> done in the driver. The kernel will skip the channel information
> validation since it would initially be NULL when this feature is
> enabled. After the channel is selected by the driver, a channel
> change event will be sent from the driver to the kernel which updates
> the channel information it maintains. This event is in turn sent to
> hostapd and the channel information in hostapd will get updated as well.

Is this design required? That seems a bit strange because you'd start
the AP with ... invalid beacon information? Invalid probe response, and
all that? Even an invalid channel reported to other userspace.

I'd much prefer offloading this as a separate operation, with the device
reporting back the best channel (configuration) to use, and hostapd then
using that to start up its operation.

johannes