From: Abishek Ganapathy Date: Thu, 30 Oct 2025 19:14:07 +0000 (+0530) Subject: Fetch the driver EML/MLD capabilities for wpa_supplicant use X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cc501fe68121cecb573cdb1c17b7627faac04fd;p=thirdparty%2Fhostap.git Fetch the driver EML/MLD capabilities for wpa_supplicant use Add a new helper function wpa_drv_get_mld_capa() to fetch MLD capabilities based on interface type and store eml_capa and mld_capa in wpa_supplicant and use eml_capa to decide STA EMLSR support. Co-developed-by: Rohan Dutta Signed-off-by: Rohan Dutta Signed-off-by: Abishek Ganapathy --- diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h index ccebd2cbe..f259ac36f 100644 --- a/wpa_supplicant/driver_i.h +++ b/wpa_supplicant/driver_i.h @@ -1041,6 +1041,16 @@ static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s, &wpa_s->extended_capa_len); } +static inline int wpa_drv_get_mld_capa(struct wpa_supplicant *wpa_s, + enum wpa_driver_if_type type, + u16 *mld_eml_capa, u16 *mld_mld_capa) +{ + if (!wpa_s->driver->get_mld_capab) + return -1; + return wpa_s->driver->get_mld_capab(wpa_s->drv_priv, type, + mld_eml_capa, mld_mld_capa); +} + static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s, unsigned int channel, unsigned int period, diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 0bf9d91f5..72e61fb69 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -7844,6 +7844,8 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s, capa_res = wpa_drv_get_capa(wpa_s, &capa); if (capa_res == 0) { + u16 eml_capa, mld_capa; + wpa_s->drv_capa_known = 1; wpa_s->drv_flags = capa.flags; wpa_s->drv_flags2 = capa.flags2; @@ -7886,6 +7888,12 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s, wpa_s->extended_capa_len >= 3 && wpa_s->extended_capa[2] & 0x40) wpa_s->multi_bss_support = 1; + + if (wpa_drv_get_mld_capa(wpa_s, WPA_IF_STATION, + &eml_capa, &mld_capa) == 0) { + wpa_s->eml_capa = eml_capa; + wpa_s->mld_capa = mld_capa; + } } else { wpa_s->drv_max_probe_req_ie_len = 1500; } diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 9780822df..a2497fc5b 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -951,6 +951,9 @@ struct wpa_supplicant { const u8 *extended_capa, *extended_capa_mask; unsigned int extended_capa_len; + /* EML and MLD capabilities supported by the driver */ + u16 eml_capa, mld_capa; + int max_scan_ssids; int max_sched_scan_ssids; unsigned int max_sched_scan_plans;