mac80211: fix monitor mode channel reporting
authorFelix Fietkau <nbd@openwrt.org>
Sat, 23 Feb 2013 18:02:14 +0000 (19:02 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 26 Feb 2013 20:53:38 +0000 (21:53 +0100)
When not using channel contexts with only monitor mode interfaces being
active, report local->monitor_chandef to userspace.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c

index 09d96a8f6c2c7c64679bef8062d7d87db75addc1..808f5fcd1ced92127f8786700a759465e0708060 100644 (file)
@@ -3285,13 +3285,19 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
                                     struct cfg80211_chan_def *chandef)
 {
        struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
+       struct ieee80211_local *local = wiphy_priv(wiphy);
        struct ieee80211_chanctx_conf *chanctx_conf;
        int ret = -ENODATA;
 
        rcu_read_lock();
-       chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
-       if (chanctx_conf) {
-               *chandef = chanctx_conf->def;
+       if (local->use_chanctx) {
+               chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
+               if (chanctx_conf) {
+                       *chandef = chanctx_conf->def;
+                       ret = 0;
+               }
+       } else if (local->open_count == local->monitors) {
+               *chandef = local->monitor_chandef;
                ret = 0;
        }
        rcu_read_unlock();