Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b78e8cea authored by Michal Kazior's avatar Michal Kazior Committed by Johannes Berg
Browse files

cfg80211: track monitor channel



Make it even more obvious we support single
monitor channel. This will allow us to remove
.get_channel.

Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 4f03c1ed
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
				 int freq, enum nl80211_channel_type chantype)
{
	struct ieee80211_channel *chan;
	int err;

	if (!rdev->ops->set_monitor_channel)
		return -EOPNOTSUPP;
@@ -92,7 +93,13 @@ int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
	if (!chan)
		return -EINVAL;

	return rdev->ops->set_monitor_channel(&rdev->wiphy, chan, chantype);
	err = rdev->ops->set_monitor_channel(&rdev->wiphy, chan, chantype);
	if (!err) {
		rdev->monitor_channel = chan;
		rdev->monitor_channel_type = chantype;
	}

	return err;
}

void
+7 −1
Original line number Diff line number Diff line
@@ -730,9 +730,15 @@ void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
		rdev->num_running_monitor_ifaces += num;

	has_monitors_only_new = cfg80211_has_monitors_only(rdev);
	if (has_monitors_only_new != has_monitors_only_old)
	if (has_monitors_only_new != has_monitors_only_old) {
		rdev->ops->set_monitor_enabled(&rdev->wiphy,
					       has_monitors_only_new);

		if (!has_monitors_only_new) {
			rdev->monitor_channel = NULL;
			rdev->monitor_channel_type = NL80211_CHAN_NO_HT;
		}
	}
}

static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
+3 −0
Original line number Diff line number Diff line
@@ -59,6 +59,9 @@ struct cfg80211_registered_device {
	int num_running_ifaces;
	int num_running_monitor_ifaces;

	struct ieee80211_channel *monitor_channel;
	enum nl80211_channel_type monitor_channel_type;

	/* BSSes/scanning */
	spinlock_t bss_lock;
	struct list_head bss_list;