2012-03-20 14:55:23

by Michal Kazior

[permalink] [raw]
Subject: [RFC 12/12] mac80211: return NULL from get_channel in multi-channel

According to comment on cfg80211_ops/get_channel we should return NULL
in case of concurrent multi-channel.

Signed-off-by: Michal Kazior <[email protected]>
---
net/mac80211/cfg.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 88cc128..05f7022 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2680,6 +2680,9 @@ ieee80211_wiphy_get_channel(struct wiphy *wiphy)
struct ieee80211_local *local = wiphy_priv(wiphy);
struct ieee80211_channel_state *chan_state = &local->chan_state;

+ if (local->hw.flags & IEEE80211_HW_SUPPORTS_MULTI_CHANNEL)
+ return NULL;
+
return chan_state->oper_channel;
}

--
1.7.0.4



2012-03-23 09:26:49

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC 12/12] mac80211: return NULL from get_channel in multi-channel

On Fri, 2012-03-23 at 10:19 +0100, MichaƂ Kazior wrote:
> Johannes Berg wrote:
> > On Mon, 2012-03-19 at 13:57 +0100, Michal Kazior wrote:
> >> According to comment on cfg80211_ops/get_channel we should return NULL
> >> in case of concurrent multi-channel.
> >>
> >> Signed-off-by: Michal Kazior<[email protected]>
> >> ---
> >> net/mac80211/cfg.c | 3 +++
> >> 1 files changed, 3 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
> >> index 88cc128..05f7022 100644
> >> --- a/net/mac80211/cfg.c
> >> +++ b/net/mac80211/cfg.c
> >> @@ -2680,6 +2680,9 @@ ieee80211_wiphy_get_channel(struct wiphy *wiphy)
> >> struct ieee80211_local *local = wiphy_priv(wiphy);
> >> struct ieee80211_channel_state *chan_state =&local->chan_state;
> >>
> >> + if (local->hw.flags& IEEE80211_HW_SUPPORTS_MULTI_CHANNEL)
> >> + return NULL;
> >> +
> >
> > We should return NULL if we're actually using multiple channels :-)
> >
> > So clearly we need mac80211 do more work in tracking which channels are
> > used, compatible, etc.
>
> Oh. So will it be enough to iterate through the interfaces that are up
> and check if they have different operational channels?

Technically, yes. But again, I think we need to take a more involved
channel management approach in mac80211, managing compatible channels
etc.

You've also completely ignored the need to tell userspace about what
exactly the hardware supports, which was part of the original design of
the multi-vif feature listing.

But when you think about that, you'll soon notice that this minimal
approach won't work, what for example if a third interface gets added?
With this approach you won't even know if it's on a third channel or
not. Keep in mind that the driver only has limited ways of rejecting
such configuration.


(And as an aside that just crossed my mind: there's also the CSA
handling, but I'm happy to mostly ignore that for now too -- we'll have
to come up with a solution later.)

johannes


2012-03-23 08:54:22

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC 12/12] mac80211: return NULL from get_channel in multi-channel

On Mon, 2012-03-19 at 13:57 +0100, Michal Kazior wrote:
> According to comment on cfg80211_ops/get_channel we should return NULL
> in case of concurrent multi-channel.
>
> Signed-off-by: Michal Kazior <[email protected]>
> ---
> net/mac80211/cfg.c | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
> index 88cc128..05f7022 100644
> --- a/net/mac80211/cfg.c
> +++ b/net/mac80211/cfg.c
> @@ -2680,6 +2680,9 @@ ieee80211_wiphy_get_channel(struct wiphy *wiphy)
> struct ieee80211_local *local = wiphy_priv(wiphy);
> struct ieee80211_channel_state *chan_state = &local->chan_state;
>
> + if (local->hw.flags & IEEE80211_HW_SUPPORTS_MULTI_CHANNEL)
> + return NULL;
> +

We should return NULL if we're actually using multiple channels :-)

So clearly we need mac80211 do more work in tracking which channels are
used, compatible, etc.

johannes


2012-03-23 09:19:51

by Michal Kazior

[permalink] [raw]
Subject: Re: [RFC 12/12] mac80211: return NULL from get_channel in multi-channel

Johannes Berg wrote:
> On Mon, 2012-03-19 at 13:57 +0100, Michal Kazior wrote:
>> According to comment on cfg80211_ops/get_channel we should return NULL
>> in case of concurrent multi-channel.
>>
>> Signed-off-by: Michal Kazior<[email protected]>
>> ---
>> net/mac80211/cfg.c | 3 +++
>> 1 files changed, 3 insertions(+), 0 deletions(-)
>>
>> diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
>> index 88cc128..05f7022 100644
>> --- a/net/mac80211/cfg.c
>> +++ b/net/mac80211/cfg.c
>> @@ -2680,6 +2680,9 @@ ieee80211_wiphy_get_channel(struct wiphy *wiphy)
>> struct ieee80211_local *local = wiphy_priv(wiphy);
>> struct ieee80211_channel_state *chan_state =&local->chan_state;
>>
>> + if (local->hw.flags& IEEE80211_HW_SUPPORTS_MULTI_CHANNEL)
>> + return NULL;
>> +
>
> We should return NULL if we're actually using multiple channels :-)
>
> So clearly we need mac80211 do more work in tracking which channels are
> used, compatible, etc.

Oh. So will it be enough to iterate through the interfaces that are up
and check if they have different operational channels?


-- Pozdrawiam / Best Regards, Michal Kazior.