Message ID | 1392896671-4288-6-git-send-email-ilan.peer@intel.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Thu, Feb 20, 2014 at 3:44 AM, Ilan Peer <ilan.peer@intel.com> wrote: > Allow GO operation on a channel marked with IEEE80211_CHAN_INDOOR_ONLY > iff there is a user hint indicating that the platform is operating in > an indoor environment, i.e., the platform is a printer or media center > device. > > Signed-off-by: Ilan Peer <ilan.peer@intel.com> > --- > net/wireless/chan.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/net/wireless/chan.c b/net/wireless/chan.c > index 1d8c990..b18367d 100644 > --- a/net/wireless/chan.c > +++ b/net/wireless/chan.c > @@ -611,6 +611,8 @@ EXPORT_SYMBOL(cfg80211_chandef_usable); > * IEEE80211_CHAN_GO_CONCURRENT and there is an additional station interface > * associated to an AP on the same channel or on the same UNII band > * (assuming that the AP is an authorized master). > + * In addition allow the GO to operate on a channel on which indoor operation is > + * allowed, iff we are currently operating in an indoor environment. > */ > static bool cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, > struct ieee80211_channel *chan) > @@ -621,8 +623,14 @@ static bool cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, > ASSERT_RTNL(); > > if (!config_enabled(CONFIG_CFG80211_REG_RELAX_NO_IR) || > - !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR) || > - !(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) > + !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) > + return false; > + > + if (regulatory_indoor_allowed() && > + (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) > + return true; > + > + if (!(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) > return false; Shouldn't this check go before the indoor one? 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
> > static bool cfg80211_go_permissive_chan(struct > cfg80211_registered_device *rdev, > > struct ieee80211_channel > > *chan) @@ -621,8 +623,14 @@ static bool > cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, > > ASSERT_RTNL(); > > > > if (!config_enabled(CONFIG_CFG80211_REG_RELAX_NO_IR) || > > - !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR) > || > > - !(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) > > + !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) > > + return false; > > + > > + if (regulatory_indoor_allowed() && > > + (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) > > + return true; > > + > > + if (!(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) > > return false; > > Shouldn't this check go before the indoor one? > I do not think so, as this relaxations is orthogonal to the GO concurrent one. It means that If a channel is enabled but only under indoor and indoor operation is hinted the relaxation removes the NO_IR restriction if such exists (without the relaxation indoor operation would be allowed but not for GO). Regards, Ilan.
On Sat, Feb 22, 2014 at 11:54 AM, Peer, Ilan <ilan.peer@intel.com> wrote: >> > static bool cfg80211_go_permissive_chan(struct >> cfg80211_registered_device *rdev, >> > struct ieee80211_channel >> > *chan) @@ -621,8 +623,14 @@ static bool >> cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, >> > ASSERT_RTNL(); >> > >> > if (!config_enabled(CONFIG_CFG80211_REG_RELAX_NO_IR) || >> > - !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR) >> || >> > - !(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) >> > + !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) >> > + return false; >> > + >> > + if (regulatory_indoor_allowed() && >> > + (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) >> > + return true; >> > + >> > + if (!(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) >> > return false; >> >> Shouldn't this check go before the indoor one? >> > > I do not think so, as this relaxations is orthogonal to the GO concurrent one. It means that If a channel is enabled but only under indoor and indoor operation is hinted the relaxation removes the NO_IR restriction if such exists (without the relaxation indoor operation would be allowed but not for GO). Ah yes, the first check remains as this then though: if (!config_enabled(CONFIG_CFG80211_REG_RELAX_NO_IR) || !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) return false; That seems wrong for the general case. 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
PiBPbiBTYXQsIEZlYiAyMiwgMjAxNCBhdCAxMTo1NCBBTSwgUGVlciwgSWxhbiA8aWxhbi5wZWVy QGludGVsLmNvbT4gd3JvdGU6DQo+ID4+ID4gIHN0YXRpYyBib29sIGNmZzgwMjExX2dvX3Blcm1p c3NpdmVfY2hhbihzdHJ1Y3QNCj4gPj4gY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYs DQo+ID4+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBp ZWVlODAyMTFfY2hhbm5lbA0KPiA+PiA+ICpjaGFuKSBAQCAtNjIxLDggKzYyMywxNCBAQCBzdGF0 aWMgYm9vbA0KPiA+PiBjZmc4MDIxMV9nb19wZXJtaXNzaXZlX2NoYW4oc3RydWN0IGNmZzgwMjEx X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LA0KPiA+PiA+ICAgICAgICAgQVNTRVJUX1JUTkwoKTsN Cj4gPj4gPg0KPiA+PiA+ICAgICAgICAgaWYgKCFjb25maWdfZW5hYmxlZChDT05GSUdfQ0ZHODAy MTFfUkVHX1JFTEFYX05PX0lSKSB8fA0KPiA+PiA+IC0gICAgICAgICAgICEod2lwaHktPnJlZ3Vs YXRvcnlfZmxhZ3MgJg0KPiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikNCj4gPj4gfHwN Cj4gPj4gPiAtICAgICAgICAgICAhKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fR09fQ09O Q1VSUkVOVCkpDQo+ID4+ID4gKyAgICAgICAgICAgISh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAm DQo+IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSkNCj4gPj4gPiArICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KPiA+PiA+ICsNCj4gPj4gPiArICAgICAgIGlmIChyZWd1bGF0b3J5 X2luZG9vcl9hbGxvd2VkKCkgJiYNCj4gPj4gPiArICAgICAgICAgICAoY2hhbi0+ZmxhZ3MgJiBJ RUVFODAyMTFfQ0hBTl9JTkRPT1JfT05MWSkpDQo+ID4+ID4gKyAgICAgICAgICAgICAgIHJldHVy biB0cnVlOw0KPiA+PiA+ICsNCj4gPj4gPiArICAgICAgIGlmICghKGNoYW4tPmZsYWdzICYgSUVF RTgwMjExX0NIQU5fR09fQ09OQ1VSUkVOVCkpDQo+ID4+ID4gICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsNCj4gPj4NCj4gPj4gU2hvdWxkbid0IHRoaXMgY2hlY2sgZ28gYmVmb3JlIHRoZSBp bmRvb3Igb25lPw0KPiA+Pg0KPiA+DQo+ID4gSSBkbyBub3QgdGhpbmsgc28sIGFzIHRoaXMgcmVs YXhhdGlvbnMgaXMgb3J0aG9nb25hbCB0byB0aGUgR08gY29uY3VycmVudCBvbmUuDQo+IEl0IG1l YW5zIHRoYXQgSWYgYSBjaGFubmVsIGlzIGVuYWJsZWQgYnV0IG9ubHkgdW5kZXIgaW5kb29yIGFu ZCBpbmRvb3INCj4gb3BlcmF0aW9uIGlzIGhpbnRlZCB0aGUgcmVsYXhhdGlvbiByZW1vdmVzIHRo ZSBOT19JUiByZXN0cmljdGlvbiBpZiBzdWNoDQo+IGV4aXN0cyAod2l0aG91dCB0aGUgcmVsYXhh dGlvbiBpbmRvb3Igb3BlcmF0aW9uIHdvdWxkIGJlICBhbGxvd2VkIGJ1dCBub3QNCj4gZm9yIEdP KS4NCj4gDQo+IEFoIHllcywgdGhlIGZpcnN0IGNoZWNrIHJlbWFpbnMgYXMgdGhpcyB0aGVuIHRo b3VnaDoNCj4gDQo+IGlmICghY29uZmlnX2VuYWJsZWQoQ09ORklHX0NGRzgwMjExX1JFR19SRUxB WF9OT19JUikgfHwNCj4gICAgISh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllf RU5BQkxFX1JFTEFYX05PX0lSKSkNCj4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gDQo+ IFRoYXQgc2VlbXMgd3JvbmcgZm9yIHRoZSBnZW5lcmFsIGNhc2UuDQo+IA0KDQpTb3JyeSBidXQg SSBkbyBub3QgZm9sbG93IC4uLiB3aGF0J3MgdGhlIGJ1Zz8NCg0KVGhhbmtzLA0KDQpJbGFuLg0K -- 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/net/wireless/chan.c b/net/wireless/chan.c index 1d8c990..b18367d 100644 --- a/net/wireless/chan.c +++ b/net/wireless/chan.c @@ -611,6 +611,8 @@ EXPORT_SYMBOL(cfg80211_chandef_usable); * IEEE80211_CHAN_GO_CONCURRENT and there is an additional station interface * associated to an AP on the same channel or on the same UNII band * (assuming that the AP is an authorized master). + * In addition allow the GO to operate on a channel on which indoor operation is + * allowed, iff we are currently operating in an indoor environment. */ static bool cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, struct ieee80211_channel *chan) @@ -621,8 +623,14 @@ static bool cfg80211_go_permissive_chan(struct cfg80211_registered_device *rdev, ASSERT_RTNL(); if (!config_enabled(CONFIG_CFG80211_REG_RELAX_NO_IR) || - !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR) || - !(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) + !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) + return false; + + if (regulatory_indoor_allowed() && + (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) + return true; + + if (!(chan->flags & IEEE80211_CHAN_GO_CONCURRENT)) return false; list_for_each_entry(wdev_iter, &rdev->wdev_list, list) {
Allow GO operation on a channel marked with IEEE80211_CHAN_INDOOR_ONLY iff there is a user hint indicating that the platform is operating in an indoor environment, i.e., the platform is a printer or media center device. Signed-off-by: Ilan Peer <ilan.peer@intel.com> --- net/wireless/chan.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)