Search Linux Wireless

Re: [RFC] nl80211: don't require netdev UP for wdev

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

 



Hi Johannes,

Thanks for reviewing.

On Wed, May 9, 2012 at 2:15 AM, Johannes Berg <johannes@xxxxxxxxxxxxxxxx> wrote:
> On Thu, 2012-04-26 at 15:28 -0700, Thomas Pedersen wrote:
>> It seems as long as we have a netdev, a wdev is available as well.
>> Remove the restriction that netdev must be up before a wdev can be
>> obtained in nl80211, or changing channels in cfg80211.
>>
>> Signed-off-by: Thomas Pedersen <thomas@xxxxxxxxxxx>
>>
>> ---
>> Hi list,
>>
>> This was encountered while implementing an interface for setting
>> BSSBasicRateSet in mesh. The wdev->channel is needed in nl80211.c for
>> rate verification, but prior to this patch not available.  This doesn't
>> seem right since the following sequence of commands would fail:
>>
>> iw wlan0 set type mp
>> iw wlan0 set channel n
>> ip link set wlan0 up
>> iw wlan0 mesh join meshid basic-rate 1,2
>>
>> Also, 'iw set channel' is met with an -EBUSY if doing this after the
>> link is up for fixed channel modes (mesh) anyway.
>>
>> Comments? Any idea why this was required initially?
>
>
> I don't think this patch is correct -- mac80211 will get updated even if
> the device isn't even started which will likely cause trouble. Even if
> not though, this all doesn't match any kind of multi-channel concept. We
> treat the channel as part of the temporary setup, e.g. part of the
> association. AP and mesh are the only ones that are different today I
> think.
>
> Overall, I don't think setting the channel & doing mesh setup separately
> is really a good API.
>
> From mac80211's (and other drivers if they existed) POV the channel
> should be given with the mesh_join command, like for IBSS.
>
> Now, obviously, requiring userspace to do that would be an API change.
> We probably don't want that, so I would suggest to change cfg80211 to
> track the channel and then pass it to join_mesh as one of the mesh
> parameters. This could be made work even when somebody attempts to set
> the channel before the interface is up, but we'd have to be careful
> about interface type changes.

Unfortunately, when __nl80211_set_channel() is called we may or may
not have a wdev, so there is nowhere to store the interface-specific
channel and type.
We could shove these into a cfg80211_registered_device, but now just
"last channel for this wiphy" is tracked, and that doesn't seem to
help your multi-channel operation.

If the above is correct, how about we leave the existing API as-is and
simply extend join_mesh to take a channel attribute?

Also, with IBSS the desired channel is pushed to the driver along with
the setup parameters. What do you think about calling
__nl80211_set_channel() directly instead of relying on the cfg80211
driver to handle this?

> We should do the same for AP mode as well, since the channel really
> becomes relevant only upon start_ap(), before that there's no real
> concept of a channel since you don't use it yet anyway.

Thanks,
Thomas
--
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