Use the link BSSID to resolve current BSS for whether to roam check
Otherwise any new scan result (even manual ones if they do not set use_id=X to a non-zero value), can cause a reconnect to the same BSS when MLO is used. This is because the current BSS is not detected by wpa_supplicant_need_to_roam() and it assumes that roaming is needed. Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
This commit is contained in:
parent
c4dac077bc
commit
1b9006a8cb
1 changed files with 8 additions and 2 deletions
|
@ -2304,6 +2304,7 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid)
|
struct wpa_ssid *ssid)
|
||||||
{
|
{
|
||||||
struct wpa_bss *current_bss = NULL;
|
struct wpa_bss *current_bss = NULL;
|
||||||
|
const u8 *bssid;
|
||||||
|
|
||||||
if (wpa_s->reassociate)
|
if (wpa_s->reassociate)
|
||||||
return 1; /* explicit request to reassociate */
|
return 1; /* explicit request to reassociate */
|
||||||
|
@ -2317,12 +2318,17 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
||||||
if (wpas_driver_bss_selection(wpa_s))
|
if (wpas_driver_bss_selection(wpa_s))
|
||||||
return 0; /* Driver-based roaming */
|
return 0; /* Driver-based roaming */
|
||||||
|
|
||||||
|
if (wpa_s->valid_links)
|
||||||
|
bssid = wpa_s->links[wpa_s->mlo_assoc_link_id].bssid;
|
||||||
|
else
|
||||||
|
bssid = wpa_s->bssid;
|
||||||
|
|
||||||
if (wpa_s->current_ssid->ssid)
|
if (wpa_s->current_ssid->ssid)
|
||||||
current_bss = wpa_bss_get(wpa_s, wpa_s->bssid,
|
current_bss = wpa_bss_get(wpa_s, bssid,
|
||||||
wpa_s->current_ssid->ssid,
|
wpa_s->current_ssid->ssid,
|
||||||
wpa_s->current_ssid->ssid_len);
|
wpa_s->current_ssid->ssid_len);
|
||||||
if (!current_bss)
|
if (!current_bss)
|
||||||
current_bss = wpa_bss_get_bssid(wpa_s, wpa_s->bssid);
|
current_bss = wpa_bss_get_bssid(wpa_s, bssid);
|
||||||
|
|
||||||
if (!current_bss)
|
if (!current_bss)
|
||||||
return 1; /* current BSS not seen in scan results */
|
return 1; /* current BSS not seen in scan results */
|
||||||
|
|
Loading…
Add table
Reference in a new issue