problems with reassociation decisions / scan results table

Kurt Bodiker kurt.bodiker at braintrust-holdings.com
Wed Jan 8 13:06:00 EST 2014


All of our APs are configured with the same, hidden SSID. A probe
response from the current AP is never updated on subsequent scans once
a connection with the AP is made. This leads to the case where a
reassociation with an AP that has better signal strength is not made
because the comparison between current_bss->level and
selected_bss->level in events.c is made against old data.

I'm not sure the best place to fix this. What I did was modify the
bgscan_simple_notify_scan() method in bgscan_simple.c by bringing in
the wpa_signal_info structure, which contains the current power
levels, and overwriting the value containined in
wpa_s->current_bss->level. Here is what I added:
    187 // adding this to manipulate current_bss->level
    188         struct wpa_signal_info si;
    189         int ret;
    190         ret = wpa_drv_signal_poll(wpa_s, &si);
    191         if (ret)
    192                 return -1;      //rethink value we are
returning if we keep si
    193
    194         wpa_s->current_bss->level = si.current_signal;
    195 // done

I know this only works if the supplicant is using bgscan:simple, but
it keeps the scan_results table updated whenever a scan is done and
reassociation decisions are made on updated data. I know there has to
be a more upstream place to make the change, I just can't find it.

I am currently running a compiled wpa_supplicant from the git
repository, 0fab9ce, but I have seen this behavior in previous
versions, so nothing new.

Kurt


More information about the HostAP mailing list