[PATCH 2/9] nl80211: Support scanning as AP

Benjamin Berg benjamin at sipsolutions.net
Fri Jul 18 04:00:58 PDT 2025


From: Ilan Peer <ilan.peer at intel.com>

If the kernel indicated support for scanning on AP interface,
set NL80211_SCAN_FLAG_AP in the scan request.

type=feature
ticket=none

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
Reviewed-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
---
 src/drivers/driver_nl80211.h      | 1 +
 src/drivers/driver_nl80211_capa.c | 5 +++++
 src/drivers/driver_nl80211_scan.c | 3 ++-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 674c26a71a..4649899132 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -200,6 +200,7 @@ struct wpa_driver_nl80211_data {
 	unsigned int puncturing:1;
 	unsigned int qca_ap_allowed_freqs:1;
 	unsigned int connect_ext_vendor_cmd_avail:1;
+	unsigned int support_ap_scan:1;
 
 	u8 extra_bss_membership_selectors[8];
 
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 88ee9e724a..12be34d5a0 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -82,6 +82,7 @@ struct wiphy_info_data {
 	unsigned int update_ft_ies_supported:1;
 	unsigned int has_key_mgmt:1;
 	unsigned int has_key_mgmt_iftype:1;
+	unsigned int support_ap_scan:1;
 };
 
 
@@ -787,6 +788,9 @@ static void wiphy_info_feature_flags(struct wiphy_info_data *info,
 
 	if (flags & NL80211_FEATURE_FULL_AP_CLIENT_STATE)
 		capa->flags |= WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE;
+
+	if (flags & NL80211_FEATURE_AP_SCAN)
+		info->support_ap_scan = 1;
 }
 
 
@@ -1581,6 +1585,7 @@ int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
 	if (info.set_qos_map_supported)
 		drv->capa.flags |= WPA_DRIVER_FLAGS_QOS_MAPPING;
 	drv->have_low_prio_scan = info.have_low_prio_scan;
+	drv->support_ap_scan = info.support_ap_scan;
 
 	/*
 	 * If the driver doesn't support data TX status, we won't get TX
diff --git a/src/drivers/driver_nl80211_scan.c b/src/drivers/driver_nl80211_scan.c
index f0313c1af7..da90b55553 100644
--- a/src/drivers/driver_nl80211_scan.c
+++ b/src/drivers/driver_nl80211_scan.c
@@ -267,7 +267,8 @@ nl80211_scan_common(struct i802_bss *bss, u8 cmd,
 	params->filter_ssids = NULL;
 	drv->num_filter_ssids = params->num_filter_ssids;
 
-	if (!drv->hostapd && is_ap_interface(drv->nlmode)) {
+	if (drv->support_ap_scan ||
+	    (!drv->hostapd && is_ap_interface(drv->nlmode))) {
 		wpa_printf(MSG_DEBUG, "nl80211: Add NL80211_SCAN_FLAG_AP");
 		scan_flags |= NL80211_SCAN_FLAG_AP;
 	}
-- 
2.50.0




More information about the Hostap mailing list