[RFC v2 62/99] wpa_supplicant: Handle NAF tx status

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


Pass action frames TX status to nan_supplicant which in turn forwards it
to NAN module for NAFs.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 wpa_supplicant/events.c         | 10 ++++++++++
 wpa_supplicant/nan_supplicant.c | 15 +++++++++++++++
 wpa_supplicant/nan_supplicant.h |  9 ++++++++-
 3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 095da76170..b20505cbe0 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -6566,6 +6566,16 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 					     data->tx_status.ack) == 0)
 			break;
 #endif /* CONFIG_PASN */
+
+		if (wpa_s->nan_mgmt &&
+		    data->tx_status.type == WLAN_FC_TYPE_MGMT &&
+		    data->tx_status.stype == WLAN_FC_STYPE_ACTION) {
+			wpas_nan_tx_status(wpa_s, data->tx_status.data,
+					   data->tx_status.data_len,
+					   data->tx_status.ack);
+			break;
+		}
+
 #ifdef CONFIG_AP
 		if (wpa_s->ap_iface == NULL) {
 #ifdef CONFIG_OFFCHANNEL
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index bb17805ba4..9ec9553b88 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -1913,3 +1913,18 @@ int * wpas_nan_usd_all_freqs(struct wpa_supplicant *wpa_s)
 	return freqs;
 }
 
+
+void wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
+			const u8 *data, size_t data_len, u8 acked)
+{
+	const struct ieee80211_mgmt *mgmt = (void *)data;
+
+	if (!wpas_nan_ready(wpa_s))
+		return;
+
+	wpa_printf(MSG_DEBUG, "NAN: TX status for frame len=%zu acked=%u",
+		   data_len, acked);
+
+	if (!nan_tx_status(wpa_s->nan, mgmt->da, data, data_len, acked))
+		wpa_printf(MSG_DEBUG, "NAN: Processed NAF tx status");
+}
diff --git a/wpa_supplicant/nan_supplicant.h b/wpa_supplicant/nan_supplicant.h
index e98e38815d..1681b3d129 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -101,7 +101,8 @@ int wpas_nan_transmit(struct wpa_supplicant *wpa_s, int handle,
 		      const struct wpabuf *ssi, const struct wpabuf *elems,
 		      const u8 *peer_addr, u8 req_instance_id);
 void wpas_nan_tx_wait_expire(struct wpa_supplicant *wpa_s);
-
+void wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
+			const u8 *data, size_t data_len, u8 acked);
 #else /* CONFIG_NAN_USD || CONFIG_NAN */
 
 static inline int wpas_nan_de_init(struct wpa_supplicant *wpa_s)
@@ -125,6 +126,12 @@ static inline void wpas_nan_de_flush(struct wpa_supplicant *wpa_s)
 static inline void wpas_nan_tx_wait_expire(struct wpa_supplicant *wpa_s)
 {}
 
+
+static inline void wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
+				      const u8 *data, size_t data_len,
+				      u8 acked)
+{}
+
 #endif /* CONFIG_NAN_USD || CONFIG_NAN */
 
 /* NAN USD only */
-- 
2.49.0




More information about the Hostap mailing list