Message ID | 1372768095-26053-4-git-send-email-ilan.peer@intel.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Tue, Jul 02, 2013 at 03:28:15PM +0300, Ilan Peer wrote: > Allow GO operation on a channel marked with > IEEE80211_CHAN_INDOOR_ONLY or IEEE80211_CHAN_GO_CONCURRENT > iff there is an active station interface that is associated to > an AP operating on this channel. > > Note that this is a permissive approach to the FCC definitions, > that require a clear assessment that either the platform device > is an indoor device, or the device operating the AP is an indoor > device, i.e., AC powered. > It is assumed that these restrictions are enforced by user space. The introduction in 0/3 mentioned DFS, but I did not see it being addressed in any of the actual changes. Is this only for indoors vs. outdoors? > Furthermore, it is assumed, that if the conditions that allowed for > the operation of the GO on such a channel change, it is the > responsibility of user space to evacuate the GO from the channel. Do you have plans or changes to address this? I'd assume wpa_supplicant could stop the group on channel list changes, but I don't think it does that currently.
On Tue, Jul 2, 2013 at 5:28 AM, Ilan Peer <ilan.peer@intel.com> wrote: > From: David Spinadel <david.spinadel@intel.com> > > Allow GO operation on a channel marked with > IEEE80211_CHAN_INDOOR_ONLY or IEEE80211_CHAN_GO_CONCURRENT > iff there is an active station interface that is associated to > an AP operating on this channel. > > Note that this is a permissive approach to the FCC definitions, > that require a clear assessment that either the platform device > is an indoor device, or the device operating the AP is an indoor > device, i.e., AC powered. > It is assumed that these restrictions are enforced by user space. > Furthermore, it is assumed, that if the conditions that allowed for > the operation of the GO on such a channel change, it is the > responsibility of user space to evacuate the GO from the channel. In the context of strict regulatory data we currently do not differentiate specifically between a device that can initiate radiation between AP and Group Owner (GO) but in your earlier patches you proposed a way to do that. I reviewed feedback on that patch there. It may make sense however to define clearly what you mean by why the flag is being introduced by documenting the use case, ie what you describe here. Other regulatory bodies may follow and it helps to provide context here. My review below. > Signed-off-by: David Spinadel <david.spinadel@intel.com> > Signed-off-by: Ilan Peer <ilan.peer@intel.com> > --- > include/net/cfg80211.h | 4 +- > net/mac80211/ibss.c | 2 +- > net/wireless/Kconfig | 10 +++++ > net/wireless/chan.c | 98 ++++++++++++++++++++++++++++++++++++++++++++---- > net/wireless/mesh.c | 2 +- > net/wireless/nl80211.c | 8 ++-- > net/wireless/trace.h | 11 ++++-- > 7 files changed, 118 insertions(+), 17 deletions(-) > > diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h > index f0badeb..17d693d 100644 > --- a/include/net/cfg80211.h > +++ b/include/net/cfg80211.h > @@ -4070,12 +4070,14 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy, > * cfg80211_reg_can_beacon - check if beaconing is allowed > * @wiphy: the wiphy > * @chandef: the channel definition > + * @p2p_go: if the interface type is a P2P GO > * > * Return: %true if there is no secondary channel or the secondary channel(s) > * can be used for beaconing (i.e. is not a radar channel etc.) > */ > bool cfg80211_reg_can_beacon(struct wiphy *wiphy, > - struct cfg80211_chan_def *chandef); > + struct cfg80211_chan_def *chandef, > + bool p2p_go); > > /* > * cfg80211_ch_switch_notify - update wdev channel and notify userspace > diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c > index ea7b9c2..1e0fac1 100644 > --- a/net/mac80211/ibss.c > +++ b/net/mac80211/ibss.c > @@ -82,7 +82,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, > sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0; > > chandef = ifibss->chandef; > - if (!cfg80211_reg_can_beacon(local->hw.wiphy, &chandef)) { > + if (!cfg80211_reg_can_beacon(local->hw.wiphy, &chandef, false)) { > chandef.width = NL80211_CHAN_WIDTH_20; > chandef.center_freq1 = chan->center_freq; > } > diff --git a/net/wireless/Kconfig b/net/wireless/Kconfig > index de76078..d9e2be7 100644 > --- a/net/wireless/Kconfig > +++ b/net/wireless/Kconfig > @@ -102,6 +102,16 @@ config CFG80211_REG_CELLULAR_HINTS > This option adds support for drivers that can receive regulatory > hints from cellular base stations > > +config CFG80211_REG_SOFT_CONFIGURATIONS > + bool "cfg80211 support for GO operation on additional channels" > + depends on CFG80211 && CFG80211_CERTIFICATION_ONUS > + ---help--- > + This option enables the operation of a P2P Group Owner on > + additional channels, if there is a clear assessment that > + the platform device operates in an indoor environment or > + in case that there is an additional BSS interface which is > + connected to an AP which is an indoor device. > + I like this approach, indeed this is great work and reflects usage of the onus kconfig option appropriately in this case due dilligence required more in part on userspace / other components for full regulatory compliance. > config CFG80211_DEFAULT_PS > bool "enable powersave by default" > depends on CFG80211 > diff --git a/net/wireless/chan.c b/net/wireless/chan.c > index 50f6195..92d9e3c 100644 > --- a/net/wireless/chan.c > +++ b/net/wireless/chan.c > @@ -457,18 +457,102 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy, > } > EXPORT_SYMBOL(cfg80211_chandef_usable); > > +#ifdef CPTCFG_CFG80211_REG_SOFT_CONFIGURATIONS > +static int cfg80211_get_unii_band(int freq) > +{ > + /* UNII-1 */ > + if (freq >= 5150 && freq <= 5250) > + return 0; > + > + /* UNII-2 */ > + if (freq > 5250 && freq <= 5350) > + return 1; > + > + /* UNII-2E */ > + if (freq >= 5470 && freq <= 5725) > + return 2; > + > + /* UNII-3 */ > + if (freq > 5725 && freq <= 5825) > + return 3; > + > + WARN_ON(1); > + return -EINVAL; > +} > +#endif #else? Are you aware of UNII-1, UNII-2, UNII-2E, UNII-3 are specific world regulatory language bands? When I last tried to look for a clear definition I could not find a clear definition of them and its why on the ath module on for QCA modules I state "we call these" in reference to the UNII nomenclature. If we can get a clear resource for its definition that would help here. > + > +/* For GO only, check if the channel can be used under permissive conditions > + * mandated by the FCC, i.e., the channel is marked as: Ah -- note - FCC, you are making an FCC specific rule global, that doesn't seems right. The implementation should reflect that *some* regulatory bodies are implicating software requirements for GO operation and in that case this tries to implement such known current interpretations. Hope is that regulatory bodies will stick to this singular interpretation / preference when required. So my point: your code treats this appropriately as agnostic to the regulatory body but your comments do not, just modify the comments more to make it more agnostic. > + * 1. Indoor only: a GO can be operational on such a channel, iff there is > + * clear assessment that the platform device is indoor. > + * 2. Concurrent GO: a GO can be operational on such a channel, iff there is an > + * additional station interface connected to an AP on this channel. > + * > + * TODO: The function is too permissive, as it does not verify the platform > + * device type is indeed indoor, or that the AP is indoor/AC powered. So to do this properly we need an eventual userspace API to throw to kernelspace if we are AC powered? We'll need this to enhance this routine here? > + */ > +static bool cfg80211_can_go_use_chan(struct cfg80211_registered_device *rdev, > + struct ieee80211_channel *chan) > +{ > +#ifdef CPTCFG_CFG80211_REG_SOFT_CONFIGURATIONS > + struct wireless_dev *wdev_iter; > + > + ASSERT_RTNL(); > + > + if (!(chan->flags & (IEEE80211_CHAN_INDOOR_ONLY | > + IEEE80211_CHAN_GO_CONCURRENT))) > + return false; > + > + if (chan->band == IEEE80211_BAND_60GHZ) > + return false; > + > + list_for_each_entry(wdev_iter, &rdev->wdev_list, list) { > + struct ieee80211_channel *other_chan = NULL; > + > + if (wdev_iter->iftype != NL80211_IFTYPE_STATION || > + (!netif_running(wdev_iter->netdev))) > + continue; > + > + > + wdev_lock(wdev_iter); > + if (wdev_iter->current_bss) > + other_chan = wdev_iter->current_bss->pub.channel; > + wdev_unlock(wdev_iter); > + > + if (!other_chan) > + continue; > + > + if (chan == other_chan) > + return true; > + else if ((chan->band == IEEE80211_BAND_5GHZ) && > + (cfg80211_get_unii_band(chan->center_freq) == > + cfg80211_get_unii_band(other_chan->center_freq))) > + return true; > + } > +#endif > + return false; > +} Please wrap code as follows: #ifdef FOO static int foo(void) { return true; } #else static int foo(void) return false; } #endif In the meantime, while you get all your patch sets properly developed I'd recommend to define the code returning false there strictly or perhaps for any flag on the channel requiring DFS / no-ibss, or passive scan. The stricter case, defining false always, seems to be what you are suggesting here. Do you have a white list that can exclude some channels for now globally or somehow as all this lines up? Luis -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Jouni Malinen [mailto:j@w1.fi] > Sent: Monday, July 08, 2013 13:04 > To: Peer, Ilan > Cc: linux-wireless@vger.kernel.org; mcgrof@do-not-panic.com; Spinadel, David > Subject: Re: [PATCH 3/3] [RFC] cfg80211: Enable GO operation on additional > channels > > On Tue, Jul 02, 2013 at 03:28:15PM +0300, Ilan Peer wrote: > > Allow GO operation on a channel marked with > IEEE80211_CHAN_INDOOR_ONLY > > or IEEE80211_CHAN_GO_CONCURRENT iff there is an active station > > interface that is associated to an AP operating on this channel. > > > > Note that this is a permissive approach to the FCC definitions, that > > require a clear assessment that either the platform device is an > > indoor device, or the device operating the AP is an indoor device, > > i.e., AC powered. > > It is assumed that these restrictions are enforced by user space. > > The introduction in 0/3 mentioned DFS, but I did not see it being addressed in > any of the actual changes. Is this only for indoors vs. > outdoors? > The DFS was mentioned in 0/3 in the context of an example for a case where a device can support WFD on bands where an authorized master is operating. The example assumes that the master has radar detection capabilities and is able to evacuate its operating channel if needed (which must be followed by the device also evicting the WFD operation from this channel). The purpose of this patch was to allow the instantiation of a GO on channels marked as indoor/Concurrent GO assuming some conditions are met, ignoring the NO_IBSS and PASSIVE channels. I intend to implement to full restriction logic in the wpa_supplicant (based on the device type etc.), and also handle the actual indication that this channel can no longer be used, eviction and new channel selection in the wpa_supplicant. > > Furthermore, it is assumed, that if the conditions that allowed for > > the operation of the GO on such a channel change, it is the > > responsibility of user space to evacuate the GO from the channel. > > Do you have plans or changes to address this? I'd assume wpa_supplicant could > stop the group on channel list changes, but I don't think it does that currently. Yes. This is currently WIP :) -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
SGkgTHVpcywgDQoNClRoYW5rcyBmb3IgdGhlIHJldmlldyA6KQ0KDQpJbGFuLg0KDQo+ID4gTm90 ZSB0aGF0IHRoaXMgaXMgYSBwZXJtaXNzaXZlIGFwcHJvYWNoIHRvIHRoZSBGQ0MgZGVmaW5pdGlv bnMsIHRoYXQNCj4gPiByZXF1aXJlIGEgY2xlYXIgYXNzZXNzbWVudCB0aGF0IGVpdGhlciB0aGUg cGxhdGZvcm0gZGV2aWNlIGlzIGFuDQo+ID4gaW5kb29yIGRldmljZSwgb3IgdGhlIGRldmljZSBv cGVyYXRpbmcgdGhlIEFQIGlzIGFuIGluZG9vciBkZXZpY2UsDQo+ID4gaS5lLiwgQUMgcG93ZXJl ZC4NCj4gPiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBlbmZvcmNl ZCBieSB1c2VyIHNwYWNlLg0KPiA+IEZ1cnRoZXJtb3JlLCBpdCBpcyBhc3N1bWVkLCB0aGF0IGlm IHRoZSBjb25kaXRpb25zIHRoYXQgYWxsb3dlZCBmb3INCj4gPiB0aGUgb3BlcmF0aW9uIG9mIHRo ZSBHTyBvbiBzdWNoIGEgY2hhbm5lbCBjaGFuZ2UsIGl0IGlzIHRoZQ0KPiA+IHJlc3BvbnNpYmls aXR5IG9mIHVzZXIgc3BhY2UgdG8gZXZhY3VhdGUgdGhlIEdPIGZyb20gdGhlIGNoYW5uZWwuDQo+ IA0KPiBJbiB0aGUgY29udGV4dCBvZiBzdHJpY3QgcmVndWxhdG9yeSBkYXRhIHdlIGN1cnJlbnRs eSBkbyBub3QgZGlmZmVyZW50aWF0ZQ0KPiBzcGVjaWZpY2FsbHkgYmV0d2VlbiBhIGRldmljZSB0 aGF0IGNhbiBpbml0aWF0ZSByYWRpYXRpb24gYmV0d2VlbiBBUCBhbmQgR3JvdXANCj4gT3duZXIg KEdPKSBidXQgaW4geW91ciBlYXJsaWVyIHBhdGNoZXMgeW91IHByb3Bvc2VkIGEgd2F5IHRvIGRv IHRoYXQuIEkNCj4gcmV2aWV3ZWQgZmVlZGJhY2sgb24gdGhhdCBwYXRjaCB0aGVyZS4gSXQgbWF5 IG1ha2Ugc2Vuc2UgaG93ZXZlciB0byBkZWZpbmUNCj4gY2xlYXJseSB3aGF0IHlvdSBtZWFuIGJ5 IHdoeSB0aGUgZmxhZyBpcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IGRvY3VtZW50aW5nIHRoZQ0KPiB1 c2UgY2FzZSwgaWUgd2hhdCB5b3UgZGVzY3JpYmUgaGVyZS4gT3RoZXIgcmVndWxhdG9yeSBib2Rp ZXMgbWF5IGZvbGxvdyBhbmQgaXQNCj4gaGVscHMgdG8gcHJvdmlkZSBjb250ZXh0IGhlcmUuDQoN ClN1cmUsIEknbGwgYWRkIHN1Y2ggYSB1c2UgY2FzZSB0byB0aGUgcHJldmlvdXMgcGF0Y2gNCg0K PiA+IGRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL25ldC93aXJlbGVzcy9LY29u ZmlnIGluZGV4DQo+ID4gZGU3NjA3OC4uZDllMmJlNyAxMDA2NDQNCj4gPiAtLS0gYS9uZXQvd2ly ZWxlc3MvS2NvbmZpZw0KPiA+ICsrKyBiL25ldC93aXJlbGVzcy9LY29uZmlnDQo+ID4gQEAgLTEw Miw2ICsxMDIsMTYgQEAgY29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UUw0KPiA+ICAg ICAgICAgICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGRyaXZlcnMgdGhhdCBjYW4gcmVj ZWl2ZSByZWd1bGF0b3J5DQo+ID4gICAgICAgICAgIGhpbnRzIGZyb20gY2VsbHVsYXIgYmFzZSBz dGF0aW9ucw0KPiA+DQo+ID4gK2NvbmZpZyBDRkc4MDIxMV9SRUdfU09GVF9DT05GSUdVUkFUSU9O Uw0KPiA+ICsgICAgICAgYm9vbCAiY2ZnODAyMTEgc3VwcG9ydCBmb3IgR08gb3BlcmF0aW9uIG9u IGFkZGl0aW9uYWwgY2hhbm5lbHMiDQo+ID4gKyAgICAgICBkZXBlbmRzIG9uIENGRzgwMjExICYm IENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUw0KPiA+ICsgICAgICAgLS0taGVscC0tLQ0KPiA+ ICsgICAgICAgICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBvcGVyYXRpb24gb2YgYSBQMlAgR3Jv dXAgT3duZXIgb24NCj4gPiArICAgICAgICAgYWRkaXRpb25hbCBjaGFubmVscywgaWYgdGhlcmUg aXMgYSBjbGVhciBhc3Nlc3NtZW50IHRoYXQNCj4gPiArICAgICAgICAgdGhlIHBsYXRmb3JtIGRl dmljZSBvcGVyYXRlcyBpbiBhbiBpbmRvb3IgZW52aXJvbm1lbnQgb3INCj4gPiArICAgICAgICAg aW4gY2FzZSB0aGF0IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgQlNTIGludGVyZmFjZSB3aGljaCBp cw0KPiA+ICsgICAgICAgICBjb25uZWN0ZWQgdG8gYW4gQVAgd2hpY2ggaXMgYW4gaW5kb29yIGRl dmljZS4NCj4gPiArDQo+IA0KPiBJIGxpa2UgdGhpcyBhcHByb2FjaCwgaW5kZWVkIHRoaXMgaXMg Z3JlYXQgd29yayBhbmQgcmVmbGVjdHMgdXNhZ2Ugb2YgdGhlIG9udXMNCj4ga2NvbmZpZyBvcHRp b24gYXBwcm9wcmlhdGVseSBpbiB0aGlzIGNhc2UgZHVlIGRpbGxpZ2VuY2UgcmVxdWlyZWQgbW9y ZSBpbiBwYXJ0DQo+IG9uIHVzZXJzcGFjZSAvIG90aGVyIGNvbXBvbmVudHMgZm9yIGZ1bGwgcmVn dWxhdG9yeSBjb21wbGlhbmNlLg0KPiANCg0KVGhlIGNyZWRpdCBoZXJlIHNob3VsZCBnbyB0byBK b2hhbm5lcyA6KQ0KDQo+ID4gKyNpZmRlZiBDUFRDRkdfQ0ZHODAyMTFfUkVHX1NPRlRfQ09ORklH VVJBVElPTlMNCj4gPiArc3RhdGljIGludCBjZmc4MDIxMV9nZXRfdW5paV9iYW5kKGludCBmcmVx KSB7DQo+ID4gKyAgICAgICAvKiBVTklJLTEgKi8NCj4gPiArICAgICAgIGlmIChmcmVxID49IDUx NTAgJiYgZnJlcSA8PSA1MjUwKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiAr DQo+ID4gKyAgICAgICAvKiBVTklJLTIgKi8NCj4gPiArICAgICAgIGlmIChmcmVxID4gNTI1MCAm JiBmcmVxIDw9IDUzNTApDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAxOw0KPiA+ICsNCj4g PiArICAgICAgIC8qIFVOSUktMkUgKi8NCj4gPiArICAgICAgIGlmIChmcmVxID49IDU0NzAgJiYg ZnJlcSA8PSA1NzI1KQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMjsNCj4gPiArDQo+ID4g KyAgICAgICAvKiBVTklJLTMgKi8NCj4gPiArICAgICAgIGlmIChmcmVxID4gNTcyNSAmJiBmcmVx IDw9IDU4MjUpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAzOw0KPiA+ICsNCj4gPiArICAg ICAgIFdBUk5fT04oMSk7DQo+ID4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArfQ0KPiA+ ICsjZW5kaWYNCj4gDQo+ICNlbHNlPw0KDQpXZSBjb25zaWRlcmVkIHRoaXMgYXBwcm9hY2gsIGJ1 dCBwcmVmZXJyZWQgdG8gbW92ZSB0aGUgaWZkZWYgaW5zaWRlIHRoZSBmdW5jdGlvbi4NCg0KPiAN Cj4gQXJlIHlvdSBhd2FyZSBvZiBVTklJLTEsIFVOSUktMiwgVU5JSS0yRSwgVU5JSS0zIGFyZSBz cGVjaWZpYyB3b3JsZCByZWd1bGF0b3J5DQo+IGxhbmd1YWdlIGJhbmRzPyBXaGVuIEkgbGFzdCB0 cmllZCB0byBsb29rIGZvciBhIGNsZWFyIGRlZmluaXRpb24gSSBjb3VsZCBub3QgZmluZA0KPiBh IGNsZWFyIGRlZmluaXRpb24gb2YgdGhlbSBhbmQgaXRzIHdoeSBvbiB0aGUgYXRoIG1vZHVsZSBv biBmb3IgUUNBIG1vZHVsZXMgSQ0KPiBzdGF0ZSAid2UgY2FsbCB0aGVzZSIgaW4gcmVmZXJlbmNl IHRvIHRoZSBVTklJIG5vbWVuY2xhdHVyZS4gSWYgd2UgY2FuIGdldCBhDQo+IGNsZWFyIHJlc291 cmNlIGZvciBpdHMgZGVmaW5pdGlvbiB0aGF0IHdvdWxkIGhlbHAgaGVyZS4NCj4gDQoNCk1heWJl IHRoZXNlIGxpbmsgd2lsbCBoZWxwLg0KaHR0cDovL3d3dy5ncG8uZ292L2Zkc3lzL3BrZy9DRlIt MjAxMC10aXRsZTQ3LXZvbDEveG1sL0NGUi0yMDEwLXRpdGxlNDctdm9sMS1wYXJ0MTUueG1sI3Nl cW51bTE1LjQwMw0KaHR0cDovL2hyYXVuZm9zcy5mY2MuZ292L2Vkb2NzX3B1YmxpYy9hdHRhY2ht YXRjaC9GQ0MtMTMtMjJBMS5wZGYNCg0KQW55d2F5LCBJIHdpbGwgdXNlIHlvdXIgJyd3ZSBjYWxs IHRoZXNlIiBub3RhdGlvbiBhcyB3ZWxsIDopDQoNCj4gPiArDQo+ID4gKy8qIEZvciBHTyBvbmx5 LCBjaGVjayBpZiB0aGUgY2hhbm5lbCBjYW4gYmUgdXNlZCB1bmRlciBwZXJtaXNzaXZlDQo+ID4g K2NvbmRpdGlvbnMNCj4gPiArICogbWFuZGF0ZWQgYnkgdGhlIEZDQywgaS5lLiwgdGhlIGNoYW5u ZWwgaXMgbWFya2VkIGFzOg0KPiANCj4gQWggLS0gbm90ZSAtIEZDQywgeW91IGFyZSBtYWtpbmcg YW4gRkNDIHNwZWNpZmljIHJ1bGUgZ2xvYmFsLCB0aGF0IGRvZXNuJ3Qgc2VlbXMNCj4gcmlnaHQu IFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgcmVmbGVjdCB0aGF0ICpzb21lKiByZWd1bGF0b3J5 IGJvZGllcyBhcmUNCj4gaW1wbGljYXRpbmcgc29mdHdhcmUgcmVxdWlyZW1lbnRzIGZvciBHTyBv cGVyYXRpb24gYW5kIGluIHRoYXQgY2FzZSB0aGlzIHRyaWVzDQo+IHRvIGltcGxlbWVudCBzdWNo IGtub3duIGN1cnJlbnQgaW50ZXJwcmV0YXRpb25zLg0KPiANCj4gSG9wZSBpcyB0aGF0IHJlZ3Vs YXRvcnkgYm9kaWVzIHdpbGwgc3RpY2sgdG8gdGhpcyBzaW5ndWxhciBpbnRlcnByZXRhdGlvbiAv DQo+IHByZWZlcmVuY2Ugd2hlbiByZXF1aXJlZC4NCj4gDQo+IFNvIG15IHBvaW50OiB5b3VyIGNv ZGUgdHJlYXRzIHRoaXMgYXBwcm9wcmlhdGVseSBhcyBhZ25vc3RpYyB0byB0aGUgcmVndWxhdG9y eQ0KPiBib2R5IGJ1dCB5b3VyIGNvbW1lbnRzIGRvIG5vdCwganVzdCBtb2RpZnkgdGhlIGNvbW1l bnRzIG1vcmUgdG8gbWFrZSBpdA0KPiBtb3JlIGFnbm9zdGljLg0KPg0KDQpXaWxsIGZpeC4NCiAN Cj4gPiArICogMS4gSW5kb29yIG9ubHk6IGEgR08gY2FuIGJlIG9wZXJhdGlvbmFsIG9uIHN1Y2gg YSBjaGFubmVsLCBpZmYgdGhlcmUgaXMNCj4gPiArICogICAgY2xlYXIgYXNzZXNzbWVudCB0aGF0 IHRoZSBwbGF0Zm9ybSBkZXZpY2UgaXMgaW5kb29yLg0KPiA+ICsgKiAyLiBDb25jdXJyZW50IEdP OiBhIEdPIGNhbiBiZSBvcGVyYXRpb25hbCBvbiBzdWNoIGEgY2hhbm5lbCwgaWZmIHRoZXJlIGlz DQo+IGFuDQo+ID4gKyAqICAgIGFkZGl0aW9uYWwgc3RhdGlvbiBpbnRlcmZhY2UgY29ubmVjdGVk IHRvIGFuIEFQIG9uIHRoaXMgY2hhbm5lbC4NCj4gPiArICoNCj4gPiArICogVE9ETzogVGhlIGZ1 bmN0aW9uIGlzIHRvbyBwZXJtaXNzaXZlLCBhcyBpdCBkb2VzIG5vdCB2ZXJpZnkgdGhlDQo+ID4g KyBwbGF0Zm9ybQ0KPiA+ICsgKiBkZXZpY2UgdHlwZSBpcyBpbmRlZWQgaW5kb29yLCBvciB0aGF0 IHRoZSBBUCBpcyBpbmRvb3IvQUMgcG93ZXJlZC4NCj4gDQo+IFNvIHRvIGRvIHRoaXMgcHJvcGVy bHkgd2UgbmVlZCBhbiBldmVudHVhbCB1c2Vyc3BhY2UgQVBJIHRvIHRocm93IHRvDQo+IGtlcm5l bHNwYWNlIGlmIHdlIGFyZSBBQyBwb3dlcmVkPyBXZSdsbCBuZWVkIHRoaXMgdG8gZW5oYW5jZSB0 aGlzIHJvdXRpbmUNCj4gaGVyZT8NCj4gDQoNCk5vdCBzdXJlIGFib3V0IHRoaXMgcG9pbnQuIEkg cHJlZmVyIGxlYXZpbmcgdGhlIGV4YWN0IGtub3dsZWRnZSBvZiB0aGUgZGV2aWNlIHR5cGUsIGJl aW5nIEFDIFBvd2VyZWQgb3Igbm90IChhbmQgd2hpY2ggdHlwZSBvZiBBQyBwb3dlcikgZXRjLiBv dXQgc2lkZSBvZiB0aGUga2VybmVsLiBUaGUgYXBwcm9hY2ggSSBjaG9zZSB3aXRoIHRoaXMgcGF0 Y2ggd2FzIHRvIG9ubHkgYWxsb3cgdG8gc3RhcnQgYSBHTyBvbiBzdWNoIGEgY2hhbm5lbCwgbWFr aW5nIHRoZSBiYXNpYyB2ZXJpZmljYXRpb24gZG9uZSBhYm92ZSwgYXNzdW1pbmcgdGhhdCB0aGUg dXNlciBzcGFjZSBjb21wb25lbnQgZ3VhcmFudGVlcyB0aGF0IGFsbCB0aGUgZnVsbCByZXN0cmlj dGlvbnMgYXJlIHNhdGlzZmllZC4NCg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGJvb2wgY2ZnODAy MTFfY2FuX2dvX3VzZV9jaGFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZQ0KPiAq cmRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaGFuKSB7DQo+ID4gKyNpZmRlZiBDUFRDRkdfQ0ZHODAyMTFfUkVH X1NPRlRfQ09ORklHVVJBVElPTlMNCj4gPiArICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndk ZXZfaXRlcjsNCj4gPiArDQo+ID4gKyAgICAgICBBU1NFUlRfUlROTCgpOw0KPiA+ICsNCj4gPiAr ICAgICAgIGlmICghKGNoYW4tPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX0lORE9PUl9PTkxZIHwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4MDIxMV9DSEFOX0dPX0NPTkNV UlJFTlQpKSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiAr ICAgICAgIGlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzYwR0haKQ0KPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAgICAgbGlzdF9mb3JfZWFj aF9lbnRyeSh3ZGV2X2l0ZXIsICZyZGV2LT53ZGV2X2xpc3QsIGxpc3QpIHsNCj4gPiArICAgICAg ICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvdGhlcl9jaGFuID0gTlVMTDsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmICh3ZGV2X2l0ZXItPmlmdHlwZSAhPSBOTDgwMjEx X0lGVFlQRV9TVEFUSU9OIHx8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAoIW5ldGlmX3J1bm5p bmcod2Rldl9pdGVyLT5uZXRkZXYpKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHdkZXZfbG9j ayh3ZGV2X2l0ZXIpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAod2Rldl9pdGVyLT5jdXJyZW50 X2JzcykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9jaGFuID0gd2Rldl9pdGVy LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWw7DQo+ID4gKyAgICAgICAgICAgICAgIHdkZXZfdW5s b2NrKHdkZXZfaXRlcik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIW90aGVyX2No YW4pDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICBpZiAoY2hhbiA9PSBvdGhlcl9jaGFuKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgICAgICAgICAgICBlbHNlIGlmICgoY2hh bi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAoY2ZnODAyMTFfZ2V0X3VuaWlfYmFuZChjaGFuLT5jZW50ZXJfZnJlcSkgPT0NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNmZzgwMjExX2dldF91bmlpX2JhbmQob3RoZXJf Y2hhbi0+Y2VudGVyX2ZyZXEpKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsNCj4gPiArICAgICAgIH0NCj4gPiArI2VuZGlmDQo+ID4gKyAgICAgICByZXR1cm4gZmFs c2U7DQo+ID4gK30NCj4gDQo+IFBsZWFzZSB3cmFwIGNvZGUgYXMgZm9sbG93czoNCj4gDQo+ICNp ZmRlZiBGT08NCj4gc3RhdGljIGludCBmb28odm9pZCkNCj4gew0KPiAgIHJldHVybiB0cnVlOw0K PiB9DQo+ICNlbHNlDQo+IHN0YXRpYyBpbnQgZm9vKHZvaWQpDQo+ICAgcmV0dXJuIGZhbHNlOw0K PiB9DQo+ICNlbmRpZg0KDQpPay4gSSBjYW4gZG8gdGhhdC4NCg0KPiBJbiB0aGUgbWVhbnRpbWUs IHdoaWxlIHlvdSBnZXQgYWxsIHlvdXIgcGF0Y2ggc2V0cyBwcm9wZXJseSBkZXZlbG9wZWQgSSdk DQo+IHJlY29tbWVuZCB0byBkZWZpbmUgdGhlIGNvZGUgcmV0dXJuaW5nIGZhbHNlIHRoZXJlIHN0 cmljdGx5IG9yIHBlcmhhcHMgZm9yIGFueQ0KPiBmbGFnIG9uIHRoZSBjaGFubmVsIHJlcXVpcmlu ZyBERlMgLyBuby1pYnNzLCBvciBwYXNzaXZlIHNjYW4uIFRoZSBzdHJpY3RlciBjYXNlLA0KPiBk ZWZpbmluZyBmYWxzZSBhbHdheXMsIHNlZW1zIHRvIGJlIHdoYXQgeW91IGFyZSBzdWdnZXN0aW5n IGhlcmUuDQoNCkkgZG8gbm90IHRoaW5rIHRoYXQgdGhpcyBpcyBuZWVkZWQgaGVyZS4gUmV0dXJu aW5nIGZhbHNlLCBtZWFucyB0aGF0IHRoZSBjb2RlIHNob3VsZCB0ZXN0IGlmIHRoZSBQQVNTSVZF X1NDQU4gYW5kIE5PX0lCU1MgYXJlIG5vdCBzZXQgb24gdGhlIGNoYW5uZWwgd2Ugd2FudCB0byBz dGFydCBiZWFjb25pbmcgb24uDQoNCj4gRG8geW91IGhhdmUgYSB3aGl0ZSBsaXN0IHRoYXQgY2Fu IGV4Y2x1ZGUgc29tZSBjaGFubmVscyBmb3Igbm93IGdsb2JhbGx5IG9yDQo+IHNvbWVob3cgYXMg YWxsIHRoaXMgbGluZXMgdXA/DQo+IA0KDQpOb3RlIHN1cmUgSSB1bmRlcnN0b29kIHdoYXQgeW91 IGFyZSBsb29raW5nIGZvci4gQ2FuIHlvdSBwbGVhc2UgY2xhcmlmeSB0aGlzIHBvaW50Pw0K -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, Jul 10, 2013 at 3:47 AM, Peer, Ilan <ilan.peer@intel.com> wrote: >> Are you aware of UNII-1, UNII-2, UNII-2E, UNII-3 are specific world regulatory >> language bands? When I last tried to look for a clear definition I could not find >> a clear definition of them and its why on the ath module on for QCA modules I >> state "we call these" in reference to the UNII nomenclature. If we can get a >> clear resource for its definition that would help here. >> > > Maybe these link will help. > http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/xml/CFR-2010-title47-vol1-part15.xml#seqnum15.403 > http://hraunfoss.fcc.gov/edocs_public/attachmatch/FCC-13-22A1.pdf > > Anyway, I will use your ''we call these" notation as well :) No no, this is good, its just United States / FCC biased and I hadn't seen the documentation you provided before. This confirms these are official terms but still just US / FCC biased. My point was that we should be careful to not make global statements on regulatory code about things that are not global. If we know only the FCC calls this UNII well lets document that and provide the reference you supplied. I anticipated having to deal with special case regulatory code outside of of what CRDA / wireless-regdb provides -- given that CRDA / wireless-regdb were meant to be more RF agnostic anyway. Given that other vendors may also want to get the UNII band can you stuff instead cfg80211_get_unii_band() into reg.c and do the #ifdef properly with the Kconfig, and export it as well, as well as document it properly providing the reference you mentioned. >> > + * 1. Indoor only: a GO can be operational on such a channel, iff there is >> > + * clear assessment that the platform device is indoor. >> > + * 2. Concurrent GO: a GO can be operational on such a channel, iff there is >> an >> > + * additional station interface connected to an AP on this channel. >> > + * >> > + * TODO: The function is too permissive, as it does not verify the >> > + platform >> > + * device type is indeed indoor, or that the AP is indoor/AC powered. >> >> So to do this properly we need an eventual userspace API to throw to >> kernelspace if we are AC powered? We'll need this to enhance this routine >> here? >> > > Not sure about this point. I prefer leaving the exact knowledge of the device type, being AC Powered or not (and which type of AC power) etc. out side of the kernel. The approach I chose with this patch was to only allow to start a GO on such a channel, making the basic verification done above, assuming that the user space component guarantees that all the full restrictions are satisfied. Fair enough. Seems we just need to zero in now on the requirement or not on the extra flag you suggested. >> In the meantime, while you get all your patch sets properly developed I'd >> recommend to define the code returning false there strictly or perhaps for any >> flag on the channel requiring DFS / no-ibss, or passive scan. The stricter case, >> defining false always, seems to be what you are suggesting here. > > I do not think that this is needed here. Returning false, means that the code should test if the PASSIVE_SCAN and NO_IBSS are not set on the channel we want to start beaconing on. > >> Do you have a white list that can exclude some channels for now globally or >> somehow as all this lines up? >> > > Note sure I understood what you are looking for. Can you please clarify this point? It was unclear for what exact channels you needed to deal with here. Given review so far wouldn't it just be DFS flagged channels on some UNII bands ? Then again if the indoor flag needs to be pegged to to a specific UNII band and we can do that on wireless-regdb do we even need the UNII band check routine helper? Luis -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> On Wed, Jul 10, 2013 at 3:47 AM, Peer, Ilan <ilan.peer@intel.com> wrote: > >> Are you aware of UNII-1, UNII-2, UNII-2E, UNII-3 are specific world > >> regulatory language bands? When I last tried to look for a clear > >> definition I could not find a clear definition of them and its why on > >> the ath module on for QCA modules I state "we call these" in > >> reference to the UNII nomenclature. If we can get a clear resource for its > definition that would help here. > >> > > > > Maybe these link will help. > > http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/xml/CFR-2010-title4 > > 7-vol1-part15.xml#seqnum15.403 > > http://hraunfoss.fcc.gov/edocs_public/attachmatch/FCC-13-22A1.pdf > > > > Anyway, I will use your ''we call these" notation as well :) > > No no, this is good, its just United States / FCC biased and I hadn't seen the > documentation you provided before. This confirms these are official terms but > still just US / FCC biased. My point was that we should be careful to not make > global statements on regulatory code about things that are not global. If we > know only the FCC calls this UNII well lets document that and provide the > reference you supplied. I anticipated having to deal with special case > regulatory code outside of of what CRDA / wireless-regdb provides -- given that > CRDA / wireless-regdb were meant to be more RF agnostic anyway. > > Given that other vendors may also want to get the UNII band can you stuff > instead cfg80211_get_unii_band() into reg.c and do the #ifdef properly with the > Kconfig, and export it as well, as well as document it properly providing the > reference you mentioned. Sure. > > >> > + * 1. Indoor only: a GO can be operational on such a channel, iff there is > >> > + * clear assessment that the platform device is indoor. > >> > + * 2. Concurrent GO: a GO can be operational on such a channel, > >> > + iff there is > >> an > >> > + * additional station interface connected to an AP on this channel. > >> > + * > >> > + * TODO: The function is too permissive, as it does not verify the > >> > + platform > >> > + * device type is indeed indoor, or that the AP is indoor/AC powered. > >> > >> So to do this properly we need an eventual userspace API to throw to > >> kernelspace if we are AC powered? We'll need this to enhance this > >> routine here? > >> > > > > Not sure about this point. I prefer leaving the exact knowledge of the device > type, being AC Powered or not (and which type of AC power) etc. out side of the > kernel. The approach I chose with this patch was to only allow to start a GO on > such a channel, making the basic verification done above, assuming that the > user space component guarantees that all the full restrictions are satisfied. > > Fair enough. Seems we just need to zero in now on the requirement or not on > the extra flag you suggested. > > >> In the meantime, while you get all your patch sets properly developed > >> I'd recommend to define the code returning false there strictly or > >> perhaps for any flag on the channel requiring DFS / no-ibss, or > >> passive scan. The stricter case, defining false always, seems to be what you > are suggesting here. > > > > I do not think that this is needed here. Returning false, means that the code > should test if the PASSIVE_SCAN and NO_IBSS are not set on the channel we > want to start beaconing on. > > > >> Do you have a white list that can exclude some channels for now > >> globally or somehow as all this lines up? > >> > > I'll try to provide such list ... > > Note sure I understood what you are looking for. Can you please clarify this > point? > > It was unclear for what exact channels you needed to deal with here. > Given review so far wouldn't it just be DFS flagged channels on some UNII > bands ? Then again if the indoor flag needs to be pegged to to a specific UNII > band and we can do that on wireless-regdb do we even need the UNII band > check routine helper? > Generally it is possible that the indoor property is not pegged to the 'other_channel', or it is possible that it is pegged but they are not in the same UNII band, so the verification is still needed. I guess that once I get the list you requested things will be clearer :) Regards, Ilan.
On Wed, Jul 17, 2013 at 12:15 PM, Peer, Ilan <ilan.peer@intel.com> wrote: >> It was unclear for what exact channels you needed to deal with here. >> Given review so far wouldn't it just be DFS flagged channels on some UNII >> bands ? Then again if the indoor flag needs to be pegged to to a specific UNII >> band and we can do that on wireless-regdb do we even need the UNII band >> check routine helper? >> > > Generally it is possible that the indoor property is not pegged to the 'other_channel', or it is possible that it is pegged but they are not in the same UNII band, so the verification is still needed. I guess that once I get the list you requested things will be clearer :) OK so there are exceptions to the indoor flag affecting GO under these rules or not. Looking forward to the respin. Luis -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jul 18, 2013 at 4:34 PM, Luis R. Rodriguez <mcgrof@do-not-panic.com> wrote: > On Wed, Jul 17, 2013 at 12:15 PM, Peer, Ilan <ilan.peer@intel.com> wrote: >>> It was unclear for what exact channels you needed to deal with here. >>> Given review so far wouldn't it just be DFS flagged channels on some UNII >>> bands ? Then again if the indoor flag needs to be pegged to to a specific UNII >>> band and we can do that on wireless-regdb do we even need the UNII band >>> check routine helper? >>> >> >> Generally it is possible that the indoor property is not pegged to the 'other_channel', or it is possible that it is pegged but they are not in the same UNII band, so the verification is still needed. I guess that once I get the list you requested things will be clearer :) > > OK so there are exceptions to the indoor flag affecting GO under these > rules or not. Looking forward to the respin. Anxiously looking forward to the respin :D Luis -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBtY2dyb2ZAZ21haWwuY29tIFtt YWlsdG86bWNncm9mQGdtYWlsLmNvbV0gT24gQmVoYWxmIE9mIEx1aXMgUi4NCj4gUm9kcmlndWV6 DQo+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAwNCwgMjAxMyAyMDozOA0KPiBUbzogUGVlciwgSWxh bjsgSmVmZiBKb2huc29uDQo+IENjOiBTcGluYWRlbCwgRGF2aWQ7IGxpbnV4LXdpcmVsZXNzOyB3 aXJlbGVzcy1yZWdkYkBsaXN0cy5pbmZyYWRlYWQub3JnOyBKb3VuaQ0KPiBNYWxpbmVuOyBHaW5z YnVyZywgTm9hbTsgUGVyZWxtb290ZXIsIExpcmF6OyBTaGFsZXYsIE96OyBNaWNoYWVsIEdyZWVu DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMy8zXSBbUkZDXSBjZmc4MDIxMTogRW5hYmxlIEdPIG9w ZXJhdGlvbiBvbiBhZGRpdGlvbmFsDQo+IGNoYW5uZWxzDQo+IA0KPiBPbiBUaHUsIEp1bCAxOCwg MjAxMyBhdCA0OjM0IFBNLCBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQGRvLW5vdC0NCj4gcGFu aWMuY29tPiB3cm90ZToNCj4gPiBPbiBXZWQsIEp1bCAxNywgMjAxMyBhdCAxMjoxNSBQTSwgUGVl ciwgSWxhbiA8aWxhbi5wZWVyQGludGVsLmNvbT4gd3JvdGU6DQo+ID4+PiBJdCB3YXMgdW5jbGVh ciBmb3Igd2hhdCBleGFjdCBjaGFubmVscyB5b3UgbmVlZGVkIHRvIGRlYWwgd2l0aCBoZXJlLg0K PiA+Pj4gR2l2ZW4gcmV2aWV3IHNvIGZhciB3b3VsZG4ndCBpdCBqdXN0IGJlIERGUyBmbGFnZ2Vk IGNoYW5uZWxzIG9uIHNvbWUNCj4gPj4+IFVOSUkgYmFuZHMgPyBUaGVuIGFnYWluIGlmIHRoZSBp bmRvb3IgZmxhZyBuZWVkcyB0byBiZSBwZWdnZWQgdG8gdG8NCj4gPj4+IGEgc3BlY2lmaWMgVU5J SSBiYW5kIGFuZCB3ZSBjYW4gZG8gdGhhdCBvbiB3aXJlbGVzcy1yZWdkYiBkbyB3ZSBldmVuDQo+ ID4+PiBuZWVkIHRoZSBVTklJIGJhbmQgY2hlY2sgcm91dGluZSBoZWxwZXI/DQo+ID4+Pg0KPiA+ Pg0KPiA+PiBHZW5lcmFsbHkgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaW5kb29yIHByb3BlcnR5 IGlzIG5vdCBwZWdnZWQgdG8NCj4gPj4gdGhlICdvdGhlcl9jaGFubmVsJywgb3IgaXQgaXMgcG9z c2libGUgdGhhdCBpdCBpcyBwZWdnZWQgYnV0IHRoZXkgYXJlDQo+ID4+IG5vdCBpbiB0aGUgc2Ft ZSBVTklJIGJhbmQsIHNvIHRoZSB2ZXJpZmljYXRpb24gaXMgc3RpbGwgbmVlZGVkLiBJDQo+ID4+ IGd1ZXNzIHRoYXQgb25jZSBJIGdldCB0aGUgbGlzdCB5b3UgcmVxdWVzdGVkIHRoaW5ncyB3aWxs IGJlIGNsZWFyZXINCj4gPj4gOikNCj4gPg0KPiA+IE9LIHNvIHRoZXJlIGFyZSBleGNlcHRpb25z IHRvIHRoZSBpbmRvb3IgZmxhZyBhZmZlY3RpbmcgR08gdW5kZXIgdGhlc2UNCj4gPiBydWxlcyBv ciBub3QuIExvb2tpbmcgZm9yd2FyZCB0byB0aGUgcmVzcGluLg0KPiANCj4gQW54aW91c2x5IGxv b2tpbmcgZm9yd2FyZCB0byB0aGUgcmVzcGluIDpEDQo+IA0KDQpNZSB0b28gOykgLi4uIHVuZm9y dHVuYXRlbHkgSSBkaWQgbm90IGdldCBhIGNoYW5jZSB0byB3b3JrIG9uIHRoaXMgaW4gdGhlIGxh c3QgY291cGxlIG9mIG1vbnRocy4gSG9wZSBJJ2xsIGdldCB0byBpdCB0aGlzIHdlZWsgb3IgdGhl IG5leHQuIFNvcnJ5IGZvciBub3QgdXBkYXRpbmcgZWFybGllciAuLi4NCg0KUmVnYXJkcywNCg0K SWxhbi4NCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index f0badeb..17d693d 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -4070,12 +4070,14 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy, * cfg80211_reg_can_beacon - check if beaconing is allowed * @wiphy: the wiphy * @chandef: the channel definition + * @p2p_go: if the interface type is a P2P GO * * Return: %true if there is no secondary channel or the secondary channel(s) * can be used for beaconing (i.e. is not a radar channel etc.) */ bool cfg80211_reg_can_beacon(struct wiphy *wiphy, - struct cfg80211_chan_def *chandef); + struct cfg80211_chan_def *chandef, + bool p2p_go); /* * cfg80211_ch_switch_notify - update wdev channel and notify userspace diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index ea7b9c2..1e0fac1 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c @@ -82,7 +82,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0; chandef = ifibss->chandef; - if (!cfg80211_reg_can_beacon(local->hw.wiphy, &chandef)) { + if (!cfg80211_reg_can_beacon(local->hw.wiphy, &chandef, false)) { chandef.width = NL80211_CHAN_WIDTH_20; chandef.center_freq1 = chan->center_freq; } diff --git a/net/wireless/Kconfig b/net/wireless/Kconfig index de76078..d9e2be7 100644 --- a/net/wireless/Kconfig +++ b/net/wireless/Kconfig @@ -102,6 +102,16 @@ config CFG80211_REG_CELLULAR_HINTS This option adds support for drivers that can receive regulatory hints from cellular base stations +config CFG80211_REG_SOFT_CONFIGURATIONS + bool "cfg80211 support for GO operation on additional channels" + depends on CFG80211 && CFG80211_CERTIFICATION_ONUS + ---help--- + This option enables the operation of a P2P Group Owner on + additional channels, if there is a clear assessment that + the platform device operates in an indoor environment or + in case that there is an additional BSS interface which is + connected to an AP which is an indoor device. + config CFG80211_DEFAULT_PS bool "enable powersave by default" depends on CFG80211 diff --git a/net/wireless/chan.c b/net/wireless/chan.c index 50f6195..92d9e3c 100644 --- a/net/wireless/chan.c +++ b/net/wireless/chan.c @@ -457,18 +457,102 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy, } EXPORT_SYMBOL(cfg80211_chandef_usable); +#ifdef CPTCFG_CFG80211_REG_SOFT_CONFIGURATIONS +static int cfg80211_get_unii_band(int freq) +{ + /* UNII-1 */ + if (freq >= 5150 && freq <= 5250) + return 0; + + /* UNII-2 */ + if (freq > 5250 && freq <= 5350) + return 1; + + /* UNII-2E */ + if (freq >= 5470 && freq <= 5725) + return 2; + + /* UNII-3 */ + if (freq > 5725 && freq <= 5825) + return 3; + + WARN_ON(1); + return -EINVAL; +} +#endif + +/* For GO only, check if the channel can be used under permissive conditions + * mandated by the FCC, i.e., the channel is marked as: + * 1. Indoor only: a GO can be operational on such a channel, iff there is + * clear assessment that the platform device is indoor. + * 2. Concurrent GO: a GO can be operational on such a channel, iff there is an + * additional station interface connected to an AP on this channel. + * + * TODO: The function is too permissive, as it does not verify the platform + * device type is indeed indoor, or that the AP is indoor/AC powered. + */ +static bool cfg80211_can_go_use_chan(struct cfg80211_registered_device *rdev, + struct ieee80211_channel *chan) +{ +#ifdef CPTCFG_CFG80211_REG_SOFT_CONFIGURATIONS + struct wireless_dev *wdev_iter; + + ASSERT_RTNL(); + + if (!(chan->flags & (IEEE80211_CHAN_INDOOR_ONLY | + IEEE80211_CHAN_GO_CONCURRENT))) + return false; + + if (chan->band == IEEE80211_BAND_60GHZ) + return false; + + list_for_each_entry(wdev_iter, &rdev->wdev_list, list) { + struct ieee80211_channel *other_chan = NULL; + + if (wdev_iter->iftype != NL80211_IFTYPE_STATION || + (!netif_running(wdev_iter->netdev))) + continue; + + + wdev_lock(wdev_iter); + if (wdev_iter->current_bss) + other_chan = wdev_iter->current_bss->pub.channel; + wdev_unlock(wdev_iter); + + if (!other_chan) + continue; + + if (chan == other_chan) + return true; + else if ((chan->band == IEEE80211_BAND_5GHZ) && + (cfg80211_get_unii_band(chan->center_freq) == + cfg80211_get_unii_band(other_chan->center_freq))) + return true; + } +#endif + return false; +} + bool cfg80211_reg_can_beacon(struct wiphy *wiphy, - struct cfg80211_chan_def *chandef) + struct cfg80211_chan_def *chandef, + bool p2p_go) { + struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); bool res; + u32 flags; - trace_cfg80211_reg_can_beacon(wiphy, chandef); + trace_cfg80211_reg_can_beacon(wiphy, chandef, p2p_go); + + flags = IEEE80211_CHAN_DISABLED | IEEE80211_CHAN_RADAR; + + /* Under certain conditions a GO can operate on channels marked + * with IEEE80211_CHAN_PASSIVE_SCAN and IEEE80211_CHAN_NO_IBSS, so set + * these flags only if the conditions are not met. + */ + if (!p2p_go || !cfg80211_can_go_use_chan(rdev, chandef->chan)) + flags |= IEEE80211_CHAN_PASSIVE_SCAN | IEEE80211_CHAN_NO_IBSS; - res = cfg80211_chandef_usable(wiphy, chandef, - IEEE80211_CHAN_DISABLED | - IEEE80211_CHAN_PASSIVE_SCAN | - IEEE80211_CHAN_NO_IBSS | - IEEE80211_CHAN_RADAR); + res = cfg80211_chandef_usable(wiphy, chandef, flags); trace_cfg80211_return_bool(res); return res; diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c index 30c4920..746c8b4 100644 --- a/net/wireless/mesh.c +++ b/net/wireless/mesh.c @@ -172,7 +172,7 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, setup->basic_rates = ieee80211_mandatory_rates(sband); } - if (!cfg80211_reg_can_beacon(&rdev->wiphy, &setup->chandef)) + if (!cfg80211_reg_can_beacon(&rdev->wiphy, &setup->chandef, false)) return -EINVAL; err = cfg80211_can_use_chan(rdev, wdev, setup->chandef.chan, diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index cf22b22..204c160 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1801,7 +1801,8 @@ static int __nl80211_set_channel(struct cfg80211_registered_device *rdev, result = -EBUSY; break; } - if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef)) { + if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef, + iftype == NL80211_IFTYPE_P2P_GO)) { result = -EINVAL; break; } @@ -3150,7 +3151,8 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) } else if (!nl80211_get_ap_channel(rdev, ¶ms)) return -EINVAL; - if (!cfg80211_reg_can_beacon(&rdev->wiphy, ¶ms.chandef)) + if (!cfg80211_reg_can_beacon(&rdev->wiphy, ¶ms.chandef, + wdev->iftype == NL80211_IFTYPE_P2P_GO)) return -EINVAL; err = cfg80211_chandef_dfs_required(wdev->wiphy, ¶ms.chandef); @@ -6319,7 +6321,7 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info) if (err) return err; - if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef)) + if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef, false)) return -EINVAL; switch (ibss.chandef.width) { diff --git a/net/wireless/trace.h b/net/wireless/trace.h index e1534baf..7be32c3 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h @@ -2115,18 +2115,21 @@ TRACE_EVENT(cfg80211_cqm_rssi_notify, ); TRACE_EVENT(cfg80211_reg_can_beacon, - TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef), - TP_ARGS(wiphy, chandef), + TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef, + bool p2p_go), + TP_ARGS(wiphy, chandef, p2p_go), TP_STRUCT__entry( WIPHY_ENTRY CHAN_DEF_ENTRY + __field(bool, p2p_go) ), TP_fast_assign( WIPHY_ASSIGN; CHAN_DEF_ASSIGN(chandef); + __entry->p2p_go = p2p_go; ), - TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT, - WIPHY_PR_ARG, CHAN_DEF_PR_ARG) + TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT ", p2p_go=%d", + WIPHY_PR_ARG, CHAN_DEF_PR_ARG, __entry->p2p_go) ); TRACE_EVENT(cfg80211_chandef_dfs_required,