> > On Fri, Dec 06, 2019 at 02:27:47PM -0800, Matthew Wang wrote: > > We saw that on certain platforms in certain places we keep switching > > between two APs and eventually get the same RSSI. > > Debugging showed that we have a very big difference between the two > > antennas. > > > > Ant A can hear AP A very well (-60) but AP B very bad (-80) Ant B can > > hear AP B very well (-60) but AP A very bad (-80) > > > > When the device associates to AP A, it'll learn to use Ant A. > > If the device uses one single antenna to receive the scan results, it > > may hear the AP it is currently associated to on the second antenna > > and get bad results. Because of that, the wpa_supplicant will roam to > > the other AP and the same scenario will repeat itself: > > > > Association to AP A (Ant A reports -60). > > Scan on Ant A: AP A: -60, AP B: -80 > > Scan on Ant B: AP A: -80, AP A: -60 ==> ROAM. > > > > Association to AP B (Ant B reports -60) Scan on Ant A: AP A: -60, AP > > B: -80 ==> ROAM > > > > Etc... > > > > Fix this by querying the signal of the current AP using > > drv_signal_poll() instead of relying on the signal that we get from > > the scan results. > > Thanks, applied with some cleanup. > > > diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c > > +static int wpas_get_snr_signal_info(const struct wpa_signal_info *si) > > +{ > > + int noise = IS_5GHZ(si->frequency) ? > > + DEFAULT_NOISE_FLOOR_5GHZ : > > + DEFAULT_NOISE_FLOOR_2GHZ; > > + > > + /* > > + * Since we take the average beacon signal, we can't use > > + * the current noise measurement (average vs. snapshot), > > + * so use the default values instead. > > + */ > > + return si->avg_beacon_signal - noise; } > > This use of hardcoded default values resulted in significant increase in > undesired roaming in my test setup since the driver-reported noise floor was > about 5 dB lower than the hardcoded values and that resulted in the current > BSS being seen as significantly worse than another BSS that had the same > signal level. That comment does not sound correct either since the noise > floor from the driver is likely to be from some kind of calibration operation > and not an instant snapshot. As such, I applied another change to use the > noise floor value from the driver, if available, and use those default values > only if the driver does not report a noise floor value. > Fine by me. I have to say that I can't remember all the details, but I do seem to remember that our device doesn't support the SURVEY command which means that I couldn't check that on our devices. Thanks for fixing this! _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap