diff options
Diffstat (limited to 'net/mac80211/wext.c')
-rw-r--r-- | net/mac80211/wext.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 935c63ed3dfa..deb4ecec122a 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
@@ -129,14 +129,12 @@ static int ieee80211_ioctl_siwgenie(struct net_device *dev, | |||
129 | 129 | ||
130 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 130 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
131 | 131 | ||
132 | if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) | ||
133 | return -EOPNOTSUPP; | ||
134 | |||
135 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { | 132 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { |
136 | int ret = ieee80211_sta_set_extra_ie(sdata, extra, data->length); | 133 | int ret = ieee80211_sta_set_extra_ie(sdata, extra, data->length); |
137 | if (ret) | 134 | if (ret) |
138 | return ret; | 135 | return ret; |
139 | sdata->u.mgd.flags &= ~IEEE80211_STA_AUTO_BSSID_SEL; | 136 | sdata->u.mgd.flags &= ~IEEE80211_STA_AUTO_BSSID_SEL; |
137 | sdata->u.mgd.flags &= ~IEEE80211_STA_EXT_SME; | ||
140 | ieee80211_sta_req_auth(sdata); | 138 | ieee80211_sta_req_auth(sdata); |
141 | return 0; | 139 | return 0; |
142 | } | 140 | } |
@@ -207,14 +205,6 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev, | |||
207 | 205 | ||
208 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 206 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
209 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { | 207 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { |
210 | if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) { | ||
211 | if (len > IEEE80211_MAX_SSID_LEN) | ||
212 | return -EINVAL; | ||
213 | memcpy(sdata->u.mgd.ssid, ssid, len); | ||
214 | sdata->u.mgd.ssid_len = len; | ||
215 | return 0; | ||
216 | } | ||
217 | |||
218 | if (data->flags) | 208 | if (data->flags) |
219 | sdata->u.mgd.flags &= ~IEEE80211_STA_AUTO_SSID_SEL; | 209 | sdata->u.mgd.flags &= ~IEEE80211_STA_AUTO_SSID_SEL; |
220 | else | 210 | else |
@@ -224,6 +214,7 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev, | |||
224 | if (ret) | 214 | if (ret) |
225 | return ret; | 215 | return ret; |
226 | 216 | ||
217 | sdata->u.mgd.flags &= ~IEEE80211_STA_EXT_SME; | ||
227 | ieee80211_sta_req_auth(sdata); | 218 | ieee80211_sta_req_auth(sdata); |
228 | return 0; | 219 | return 0; |
229 | } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) | 220 | } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) |
@@ -272,11 +263,7 @@ static int ieee80211_ioctl_siwap(struct net_device *dev, | |||
272 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 263 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
273 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { | 264 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { |
274 | int ret; | 265 | int ret; |
275 | if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) { | 266 | |
276 | memcpy(sdata->u.mgd.bssid, (u8 *) &ap_addr->sa_data, | ||
277 | ETH_ALEN); | ||
278 | return 0; | ||
279 | } | ||
280 | if (is_zero_ether_addr((u8 *) &ap_addr->sa_data)) | 267 | if (is_zero_ether_addr((u8 *) &ap_addr->sa_data)) |
281 | sdata->u.mgd.flags |= IEEE80211_STA_AUTO_BSSID_SEL | | 268 | sdata->u.mgd.flags |= IEEE80211_STA_AUTO_BSSID_SEL | |
282 | IEEE80211_STA_AUTO_CHANNEL_SEL; | 269 | IEEE80211_STA_AUTO_CHANNEL_SEL; |
@@ -287,6 +274,7 @@ static int ieee80211_ioctl_siwap(struct net_device *dev, | |||
287 | ret = ieee80211_sta_set_bssid(sdata, (u8 *) &ap_addr->sa_data); | 274 | ret = ieee80211_sta_set_bssid(sdata, (u8 *) &ap_addr->sa_data); |
288 | if (ret) | 275 | if (ret) |
289 | return ret; | 276 | return ret; |
277 | sdata->u.mgd.flags &= ~IEEE80211_STA_EXT_SME; | ||
290 | ieee80211_sta_req_auth(sdata); | 278 | ieee80211_sta_req_auth(sdata); |
291 | return 0; | 279 | return 0; |
292 | } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { | 280 | } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { |
@@ -630,7 +618,7 @@ static int ieee80211_ioctl_siwencode(struct net_device *dev, | |||
630 | struct ieee80211_sub_if_data *sdata; | 618 | struct ieee80211_sub_if_data *sdata; |
631 | int idx, i, alg = ALG_WEP; | 619 | int idx, i, alg = ALG_WEP; |
632 | u8 bcaddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; | 620 | u8 bcaddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; |
633 | int remove = 0; | 621 | int remove = 0, ret; |
634 | 622 | ||
635 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 623 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
636 | 624 | ||
@@ -656,11 +644,20 @@ static int ieee80211_ioctl_siwencode(struct net_device *dev, | |||
656 | return 0; | 644 | return 0; |
657 | } | 645 | } |
658 | 646 | ||
659 | return ieee80211_set_encryption( | 647 | ret = ieee80211_set_encryption( |
660 | sdata, bcaddr, | 648 | sdata, bcaddr, |
661 | idx, alg, remove, | 649 | idx, alg, remove, |
662 | !sdata->default_key, | 650 | !sdata->default_key, |
663 | keybuf, erq->length); | 651 | keybuf, erq->length); |
652 | |||
653 | if (!ret) { | ||
654 | if (remove) | ||
655 | sdata->u.mgd.flags &= ~IEEE80211_STA_TKIP_WEP_USED; | ||
656 | else | ||
657 | sdata->u.mgd.flags |= IEEE80211_STA_TKIP_WEP_USED; | ||
658 | } | ||
659 | |||
660 | return ret; | ||
664 | } | 661 | } |
665 | 662 | ||
666 | 663 | ||