[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