Commit 43b19952 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

nl80211: use new genl helpers for WDS

Bill Jordan's patch to allow setting the WDS
peer crossed with my patch removing all the
boilerplate code in nl80211, and consequently
he didn't make use of it yet. Fix that.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7b99a7c2
...@@ -876,48 +876,25 @@ static int nl80211_set_channel(struct sk_buff *skb, struct genl_info *info) ...@@ -876,48 +876,25 @@ static int nl80211_set_channel(struct sk_buff *skb, struct genl_info *info)
static int nl80211_set_wds_peer(struct sk_buff *skb, struct genl_info *info) static int nl80211_set_wds_peer(struct sk_buff *skb, struct genl_info *info)
{ {
struct cfg80211_registered_device *rdev; struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct wireless_dev *wdev; struct net_device *dev = info->user_ptr[1];
struct net_device *dev; struct wireless_dev *wdev = dev->ieee80211_ptr;
u8 *bssid; u8 *bssid;
int err;
if (!info->attrs[NL80211_ATTR_MAC]) if (!info->attrs[NL80211_ATTR_MAC])
return -EINVAL; return -EINVAL;
rtnl_lock(); if (netif_running(dev))
return -EBUSY;
err = get_rdev_dev_by_info_ifindex(info, &rdev, &dev);
if (err)
goto unlock_rtnl;
wdev = dev->ieee80211_ptr;
if (netif_running(dev)) {
err = -EBUSY;
goto out;
}
if (!rdev->ops->set_wds_peer) { if (!rdev->ops->set_wds_peer)
err = -EOPNOTSUPP; return -EOPNOTSUPP;
goto out;
}
if (wdev->iftype != NL80211_IFTYPE_WDS) { if (wdev->iftype != NL80211_IFTYPE_WDS)
err = -EOPNOTSUPP; return -EOPNOTSUPP;
goto out;
}
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
err = rdev->ops->set_wds_peer(wdev->wiphy, dev, bssid); return rdev->ops->set_wds_peer(wdev->wiphy, dev, bssid);
out:
cfg80211_unlock_rdev(rdev);
dev_put(dev);
unlock_rtnl:
rtnl_unlock();
return err;
} }
...@@ -4860,6 +4837,8 @@ static struct genl_ops nl80211_ops[] = { ...@@ -4860,6 +4837,8 @@ static struct genl_ops nl80211_ops[] = {
.doit = nl80211_set_wds_peer, .doit = nl80211_set_wds_peer,
.policy = nl80211_policy, .policy = nl80211_policy,
.flags = GENL_ADMIN_PERM, .flags = GENL_ADMIN_PERM,
.internal_flags = NL80211_FLAG_NEED_NETDEV |
NL80211_FLAG_NEED_RTNL,
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment