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