[PATCH 28/92] wpa_supplicant: Pass Rx PASN auth frames to NAN module

Andrei Otcheretianski andrei.otcheretianski at intel.com
Wed Apr 22 05:23:19 PDT 2026


From: Avraham Stern <avraham.stern at intel.com>

When an incoming PASN auth frame is received on the NAN management
interface and it contains the NAN IE, pass it to the NAN module to
handle.

Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
 src/common/ieee802_11_common.c  |  5 +++++
 src/common/ieee802_11_common.h  |  2 ++
 wpa_supplicant/events.c         |  4 ++++
 wpa_supplicant/nan_supplicant.c | 12 ++++++++++++
 wpa_supplicant/nan_supplicant.h |  2 ++
 5 files changed, 25 insertions(+)

diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c
index 13d578e500..ddb2e121b5 100644
--- a/src/common/ieee802_11_common.c
+++ b/src/common/ieee802_11_common.c
@@ -170,6 +170,11 @@ static int ieee802_11_parse_vendor_specific(const u8 *pos, size_t elen,
 			elems->proximity_ranging = pos;
 			elems->proximity_ranging_len = elen;
 			break;
+		case NAN_SDF_OUI_TYPE:
+			/* Wi-Fi Alliance - NAN IE */
+			elems->nan_ie = pos;
+			elems->nan_len = elen;
+			break;
 		default:
 			wpa_printf(MSG_MSGDUMP, "Unknown WFA "
 				   "information element ignored "
diff --git a/src/common/ieee802_11_common.h b/src/common/ieee802_11_common.h
index 01744b8d4c..5d9c840cee 100644
--- a/src/common/ieee802_11_common.h
+++ b/src/common/ieee802_11_common.h
@@ -130,6 +130,7 @@ struct ieee802_11_elems {
 	const u8 *proximity_ranging;
 	const u8 *akm_suite_selector;
 	const u8 *supported_groups;
+	const u8 *nan_ie;
 
 	u8 ssid_len;
 	u8 supp_rates_len;
@@ -203,6 +204,7 @@ struct ieee802_11_elems {
 	size_t proximity_ranging_len;
 	u8 akm_suite_selector_len;
 	u8 supported_groups_len;
+	size_t nan_len;
 
 	struct mb_ies_info mb_ies;
 
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 829e8b040e..7ba58f055b 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -6628,6 +6628,10 @@ static int wpas_pasn_auth(struct wpa_supplicant *wpa_s,
 	if (elems.proximity_ranging && elems.proximity_ranging_len)
 		return wpas_pr_pasn_auth_rx(wpa_s, mgmt, len, freq);
 #endif /* CONFIG_PR */
+#ifdef CONFIG_NAN
+	if (wpa_s->nan_mgmt && elems.nan_ie && elems.nan_len)
+		return wpas_nan_pasn_auth_rx(wpa_s, mgmt, len);
+#endif /* CONFIG_NAN */
 
 	return wpas_pasn_auth_rx(wpa_s, mgmt, len);
 }
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 7d056ffc4d..aef545b691 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -2687,6 +2687,18 @@ int wpas_nan_pasn_auth_tx_status(struct wpa_supplicant *wpa_s, const u8 *data,
 
 	return nan_pairing_pasn_auth_tx_status(nan, data, data_len, acked);
 }
+
+
+int wpas_nan_pasn_auth_rx(struct wpa_supplicant *wpa_s,
+			  const struct ieee80211_mgmt *mgmt, size_t len)
+{
+	struct nan_data *nan = wpa_s->nan;
+
+	if (!nan || !wpas_nan_ready(wpa_s))
+		return -1;
+
+	return nan_pairing_auth_rx(nan, mgmt, len);
+}
 #endif /* CONFIG_PASN */
 #endif /* CONFIG_NAN */
 
diff --git a/wpa_supplicant/nan_supplicant.h b/wpa_supplicant/nan_supplicant.h
index af5b6f97cd..794515bcfb 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -42,6 +42,8 @@ int wpas_nan_pair(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
 int wpas_nan_pairing_start(struct wpa_supplicant *wpa_s, char *cmd);
 int wpas_nan_pasn_auth_tx_status(struct wpa_supplicant *wpa_s, const u8 *data,
 				 size_t data_len, bool acked);
+int wpas_nan_pasn_auth_rx(struct wpa_supplicant *wpa_s,
+			  const struct ieee80211_mgmt *mgmt, size_t len);
 #endif /* CONFIG_PASN */
 
 #else /* CONFIG_NAN */
-- 
2.53.0




More information about the Hostap mailing list