Hi,

I was tempted to apply this (sans the feature advertisement part that I
don't think should be in nl80211), but:

> 
> Signed-off-by: James Prestwood <[email protected]>

Please add a commit log.

> +static int ieee80211_can_live_addr_change(struct ieee80211_sub_if_data 
> *sdata)
> +{
> +     if (netif_carrier_ok(sdata->dev))
> +             return -EBUSY;
> +
> +     switch (sdata->vif.type) {
> +     case NL80211_IFTYPE_AP:
> +     case NL80211_IFTYPE_P2P_GO:
> +     case NL80211_IFTYPE_AP_VLAN:
> +     case NL80211_IFTYPE_WDS:
> +     case NL80211_IFTYPE_MESH_POINT:
> +     case NL80211_IFTYPE_MONITOR:
> +     case NL80211_IFTYPE_OCB:
> +             /* No further checking required, when started or UP these
> +              * interface types set carrier
> +              */
> +             break;
> +     case NL80211_IFTYPE_ADHOC:
> +             if (sdata->u.ibss.ssid_len != 0)
> +                     return -EBUSY;

Can you please document why this is there? Maybe all of the conditions,
for that matter.

I'm not even entirely sure it _is_ needed - if we've still not created
the IBSS but are scanning for it or trying to merge the MAC address
won't really matter yet? Probably?

> +             break;
> +     case NL80211_IFTYPE_STATION:
> +     case NL80211_IFTYPE_P2P_CLIENT:
> +             if (!list_empty(&sdata->local->roc_list) ||
> +                                     !sdata->local->scanning)
> +                     return -EBUSY;

AP, mesh and other interfaces *can* scan, so that test should be pulled
out to be generic - but then in fact all of them should probably be
generic - ROC maybe can't be done on other interfaces yet, but unless
you're going to check *which* interface is actually doing the ROC, you
should just make that a generic check that applies to all interfaces.

If you do care about this being more granular then you should check
*which* interface is scanning, and then you can still switch the MAC
address for *other* interfaces - but I'd still argue it should be
independent of interface type.

And, I'm confused, but isn't the polarity of the scanning check wrong?

johannes

Reply via email to