[RFC v2 65/99] wpa_supplicant: Receive NAFs

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Dec 23 03:52:09 PST 2025


Receive NAN action frames on NMI and forward them to NAN module for
processing.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 wpa_supplicant/events.c         | 19 ++++++++++++-------
 wpa_supplicant/nan_supplicant.c | 10 ++++++++++
 wpa_supplicant/nan_supplicant.h |  7 +++++++
 3 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index b20505cbe0..58f6012ddf 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -5623,13 +5623,18 @@ static void wpas_event_rx_mgmt_action(struct wpa_supplicant *wpa_s,
 
 #if defined(CONFIG_NAN_USD) || defined(CONFIG_NAN)
 	if (category == WLAN_ACTION_PUBLIC && plen >= 5 &&
-	    payload[0] == WLAN_PA_VENDOR_SPECIFIC &&
-	    WPA_GET_BE32(&payload[1]) == NAN_SDF_VENDOR_TYPE) {
-		payload += 5;
-		plen -= 5;
-		wpas_nan_de_rx_sdf(wpa_s, mgmt->sa, mgmt->bssid, freq,
-				   payload, plen, rssi);
-		return;
+	    payload[0] == WLAN_PA_VENDOR_SPECIFIC) {
+
+		if  (WPA_GET_BE32(&payload[1]) == NAN_SDF_VENDOR_TYPE) {
+			payload += 5;
+			plen -= 5;
+			wpas_nan_de_rx_sdf(wpa_s, mgmt->sa, mgmt->bssid, freq,
+					   payload, plen, rssi);
+			return;
+		} else if (WPA_GET_BE32(&payload[1]) == NAN_NAF_VENDOR_TYPE) {
+			wpas_nan_rx_naf(wpa_s, mgmt, len);
+			return;
+		}
 	}
 #endif /* CONFIG_NAN_USD || CONFIG_NAN */
 
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 794480b3fb..c86b8d5fb1 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -2014,3 +2014,13 @@ void wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
 	if (!nan_tx_status(wpa_s->nan, mgmt->da, data, data_len, acked))
 		wpa_printf(MSG_DEBUG, "NAN: Processed NAF tx status");
 }
+
+
+void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
+		     const struct ieee80211_mgmt *mgmt, size_t len)
+{
+	if (!wpas_nan_ready(wpa_s))
+		return;
+
+	nan_action_rx(wpa_s->nan, mgmt, len);
+}
diff --git a/wpa_supplicant/nan_supplicant.h b/wpa_supplicant/nan_supplicant.h
index 1681b3d129..d7c0cc2800 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -26,6 +26,8 @@ void wpas_nan_cluster_join(struct wpa_supplicant *wpa_s,
 void wpas_nan_next_dw(struct wpa_supplicant *wpa_s, u32 freq);
 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_naf(struct wpa_supplicant *wpa_s,
+		     const struct ieee80211_mgmt *mgmt, size_t len);
 
 #else /* CONFIG_NAN */
 
@@ -67,6 +69,11 @@ static inline void wpas_nan_cluster_join(struct wpa_supplicant *wpa_s,
 
 static inline void wpas_nan_next_dw(struct wpa_supplicant *wpa_s, u32 freq)
 {}
+
+static inline void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
+				   const struct ieee80211_mgmt *mgmt,
+				   size_t len)
+{}
 #endif /* CONFIG_NAN */
 
 struct nan_subscribe_params;
-- 
2.49.0




More information about the Hostap mailing list