Message ID | 1410445822-6559-5-git-send-email-rostislav.lisovy@fel.cvut.cz (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Thu, 2014-09-11 at 16:30 +0200, Rostislav Lisovy wrote: > Signed-off-by: Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz> same comment about commit log here - also this patch should either go first in the series, or just be squashed with the cfg80211 patch, there's no real need to distinguish between the two. I guess it can't be first, so best just squash it. I think you can also squash patches 1 and 2, since 2 is so small. > --- > include/uapi/linux/nl80211.h | 8 ++++++++ > net/wireless/nl80211.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 55 insertions(+) > > diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h > index cdf9ba4..4b39455 100644 > --- a/include/uapi/linux/nl80211.h > +++ b/include/uapi/linux/nl80211.h > @@ -544,6 +544,11 @@ > * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the > * network is determined by the network interface. > * > + * @NL80211_CMD_JOIN_OCB: Join the OCB network. The center frequency and > + * bandwidth of a channel must be given. > + * @NL80211_CMD_LEAVE_OCB: Leave the OCB network -- no special arguments, the > + * network is determined by the network interface. > + * > * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame > * notification. This event is used to indicate that an unprotected > * deauthentication frame was dropped when MFP is in use. > @@ -833,6 +838,9 @@ enum nl80211_commands { > NL80211_CMD_JOIN_MESH, > NL80211_CMD_LEAVE_MESH, > > + NL80211_CMD_JOIN_OCB, > + NL80211_CMD_LEAVE_OCB, > + > NL80211_CMD_UNPROT_DEAUTHENTICATE, > NL80211_CMD_UNPROT_DISASSOCIATE, No no, you really really really can't add anything in the middle of this enum. The's a comments at the top of it explaining why :) > diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c > index cf178d2..bfbb54d 100644 > --- a/net/wireless/nl80211.c > +++ b/net/wireless/nl80211.c > @@ -1876,6 +1876,7 @@ static bool nl80211_can_set_dev_channel(struct wireless_dev *wdev) > * operation to set the monitor channel if possible. > */ > return !wdev || > + wdev->iftype == NL80211_IFTYPE_OCB || > wdev->iftype == NL80211_IFTYPE_AP || > wdev->iftype == NL80211_IFTYPE_MESH_POINT || > wdev->iftype == NL80211_IFTYPE_MONITOR || I don't think this is right - join() handles the channel setting. > @@ -2307,6 +2308,8 @@ static int nl80211_send_chandef(struct sk_buff *msg, > chandef->chan->center_freq)) > return -ENOBUFS; > switch (chandef->width) { > + case NL80211_CHAN_WIDTH_5: > + case NL80211_CHAN_WIDTH_10: This is also wrong, just like the cfg80211.h change in the other patch, since the NL80211_ATTR_WIPHY_CHANNEL_TYPE cannot encode 5/10 MHz. You need to remove both changes. > +static int nl80211_join_ocb(struct sk_buff *skb, struct genl_info *info) > +{ > + struct cfg80211_registered_device *rdev = info->user_ptr[0]; > + struct net_device *dev = info->user_ptr[1]; > + struct ocb_setup setup; > + int err; > + > + /* start with default */ > + memset(&setup, 0x0, sizeof(setup)); struct ocb_setup setup = {}; Would be an easier way to generate the same code. IMHO no comment is needed. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index cdf9ba4..4b39455 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -544,6 +544,11 @@ * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the * network is determined by the network interface. * + * @NL80211_CMD_JOIN_OCB: Join the OCB network. The center frequency and + * bandwidth of a channel must be given. + * @NL80211_CMD_LEAVE_OCB: Leave the OCB network -- no special arguments, the + * network is determined by the network interface. + * * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame * notification. This event is used to indicate that an unprotected * deauthentication frame was dropped when MFP is in use. @@ -833,6 +838,9 @@ enum nl80211_commands { NL80211_CMD_JOIN_MESH, NL80211_CMD_LEAVE_MESH, + NL80211_CMD_JOIN_OCB, + NL80211_CMD_LEAVE_OCB, + NL80211_CMD_UNPROT_DEAUTHENTICATE, NL80211_CMD_UNPROT_DISASSOCIATE, diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index cf178d2..bfbb54d 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1876,6 +1876,7 @@ static bool nl80211_can_set_dev_channel(struct wireless_dev *wdev) * operation to set the monitor channel if possible. */ return !wdev || + wdev->iftype == NL80211_IFTYPE_OCB || wdev->iftype == NL80211_IFTYPE_AP || wdev->iftype == NL80211_IFTYPE_MESH_POINT || wdev->iftype == NL80211_IFTYPE_MONITOR || @@ -2307,6 +2308,8 @@ static int nl80211_send_chandef(struct sk_buff *msg, chandef->chan->center_freq)) return -ENOBUFS; switch (chandef->width) { + case NL80211_CHAN_WIDTH_5: + case NL80211_CHAN_WIDTH_10: case NL80211_CHAN_WIDTH_20_NOHT: case NL80211_CHAN_WIDTH_20: case NL80211_CHAN_WIDTH_40: @@ -8118,6 +8121,34 @@ static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info) return -EINVAL; } +static int nl80211_join_ocb(struct sk_buff *skb, struct genl_info *info) +{ + struct cfg80211_registered_device *rdev = info->user_ptr[0]; + struct net_device *dev = info->user_ptr[1]; + struct ocb_setup setup; + int err; + + /* start with default */ + memset(&setup, 0x0, sizeof(setup)); + + if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) + return -EINVAL; + + err = nl80211_parse_chandef(rdev, info, &setup.chandef); + if (err) + return err; + + return cfg80211_join_ocb(rdev, dev, &setup); +} + +static int nl80211_leave_ocb(struct sk_buff *skb, struct genl_info *info) +{ + struct cfg80211_registered_device *rdev = info->user_ptr[0]; + struct net_device *dev = info->user_ptr[1]; + + return cfg80211_leave_ocb(rdev, dev); +} + static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev = info->user_ptr[0]; @@ -9952,6 +9983,22 @@ static const struct genl_ops nl80211_ops[] = { .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | NL80211_FLAG_NEED_RTNL, }, + { + .cmd = NL80211_CMD_JOIN_OCB, + .doit = nl80211_join_ocb, + .policy = nl80211_policy, + .flags = GENL_ADMIN_PERM, + .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | + NL80211_FLAG_NEED_RTNL, + }, + { + .cmd = NL80211_CMD_LEAVE_OCB, + .doit = nl80211_leave_ocb, + .policy = nl80211_policy, + .flags = GENL_ADMIN_PERM, + .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | + NL80211_FLAG_NEED_RTNL, + }, #ifdef CONFIG_PM { .cmd = NL80211_CMD_GET_WOWLAN,
Signed-off-by: Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz> --- include/uapi/linux/nl80211.h | 8 ++++++++ net/wireless/nl80211.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+)