diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-09-16 22:22:09 +0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-09-25 00:18:00 +0400 |
commit | 723b038def23ce0606754c4f598cbb96bae9a102 (patch) | |
tree | 36193970f99db75c57bf7595bc8d7911c624b8b2 /net/wireless | |
parent | 60719ffd721f6764b7d07ca188c0d944a4330b69 (diff) | |
download | linux-723b038def23ce0606754c4f598cbb96bae9a102.tar.xz |
cfg80211: allow set_interface without type
Which then causes no type change.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 44771a690d53..a745932d1370 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -422,19 +422,20 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) memset(¶ms, 0, sizeof(params)); - if (info->attrs[NL80211_ATTR_IFTYPE]) { - type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); - if (type > NL80211_IFTYPE_MAX) - return -EINVAL; - } else - return -EINVAL; - err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev); if (err) return err; ifindex = dev->ifindex; + type = dev->ieee80211_ptr->iftype; dev_put(dev); + err = -EINVAL; + if (info->attrs[NL80211_ATTR_IFTYPE]) { + type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); + if (type > NL80211_IFTYPE_MAX) + goto unlock; + } + if (!drv->ops->change_virtual_intf || !(drv->wiphy.interface_modes & (1 << type))) { err = -EOPNOTSUPP; |