[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