On Wed, 2016-02-17 at 11:47 +0100, Arend van Spriel wrote:
> 
> + * @NL80211_ATTR_BSS_SELECT: nested attribute for driver supporting the
> + *   BSS selection feature. When used with %NL80211_CMD_GET_WIPHY it contains
> + *   NLA_FLAG type according &enum nl80211_bss_select_attr to indicate what
> + *   BSS selection behaviours are supported. When used with 
> %NL80211_CMD_CONNECT
> + *   it contains the behaviour and parameters for BSS selection to be done by
> + *   driver and/or firmware.

Maybe we should be less specific here regarding the NLA_FLAG and say
that it will contain attributes for each, indicating which behaviours
are supported, and say there's behaviour-dependent data inside each of
those attributes?

It seems entirely plausible that future behaviours would require their
own sub-capabilities; perhaps that's even the case today for having an
adjustment range for example, not that I think it's really necessary
now.

> @@ -3617,6 +3624,7 @@ enum nl80211_band {
>       NL80211_BAND_2GHZ,
>       NL80211_BAND_5GHZ,
>       NL80211_BAND_60GHZ,
> +     NUM_NL80211_BAND,

You should use IEEE80211_NUM_BANDS and remove this.

> +static bool is_band_valid(struct wiphy *wiphy, enum nl80211_band b)
> +{
> +     return b < NUM_NL80211_BAND && wiphy->bands[b];
> +}

Here.

> +static int parse_bss_select(struct nlattr *nla, struct wiphy *wiphy,
> +                         struct cfg80211_bss_selection
> *bss_select)
> +{
> +     struct nlattr *attr[NL80211_BSS_SELECT_ATTR_MAX + 1];
> +     struct nlattr *nest;
> +     int err;
> +     bool found = false;
> +     int i;
> +
> +     /* only process one nested attribute */
> +     nest = nla_data(nla);
> +     if (!nla_ok(nest, nla_len(nest)))
> +             return -EBADF;

This isn't quite clear to me. Shouldn't you do this by declaring it
NLA_TESTED in the nl80211_policy?

Actually, not really? you use nla_ok() on the inner (without having
checked at all that it's even long enough btw, since you didn't do the
policy change), but that would already be done by nla_parse() below?

What are you trying to do here?

Regardless of that, EBADF seems like a bad error number.

> +     err = nla_parse(attr, NL80211_BSS_SELECT_ATTR_MAX,
> nla_data(nest),
> +                     nla_len(nest), nl80211_bss_select_policy);
> +     if (err)
> +             return err;
> +
> +     /* only one attribute may be given */
> +     for (i = 0; i <= NL80211_BSS_SELECT_ATTR_MAX; i++)
> +             if (attr[i]) {
> +                     if (found)
> +                             return -EINVAL;
> +                     found = true;
> +             }

I'd kinda prefer braces, but maybe that's just me. Surely not a
blocking issue :)

johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to