[PATCH v2 19/28] EPPKE: Add Multi-Link support in Authentication frames

Ainy Kumari ainy.kumari at oss.qualcomm.com
Tue Jan 6 05:45:29 PST 2026


Enhance EPPKE authentication to include Multi-Link Element (MLE) for
MLO-capable stations. The MLE is added to authentication request frames
when the station supports Multi-Link operation, ensuring proper handling
of MLO connections during EPPKE authentication.

Signed-off-by: Ainy Kumari <ainy.kumari at oss.qualcomm.com>
---
 src/pasn/pasn_initiator.c | 24 ++++++++++++++++++++++++
 wpa_supplicant/sme.c      |  6 ++++--
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/pasn/pasn_initiator.c b/src/pasn/pasn_initiator.c
index ec356173a..30f42fb65 100644
--- a/src/pasn/pasn_initiator.c
+++ b/src/pasn/pasn_initiator.c
@@ -664,6 +664,18 @@ struct wpabuf *wpas_pasn_build_auth_1(struct pasn_data *pasn,
 
 	wpa_pasn_add_extra_ies(buf, pasn->extra_ies, pasn->extra_ies_len);
 
+#ifdef CONFIG_ENC_ASSOC
+	if (pasn->auth_alg == WLAN_AUTH_EPPKE && pasn->is_ml_peer) {
+		wpa_printf(MSG_DEBUG, "EPPKE: Include Multi Link Element");
+		wpabuf_put_u8(buf, WLAN_EID_EXTENSION);
+		wpabuf_put_u8(buf, 10);
+		wpabuf_put_u8(buf, WLAN_EID_EXT_MULTI_LINK);
+		wpabuf_put_le16(buf, MULTI_LINK_CONTROL_TYPE_BASIC);
+		wpabuf_put_u8(buf, ETH_ALEN + 1);
+		wpabuf_put_data(buf, pasn->own_addr, ETH_ALEN);
+	}
+#endif /* CONFIG_ENC_ASSOC */
+
 	wpabuf_free(pasn->auth1);
 	pasn->auth1 = wpabuf_alloc_copy(wpabuf_head_u8(buf) + IEEE80211_HDRLEN,
 					wpabuf_len(buf) - IEEE80211_HDRLEN);
@@ -741,6 +753,18 @@ struct wpabuf *wpas_pasn_build_auth_3(struct pasn_data *pasn,
 
 	wpa_pasn_add_extra_ies(buf, pasn->extra_ies, pasn->extra_ies_len);
 
+#ifdef CONFIG_ENC_ASSOC
+	if (pasn->auth_alg == WLAN_AUTH_EPPKE && pasn->is_ml_peer) {
+		wpa_printf(MSG_DEBUG, "EPPKE: Include Multi Link Element");
+		wpabuf_put_u8(buf, WLAN_EID_EXTENSION);
+		wpabuf_put_u8(buf, 10);
+		wpabuf_put_u8(buf, WLAN_EID_EXT_MULTI_LINK);
+		wpabuf_put_le16(buf, MULTI_LINK_CONTROL_TYPE_BASIC);
+		wpabuf_put_u8(buf, ETH_ALEN + 1);
+		wpabuf_put_data(buf, pasn->own_addr, ETH_ALEN);
+	}
+#endif /* CONFIG_ENC_ASSOC */
+
 	/* Add the MIC */
 	mic_len = pasn_mic_len(pasn->hash_alg);
 	wpabuf_put_u8(buf, WLAN_EID_MIC);
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index 3510faf74..107fd2d15 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -715,10 +715,12 @@ static void wpas_eppke_initialize(struct wpa_supplicant *wpa_s, struct wpa_bss *
 	pasn->auth_alg = WLAN_AUTH_EPPKE;
 
 	os_memcpy(pasn->own_addr, wpa_s->own_addr, ETH_ALEN);
-	if (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_MLO)
+	if (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_MLO) {
+		pasn->is_ml_peer = true;
 		os_memcpy(pasn->peer_addr, wpa_s->ap_mld_addr, ETH_ALEN);
-	else
+	} else {
 		os_memcpy(pasn->peer_addr, bss->bssid, ETH_ALEN);
+	}
 	os_memcpy(pasn->bssid, bss->bssid, ETH_ALEN);
 
 	wpa_printf(MSG_DEBUG,
-- 
2.25.1




More information about the Hostap mailing list