Use estimated throughput to improve roaming selection
Previously, within-ESS roaming was skipped if the selected BSS did not have a higher signal strength than the current BSS regardless of AP capabilities. This could result in not moving to a BSS that would provide higher throughput, e.g., due to larger channel bandwidth or higher rates (HT/VHT MCS). Use estimated throughput information from scan result processing to allow within-ESS roaming if the selected BSS is likely to provide better throughput even if the current BSS has larger RSSI. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
1d747e2a98
commit
0d2030ee20
1 changed files with 14 additions and 4 deletions
|
@ -1223,10 +1223,14 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
|||
|
||||
#ifndef CONFIG_NO_ROAMING
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Considering within-ESS reassociation");
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Current BSS: " MACSTR " level=%d",
|
||||
MAC2STR(current_bss->bssid), current_bss->level);
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Selected BSS: " MACSTR " level=%d",
|
||||
MAC2STR(selected->bssid), selected->level);
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Current BSS: " MACSTR
|
||||
" level=%d snr=%d est_throughput=%u",
|
||||
MAC2STR(current_bss->bssid), current_bss->level,
|
||||
current_bss->snr, current_bss->est_throughput);
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Selected BSS: " MACSTR
|
||||
" level=%d snr=%d est_throughput=%u",
|
||||
MAC2STR(selected->bssid), selected->level,
|
||||
selected->snr, selected->est_throughput);
|
||||
|
||||
if (wpa_s->current_ssid->bssid_set &&
|
||||
os_memcmp(selected->bssid, wpa_s->current_ssid->bssid, ETH_ALEN) ==
|
||||
|
@ -1236,6 +1240,12 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (selected->est_throughput > current_bss->est_throughput + 5000) {
|
||||
wpa_dbg(wpa_s, MSG_DEBUG,
|
||||
"Allow reassociation - selected BSS has better estimated throughput");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (current_bss->level < 0 && current_bss->level > selected->level) {
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Skip roam - Current BSS has better "
|
||||
"signal level");
|
||||
|
|
Loading…
Reference in a new issue