mac80211: fix idle handling in monitor mode
authorFelix Fietkau <nbd@openwrt.org>
Sat, 23 Feb 2013 17:40:57 +0000 (18:40 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 26 Feb 2013 20:53:01 +0000 (21:53 +0100)
When the driver does not want a monitor mode VIF, no channel context is
allocated for it. This causes ieee80211_recalc_idle to put the hardware
into idle mode if only a monitor mode is active, breaking injection.

Fix this by checking local->monitors in addition to active channel
contexts.

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

index 2c059e54e88575bf1364a17b9a9bc2f020c5a7a6..640afab304d7a02e50414a16f3df8e22c6ea4c30 100644 (file)
@@ -107,7 +107,7 @@ void ieee80211_recalc_idle(struct ieee80211_local *local)
 
        lockdep_assert_held(&local->mtx);
 
-       active = !list_empty(&local->chanctx_list);
+       active = !list_empty(&local->chanctx_list) || local->monitors;
 
        if (!local->ops->remain_on_channel) {
                list_for_each_entry(roc, &local->roc_list, list) {