Search Linux Wireless

Re: [PATCH v3 7/7] cfg80211/mac80211: move combination check to mac80211 for ibss

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2014-02-21 at 09:48 +0100, Johannes Berg wrote:
> On Thu, 2014-02-20 at 16:36 +0200, Luciano Coelho wrote:
> > From: Luciano Coelho <luciano.coelho@xxxxxxxxx>
> > 
> > Now that mac80211 can check the interface combinations itself, move
> > the combinations check from cfg80211 to mac80211 when joining an IBSS.
> 
> > +++ b/net/mac80211/ibss.c
> > @@ -1646,7 +1646,31 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
> >  	u32 changed = 0;
> >  	u32 rate_flags;
> >  	struct ieee80211_supported_band *sband;
> > +	enum ieee80211_chanctx_mode chanmode;
> > +	struct ieee80211_local *local = sdata->local;
> > +	int radar_detect_width;
> >  	int i;
> > +	int ret;
> > +
> > +	radar_detect_width = cfg80211_chandef_dfs_required(local->hw.wiphy,
> > +							   &params->chandef,
> > +							   sdata->vif.type);
> > +	if (radar_detect_width < 0)
> > +		return radar_detect_width;
> > +
> > +	if (radar_detect_width > 0 && !params->userspace_handles_dfs)
> > +		return -EINVAL;
> > +
> > +	chanmode = (params->channel_fixed && !radar_detect_width) ?
> > +		IEEE80211_CHANCTX_SHARED : IEEE80211_CHANCTX_EXCLUSIVE;
> > +
> > +	mutex_lock(&local->chanctx_mtx);
> > +	ret = ieee80211_check_combinations(local->hw.wiphy, &sdata->wdev,
> > +					   &params->chandef, chanmode,
> > +					   radar_detect_width);
> > +	mutex_unlock(&local->chanctx_mtx);
> > +	if (ret < 0)
> > +		return ret;
> 
> Hm, that's a lot of new code just for IBSS. Is there anything that could
> be shared with other pieces of mac80211?

It's some extra code, right, but it's not that complicated and the two
things we do differently than in other parts is something we need to do
between the function calls (ie. we need radar_detect_width).   I think
it would get more complicated to try to change that.  Unless I add some
interface type knowledge into ieee80211_check_combinations(), which I'd
rather not do.

OTOH, as I discussed with Michal earlier, we don't strictly need these
calls here, since we will make the checks again when we actually join
the IBSS, where ieee80211_vif_use_channel() is called.  We need the
second check, because something may have changed in between.  But if
that second check fails, we don't return any error to the userspace, it
will just not work (and probably timeout).

I'll leave it as it is for v4, but I can change as you like and send a
new version later.

--
Luca.

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




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux