wpa_supplicant_select_bss error?

Kurt Bodiker kurt.bodiker at braintrust-holdings.com
Mon Dec 16 11:07:12 EST 2013


I have a similar (if not the same) issue where the AP list is not sorted.
Additionally, the value for the current AP (when using hidden SSIDs) is
never updated on subsequent scans.

Kurt


On Mon, Dec 16, 2013 at 11:03 AM, Dan Williams <dcbw at redhat.com> wrote:

> On Sun, 2013-12-15 at 21:53 +1100, a.brooks2 at marathon-targets.com wrote:
> > Hi,
> >
> > I've been trying to track down why a client seems to connect to the
> > (significantly) weaker of two access-points with identical SSIDs, and
> > refuses to roam to the stronger one subsequently.
> >
> > I think there might be an error in wpa_supplicant_select_bss:
>
> Scan results are sorted when they arrive from the driver in
> wpa_supplicant_get_scan_results() using the wpa_scan_result_compar()
> function, a huge component of which is signal strength.  Thus, when
> wpa_supplicant_select_bss() returns the first matching AP, it should
> already be the best AP because the AP list has been sorted.
>
> So I would concentrate your debugging on that function, and find out why
> it decides your "better" AP is less usable than your "worse" AP.
>
> Dan
>
> > static struct wpa_bss *
> > wpa_supplicant_select_bss(struct wpa_supplicant *wpa_s,
> >                struct wpa_ssid *group,
> >                struct wpa_ssid **selected_ssid)
> > {
> >      unsigned int i;
> >
> >      wpa_dbg(wpa_s, MSG_DEBUG, "Selecting BSS from priority group %d",
> >          group->priority);
> >
> >      for (i = 0; i < wpa_s->last_scan_res_used; i++) {
> >          struct wpa_bss *bss = wpa_s->last_scan_res[i];
> >          *selected_ssid = wpa_scan_res_match(wpa_s, i, bss, group);
> >          if (!*selected_ssid)
> >              continue;
> >          wpa_dbg(wpa_s, MSG_DEBUG, "   selected BSS " MACSTR
> >              " ssid='%s'",
> >              MAC2STR(bss->bssid),
> >              wpa_ssid_txt(bss->ssid, bss->ssid_len));
> >          return bss;
> >      }
> >
> >      return NULL;
> > }
> >
> >
> > The loop returns on the first BSS it finds with the appropriate ssid.
> > So the results depend on the order of the scan results.
> > In my case I have a client which happens to list the weaker BSS first,
> > so it does the wrong thing.
> >
> > I think this loop should find the best BSS instead.  I made this change
> > and now my client happily connects to the correct BSS, and roams
> > appropriately.
> >
> > I can submit a patch but thought I'd ask the question first (this code
> > seems to have been around for a while so I'm surprised no-one has found
> > it if it is in fact a bug), let me know.
> >
> >
> >
> > Cheers,
> >
> > Alex
> > _______________________________________________
> > HostAP mailing list
> > HostAP at lists.shmoo.com
> > http://lists.shmoo.com/mailman/listinfo/hostap
>
>
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.shmoo.com/pipermail/hostap/attachments/20131216/718bc372/attachment.htm>


More information about the HostAP mailing list