[PATCH 2/9] BSS: Drop AP MLD ADDR from return parameters for ML element parsing

Benjamin Berg benjamin at sipsolutions.net
Wed Jun 18 05:35:24 PDT 2025


From: Benjamin Berg <benjamin.berg at intel.com>

The AP MLD ADDR is already parsed out when updating the BSS and stored
within the structure. As such, there is no point in parsing it out again
and adding a separate argument just for that.

Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
---
 tests/test-bss.c        | 3 +--
 wpa_supplicant/bss.c    | 7 -------
 wpa_supplicant/bss.h    | 1 -
 wpa_supplicant/events.c | 4 ++--
 wpa_supplicant/sme.c    | 5 +++--
 5 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/tests/test-bss.c b/tests/test-bss.c
index 3c72f10106..0b82bd6e9d 100644
--- a/tests/test-bss.c
+++ b/tests/test-bss.c
@@ -62,7 +62,6 @@ void test_parse_basic_ml(struct wpa_supplicant *wpa_s, u8 mld_id,
 		u8 ies[sizeof(rnr_ie) + sizeof(ml_ie_mld_id) +
 		       sizeof(mbssid_idx_ie)];
 	} bss;
-	u8 ap_mld_addr[ETH_ALEN];
 	u16 missing_links;
 	u8 ret;
 	bool nontransmitted;
@@ -85,7 +84,7 @@ void test_parse_basic_ml(struct wpa_supplicant *wpa_s, u8 mld_id,
 		bss.bss.ie_len += sizeof(mbssid_idx_ie);
 	}
 
-	ret = wpa_bss_parse_basic_ml_element(wpa_s, &bss.bss, ap_mld_addr,
+	ret = wpa_bss_parse_basic_ml_element(wpa_s, &bss.bss,
 					     &missing_links, NULL,
 					     &nontransmitted);
 
diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c
index fa5323468d..711dc7db26 100644
--- a/wpa_supplicant/bss.c
+++ b/wpa_supplicant/bss.c
@@ -1791,7 +1791,6 @@ wpa_bss_validate_rsne_ml(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
  * wpa_bss_parse_basic_ml_element - Parse the Basic Multi-Link element
  * @wpa_s: Pointer to wpa_supplicant data
  * @bss: BSS table entry
- * @mld_addr: AP MLD address (or %NULL)
  * @link_info: Array to store link information (or %NULL),
  *   should be initialized and #MAX_NUM_MLD_LINKS elements long
  * @missing_links: Result bitmask of links that were not discovered (or %NULL)
@@ -1812,7 +1811,6 @@ wpa_bss_validate_rsne_ml(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
  */
 int wpa_bss_parse_basic_ml_element(struct wpa_supplicant *wpa_s,
 				   struct wpa_bss *bss,
-				   u8 *ap_mld_addr,
 				   u16 *missing_links,
 				   struct wpa_ssid *ssid,
 				   bool *nontransmitted)
@@ -1919,11 +1917,6 @@ int wpa_bss_parse_basic_ml_element(struct wpa_supplicant *wpa_s,
 	if (ml_basic_common_info->len < sizeof(*ml_basic_common_info) + pos)
 		goto out;
 
-	/* Get the MLD address and MLD link ID */
-	if (ap_mld_addr)
-		os_memcpy(ap_mld_addr, ml_basic_common_info->mld_addr,
-			  ETH_ALEN);
-
 	link_id = ml_basic_common_info->variable[0] & EHT_ML_LINK_ID_MSK;
 
 	bss->mld_link_id = link_id;
diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h
index b75ae06b7a..fd560a9a8d 100644
--- a/wpa_supplicant/bss.h
+++ b/wpa_supplicant/bss.h
@@ -219,7 +219,6 @@ void calculate_update_time(const struct os_reltime *fetch_time,
 
 int wpa_bss_parse_basic_ml_element(struct wpa_supplicant *wpa_s,
 				   struct wpa_bss *bss,
-				   u8 *ap_mld_addr,
 				   u16 *missing_links,
 				   struct wpa_ssid *ssid,
 				   bool *nontransmitted);
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 39a4e0b226..fe9e358f5d 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -1176,7 +1176,7 @@ static bool wpas_valid_ml_bss(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
 {
 	u16 removed_links;
 
-	if (wpa_bss_parse_basic_ml_element(wpa_s, bss, NULL, NULL, NULL, NULL))
+	if (wpa_bss_parse_basic_ml_element(wpa_s, bss, NULL, NULL, NULL))
 		return true;
 
 	if (!bss->valid_links)
@@ -1895,7 +1895,7 @@ static int wpa_supplicant_connect_ml_missing(struct wpa_supplicant *wpa_s,
 	      (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)))
 		return 0;
 
-	if (wpa_bss_parse_basic_ml_element(wpa_s, selected, NULL,
+	if (wpa_bss_parse_basic_ml_element(wpa_s, selected,
 					   &missing_links, ssid,
 					   &nontransmitted) ||
 	    !missing_links)
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index 47c965bfdc..d32d315766 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -528,6 +528,7 @@ static void wpas_sme_set_mlo_links(struct wpa_supplicant *wpa_s,
 {
 	u8 i;
 
+	os_memcpy(wpa_s->ap_mld_addr, bss->mld_addr, ETH_ALEN);
 	wpa_s->valid_links = 0;
 	wpa_s->mlo_assoc_link_id = bss->mld_link_id;
 
@@ -613,8 +614,8 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
 	os_memset(&params, 0, sizeof(params));
 
 	if ((wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_MLO) &&
-	    !wpa_bss_parse_basic_ml_element(wpa_s, bss, wpa_s->ap_mld_addr,
-					    NULL, ssid, NULL) &&
+	    !wpa_bss_parse_basic_ml_element(wpa_s, bss, NULL,
+					    ssid, NULL) &&
 	    bss->valid_links) {
 		wpa_printf(MSG_DEBUG, "MLD: In authentication");
 		wpas_sme_set_mlo_links(wpa_s, bss, ssid);
-- 
2.49.0




More information about the Hostap mailing list