2012-05-10 20:33:43

by Johannes Berg

[permalink] [raw]
Subject: [RFC 1/2] mac80211: move ieee80211_set_channel function

From: Johannes Berg <[email protected]>

Move the set_channel function up so it can be used
by other code in this file in the future.

Signed-off-by: Johannes Berg <[email protected]>
---
net/mac80211/cfg.c | 70 ++++++++++++++++++++++++++---------------------------
1 file changed, 35 insertions(+), 35 deletions(-)

--- a/net/mac80211/cfg.c 2012-05-10 21:46:39.000000000 +0200
+++ b/net/mac80211/cfg.c 2012-05-10 21:47:10.000000000 +0200
@@ -674,6 +674,41 @@ static int ieee80211_get_station(struct
return ret;
}

+static int ieee80211_set_channel(struct wiphy *wiphy,
+ struct net_device *netdev,
+ struct ieee80211_channel *chan,
+ enum nl80211_channel_type channel_type)
+{
+ struct ieee80211_local *local = wiphy_priv(wiphy);
+ struct ieee80211_sub_if_data *sdata = NULL;
+
+ if (netdev)
+ sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
+
+ switch (ieee80211_get_channel_mode(local, NULL)) {
+ case CHAN_MODE_HOPPING:
+ return -EBUSY;
+ case CHAN_MODE_FIXED:
+ if (local->oper_channel != chan)
+ return -EBUSY;
+ if (!sdata && local->_oper_channel_type == channel_type)
+ return 0;
+ break;
+ case CHAN_MODE_UNDEFINED:
+ break;
+ }
+
+ if (!ieee80211_set_channel_type(local, sdata, channel_type))
+ return -EBUSY;
+
+ local->oper_channel = chan;
+
+ /* auto-detects changes */
+ ieee80211_hw_config(local, 0);
+
+ return 0;
+}
+
static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
const u8 *resp, size_t resp_len)
{
@@ -1676,41 +1711,6 @@ static int ieee80211_set_txq_params(stru

return 0;
}
-
-static int ieee80211_set_channel(struct wiphy *wiphy,
- struct net_device *netdev,
- struct ieee80211_channel *chan,
- enum nl80211_channel_type channel_type)
-{
- struct ieee80211_local *local = wiphy_priv(wiphy);
- struct ieee80211_sub_if_data *sdata = NULL;
-
- if (netdev)
- sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
-
- switch (ieee80211_get_channel_mode(local, NULL)) {
- case CHAN_MODE_HOPPING:
- return -EBUSY;
- case CHAN_MODE_FIXED:
- if (local->oper_channel != chan)
- return -EBUSY;
- if (!sdata && local->_oper_channel_type == channel_type)
- return 0;
- break;
- case CHAN_MODE_UNDEFINED:
- break;
- }
-
- if (!ieee80211_set_channel_type(local, sdata, channel_type))
- return -EBUSY;
-
- local->oper_channel = chan;
-
- /* auto-detects changes */
- ieee80211_hw_config(local, 0);
-
- return 0;
-}

#ifdef CONFIG_PM
static int ieee80211_suspend(struct wiphy *wiphy,




2012-05-11 06:39:58

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC 1/2] mac80211: move ieee80211_set_channel function

On Fri, 2012-05-11 at 08:36 +0200, Michal Kazior wrote:
> Johannes Berg wrote:
> > +static int ieee80211_set_channel(struct wiphy *wiphy,
> > + struct net_device *netdev,
> > + struct ieee80211_channel *chan,
> > + enum nl80211_channel_type channel_type)
> > +{
> > + struct ieee80211_local *local = wiphy_priv(wiphy);
> > + struct ieee80211_sub_if_data *sdata = NULL;
> > +
> > + if (netdev)
> > + sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
> > +
> > + switch (ieee80211_get_channel_mode(local, NULL)) {
> > + case CHAN_MODE_HOPPING:
> > + return -EBUSY;
> > + case CHAN_MODE_FIXED:
> > + if (local->oper_channel != chan)
> > + return -EBUSY;
>
>
> > + if (!sdata&& local->_oper_channel_type == channel_type)
> > + return 0;
>
> Do we need to keep this part? If not we could remove it in your:
> [RFC] mac80211: clean up ieee80211_set_channel

I think we do need to keep it.

> I think we could even remove the whole `ieee80211_get_channel_mode`
> thing now since we enforce interface combinations, right? We just need
> to adjust the interface combinations verification to refuse mixing ibss
> with anything else for the moment. That shouldn't be bad, or is it?

Somebody is going to complain if we never allow IBSS+anything any more
because IBSS has a fixed-channel mode in mac80211 which can cooperate
better.

johannes


2012-05-11 06:36:44

by Michal Kazior

[permalink] [raw]
Subject: Re: [RFC 1/2] mac80211: move ieee80211_set_channel function

Johannes Berg wrote:
> +static int ieee80211_set_channel(struct wiphy *wiphy,
> + struct net_device *netdev,
> + struct ieee80211_channel *chan,
> + enum nl80211_channel_type channel_type)
> +{
> + struct ieee80211_local *local = wiphy_priv(wiphy);
> + struct ieee80211_sub_if_data *sdata = NULL;
> +
> + if (netdev)
> + sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
> +
> + switch (ieee80211_get_channel_mode(local, NULL)) {
> + case CHAN_MODE_HOPPING:
> + return -EBUSY;
> + case CHAN_MODE_FIXED:
> + if (local->oper_channel != chan)
> + return -EBUSY;


> + if (!sdata&& local->_oper_channel_type == channel_type)
> + return 0;

Do we need to keep this part? If not we could remove it in your:
[RFC] mac80211: clean up ieee80211_set_channel


I think we could even remove the whole `ieee80211_get_channel_mode`
thing now since we enforce interface combinations, right? We just need
to adjust the interface combinations verification to refuse mixing ibss
with anything else for the moment. That shouldn't be bad, or is it?


--
Pozdrawiam / Best regards, Michal Kazior.