[PATCH 08/16] WNM: Move driver MBO transition rejection into wnm_is_bss_excluded

Benjamin Berg benjamin at sipsolutions.net
Mon Aug 5 10:41:14 PDT 2024


Hi,

looks like I initially only replied in private by accident.

On Fri, 2024-08-02 at 13:30 +0300, Jouni Malinen wrote:
> On Mon, Apr 29, 2024 at 01:51:49PM +0200, benjamin at sipsolutions.net wrote:
> > Change the logic a bit to not directly use the result of the
> > wpa_drv_get_bss_trans_status call and instead use the same selection
> > logic as usual but taking into account the driver rejections.
> > 
> > This changes the logic in minor ways. The main change is that this
> > aligns the ordering of BSSs to be identical in all cases. More
> > precisely, we'll select the best BSS as found by find_better_target.
> > 
> > Beyond that, it also means that in the case of an non-abridged BTM
> > request we'll also consider candidates that were found through the scan
> > and not in the neighbor report. In this case, the driver will not have a
> > chance to reject them.
> 
> This feels a bit scary especially if the updated design has not actually
> been tested with a driver that uses the driver-based mechanism for
> updating candidate lists (which I'm assuming has not been done here).

Yes, it is a bit scary. Honestly, I am not able to test the code. Maybe
I missed it, but I didn't even find a driver that provides the nl80211
API.

> And there is something strange here:
> 
> > diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
> >  #ifdef CONFIG_MBO
> > -static struct wpa_bss *
> > -get_mbo_transition_candidate(struct wpa_supplicant *wpa_s,
> > +static void
> > +fetch_drv_mbo_candidate_info(struct wpa_supplicant *wpa_s,
> >  			     enum mbo_transition_reject_reason *reason)
> >  {
> 
> > +		if (nei->preference_present && nei->preference == 0)
> >  			continue;
> > +
> > +		/* FIXME: Should we go through wpa_scan_res_match? */
> 
> Well, that is not the strange part, but again, something that makes me
> unhappy about applying this without full testing.
> 
> > +#else
> > +static void
> > +fetch_drv_mbo_transition_candidate_info(struct wpa_supplicant *wpa_s)
> > +{
> >  }
> >  #endif /* CONFIG_MBO */
> 
> That is the strange part.. What was that supposed to be? That same
> function with empty payload? Now the function name is different and so
> is the list of arguments. This would obviously not work without
> CONFIG_MBO defined.

Oops, yep, looks like I messed up the function rename and such.

> If this is just to skip the functionality within the function, defining
> the function once with the actually body within #ifdef CONFIG_MBO would
> be much cleaner.

Sure, that makes sense!

Benjamin



More information about the Hostap mailing list