[PATCH 12/71] wpa_supplicant: Handle NAF tx status

Andrei Otcheretianski andrei.otcheretianski at intel.com
Wed Apr 1 15:01:21 PDT 2026


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 | 16 ++++++++++++++++
 wpa_supplicant/nan_supplicant.h |  7 +++++++
 3 files changed, 33 insertions(+)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 721b1aa231..9794b63f53 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -6892,6 +6892,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 07f30b7d43..f487ec1d86 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -1971,3 +1971,19 @@ void wpas_nan_usd_state_change_notif(struct wpa_supplicant *wpa_s)
 			nan_de_config(ifs->nan_de, &cfg);
 	}
 }
+
+
+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 9306e296e5..d22b9bf149 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -100,6 +100,8 @@ void wpas_nan_cancel_subscribe(struct wpa_supplicant *wpa_s,
 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_status(struct wpa_supplicant *wpa_s,
+			const u8 *data, size_t data_len, u8 acked);
 
 #else /* CONFIG_NAN_USD || CONFIG_NAN */
 
@@ -120,6 +122,11 @@ void wpas_nan_de_rx_sdf(struct wpa_supplicant *wpa_s, const u8 *src,
 static inline void wpas_nan_de_flush(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.53.0




More information about the Hostap mailing list