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 <matthieux.mauger@intel.com>
This commit is contained in:
Matthieu Mauger 2015-02-17 21:35:15 -05:00 committed by Jouni Malinen
parent f1609f119a
commit 71d77adb6d
2 changed files with 8 additions and 0 deletions

View file

@ -137,4 +137,10 @@ static inline int bss_is_dmg(const struct wpa_bss *bss)
return bss->freq > 45000; 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 */ #endif /* BSS_H */

View file

@ -3431,6 +3431,8 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
data->signal_change.current_signal, data->signal_change.current_signal,
data->signal_change.current_noise, data->signal_change.current_noise,
data->signal_change.current_txrate); data->signal_change.current_txrate);
wpa_bss_update_level(wpa_s->current_bss,
data->signal_change.current_signal);
bgscan_notify_signal_change( bgscan_notify_signal_change(
wpa_s, data->signal_change.above_threshold, wpa_s, data->signal_change.above_threshold,
data->signal_change.current_signal, data->signal_change.current_signal,