[PATCH 5/7] wpa_supplicant: Forward beacons to the NAN module

Andrei Otcheretianski andrei.otcheretianski at intel.com
Thu Oct 8 09:54:36 PDT 2026


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

Add support for forwarding received beacons to the NAN
module when Instant Communication is enabled in the
configuration.

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 wpa_supplicant/events.c         |  5 +++++
 wpa_supplicant/nan_supplicant.c | 18 ++++++++++++++++++
 wpa_supplicant/nan_supplicant.h |  7 +++++++
 3 files changed, 30 insertions(+)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index b2d9558aa1..af401ba2b0 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -7602,6 +7602,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 				break;
 			}
 
+			/* Beacons might also be needed for NAN */
+			if (stype == WLAN_FC_STYPE_BEACON)
+				wpas_nan_rx_beacon(wpa_s, mgmt,
+						   data->rx_mgmt.frame_len);
+
 			if (wpa_s->ifmsh) {
 				mesh_mpm_mgmt_rx(wpa_s, &data->rx_mgmt);
 				break;
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index d4534f5d7f..6758f58c5d 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -5697,6 +5697,24 @@ int wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
 
 
 #ifdef CONFIG_NAN
+void wpas_nan_rx_beacon(struct wpa_supplicant *wpa_s,
+			const struct ieee80211_mgmt *mgmt, size_t len)
+{
+	size_t hdr_len = IEEE80211_HDRLEN + sizeof(mgmt->u.beacon);
+
+	/*
+	 * Process services advertised in beacons during Instant
+	 * Communication.
+	 */
+	if (!wpas_nan_ready(wpa_s) ||
+	    !wpa_s->nan_cluster_config.instant_comm || len < hdr_len)
+		return;
+
+	nan_de_rx_beacon(wpa_s->nan_de, mgmt->sa, mgmt->bssid,
+			 mgmt->u.beacon.variable, len - hdr_len);
+}
+
+
 void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
 		     const struct ieee80211_mgmt *mgmt, size_t len)
 {
diff --git a/wpa_supplicant/nan_supplicant.h b/wpa_supplicant/nan_supplicant.h
index 95c6e28c53..3b28bb8805 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -32,6 +32,8 @@ void wpas_nan_chan_evacuation(struct wpa_supplicant *wpa_s,
 			      const struct nan_chan_evacuation_info *info);
 int wpas_nan_sched_config_map(struct wpa_supplicant *wpa_s, const char *cmd);
 int wpas_nan_ndp_request(struct wpa_supplicant *wpa_s, char *cmd);
+void wpas_nan_rx_beacon(struct wpa_supplicant *wpa_s,
+			const struct ieee80211_mgmt *mgmt, size_t len);
 void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
 		     const struct ieee80211_mgmt *mgmt, size_t len);
 void wpas_nan_flush_niks(struct wpa_supplicant *wpa_s);
@@ -111,6 +113,11 @@ static inline void wpas_nan_ulw_update(struct wpa_supplicant *wpa_s,
 				       const u8 *ulw, size_t ulw_len)
 {}
 
+static inline void wpas_nan_rx_beacon(struct wpa_supplicant *wpa_s,
+				      const struct ieee80211_mgmt *mgmt,
+				      size_t len)
+{}
+
 static inline void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
 				   const struct ieee80211_mgmt *mgmt,
 				   size_t len)
-- 
2.53.0




More information about the Hostap mailing list