From 93eb3b83c605110a1a88b12939f89a29784b20a9 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Mon, 29 Apr 2024 13:51:43 +0200 Subject: [PATCH] WNM: Store whether disassociation address is an MLD MAC address Commit 17a2aa822c26 ("WNM: Follow BTM procedure if the last link is dropped") added code to store either the MLD MAC address or BSSID when being disassociated. However, it did not save which one was stored making the tests later on awkward. Store whether it was an MLD MAC address or not and then do the test accordingly. Signed-off-by: Benjamin Berg --- wpa_supplicant/wnm_sta.c | 13 ++++++++----- wpa_supplicant/wpa_supplicant_i.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c index a383ed803..a588ff3c4 100644 --- a/wpa_supplicant/wnm_sta.c +++ b/wpa_supplicant/wnm_sta.c @@ -1495,12 +1495,17 @@ static void ieee802_11_rx_bss_trans_mgmt_req(struct wpa_supplicant *wpa_s, /* The last link is being removed (which must be the assoc link) */ wpa_s->wnm_link_removal = true; + wpa_s->wnm_disassoc_mld = false; os_memcpy(wpa_s->wnm_dissoc_addr, wpa_s->links[wpa_s->mlo_assoc_link_id].bssid, ETH_ALEN); + } else if (wpa_s->valid_links) { + wpa_s->wnm_disassoc_mld = true; + os_memcpy(wpa_s->wnm_dissoc_addr, wpa_s->ap_mld_addr, + ETH_ALEN); } else { - os_memcpy(wpa_s->wnm_dissoc_addr, wpa_s->valid_links ? - wpa_s->ap_mld_addr : wpa_s->bssid, ETH_ALEN); + wpa_s->wnm_disassoc_mld = false; + os_memcpy(wpa_s->wnm_dissoc_addr, wpa_s->bssid, ETH_ALEN); } if (disassoc_imminent) { @@ -2066,9 +2071,7 @@ bool wnm_is_bss_excluded(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) * In case disassociation imminent is set, do no try to use a BSS to * which we are connected. */ - if (wpa_s->wnm_link_removal || - !(wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_MLO) || - is_zero_ether_addr(bss->mld_addr)) { + if (!wpa_s->wnm_disassoc_mld) { if (ether_addr_equal(bss->bssid, wpa_s->wnm_dissoc_addr)) return true; } else { diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index e001699ac..7888e7ee9 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -1308,6 +1308,7 @@ struct wpa_supplicant { u8 wnm_num_neighbor_report; u8 wnm_mode; bool wnm_link_removal; + bool wnm_disassoc_mld; u8 wnm_dissoc_addr[ETH_ALEN]; u16 wnm_dissoc_timer; u8 wnm_bss_termination_duration[12];