From 71d77adb6db42db3e59537a28ad366d179284a78 Mon Sep 17 00:00:00 2001 From: Matthieu Mauger Date: Tue, 17 Feb 2015 21:35:15 -0500 Subject: [PATCH] Update current BSS level when signal change event occurs When an EVENT_SIGNAL_CHANGE occurs the bgscan is informed about this change but the new RSSI value is not stored. In consequence, when roaming candidates are evaluated, the RSSI value of the current BSS used to compare is an old one obtained during the last scan rather than the new one given by the signal change event. This leads sometimes to bad decision when selecting a new BSS for roaming. This patch solves the issue by updating the current BSS level when receiving a signal change event in order to have a very up-to-date current signal value when choosing an new BSS. Signed-off-by: Matthieu Mauger --- wpa_supplicant/bss.h | 6 ++++++ wpa_supplicant/events.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h index cc01b0044..1a603f687 100644 --- a/wpa_supplicant/bss.h +++ b/wpa_supplicant/bss.h @@ -137,4 +137,10 @@ static inline int bss_is_dmg(const struct wpa_bss *bss) return bss->freq > 45000; } +static inline void wpa_bss_update_level(struct wpa_bss *bss, int new_level) +{ + if (bss != NULL && new_level < 0) + bss->level = new_level; +} + #endif /* BSS_H */ diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 72a736833..d67365f89 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -3431,6 +3431,8 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, data->signal_change.current_signal, data->signal_change.current_noise, data->signal_change.current_txrate); + wpa_bss_update_level(wpa_s->current_bss, + data->signal_change.current_signal); bgscan_notify_signal_change( wpa_s, data->signal_change.above_threshold, data->signal_change.current_signal,