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 <prestwoj@xxxxxxxxx> 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