diff mbox series

[1/2] wifi: nl80211/cfg80211: Stop supporting cooked monitor

Message ID 20250204111352.7004-1-Alexander@wetzel-home.de (mailing list archive)
State New
Delegated to: Johannes Berg
Headers show
Series [1/2] wifi: nl80211/cfg80211: Stop supporting cooked monitor | expand

Commit Message

Alexander Wetzel Feb. 4, 2025, 11:13 a.m. UTC
Unconditionally start to refuse creating cooked monitor interfaces to
phase them out.

There is no feature flag for drivers to opt-in for cooked monitor and
all known users are using/preferring the modern API since the hostapd
release 1.0 in May 2012.

Signed-off-by: Alexander Wetzel <Alexander@wetzel-home.de>
---
That's kind of brutal... But still seems to be the best way.

While we keep NL80211_MNTR_FLAG_COOK_FRAMES around to not break software
like hostapd from compiling, nl80211 will refuse anyone from using it.
Which includes drivers which still may be fine with this feature.

But adding a feature flag for that outdated feature, assign it to all
drivers without knowing if they really support that any longer seems to
be a no-go. And adding an opt-out feature for something we plan to
remove also feels off.

That way we may be able to remove NL80211_MNTR_FLAG_COOK_FRAMES in some
years...

If you think that's too hard, there is another way:
I first tried to just refuse setting the flag in mac80211, but that
triggered a warning in nl80211 when rdev_add_virtual_intf() got the
error after green-lightening the flags in nl80211_parse_mon_options().

So we could add some code in nl80211 suppressing the warning when
MONITOR_FLAG_COOK_FRAMES is set. That would open up drivers to refuse
cooperation when someone tries to use the flag.

Alexander

---
 include/net/cfg80211.h       | 2 +-
 include/uapi/linux/nl80211.h | 4 ++--
 net/wireless/nl80211.c       | 4 ++++
 3 files changed, 7 insertions(+), 3 deletions(-)

Comments

Johannes Berg Feb. 4, 2025, 11:56 a.m. UTC | #1
On Tue, 2025-02-04 at 12:13 +0100, Alexander Wetzel wrote:
> 
> But adding a feature flag for that outdated feature, assign it to all
> drivers without knowing if they really support that any longer seems to
> be a no-go. And adding an opt-out feature for something we plan to
> remove also feels off.

I don't think there's any driver that supports this in the first place.
Most, if not all, non-mac80211 drivers supporting AP mode have AP SME in
firmware anyway.

johannes
diff mbox series

Patch

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 363d7dd2255a..a72e7eb7027f 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -2265,7 +2265,7 @@  static inline int cfg80211_get_station(struct net_device *dev,
  * @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP
  * @MONITOR_FLAG_CONTROL: pass control frames
  * @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
- * @MONITOR_FLAG_COOK_FRAMES: report frames after processing
+ * @MONITOR_FLAG_COOK_FRAMES: deprecated, will unconditionally be refused
  * @MONITOR_FLAG_ACTIVE: active monitor, ACKs frames on its MAC address
  * @MONITOR_FLAG_SKIP_TX: do not pass locally transmitted frames
  */
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index f6c1b181c886..9d8ecf20ef0d 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -4727,8 +4727,8 @@  enum nl80211_survey_info {
  * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP
  * @NL80211_MNTR_FLAG_CONTROL: pass control frames
  * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering
- * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing.
- *	overrides all other flags.
+ * @NL80211_MNTR_FLAG_COOK_FRAMES: deprecated
+ *	will unconditionally be refused
  * @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address
  *	and ACK incoming unicast packets.
  * @NL80211_MNTR_FLAG_SKIP_TX: do not pass local tx packets
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index d7d3da0f6833..8bd09110d393 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4245,6 +4245,10 @@  static int nl80211_parse_mon_options(struct cfg80211_registered_device *rdev,
 		change = true;
 	}
 
+	/* MONITOR_FLAG_COOK_FRAMES is deprecated, refuse cooperation */
+	if (params->flags & MONITOR_FLAG_COOK_FRAMES)
+		return -EOPNOTSUPP;
+
 	if (params->flags & MONITOR_FLAG_ACTIVE &&
 	    !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
 		return -EOPNOTSUPP;