[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