cfg80211/mac80211: move wext SIWMLME into cfg80211
Since we have ->deauth and ->disassoc we can support the wext SIWMLME call directly without driver wext handlers. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
d726405af6
commit
691597cb26
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <linux/wireless.h>
|
||||
#include <linux/nl80211.h>
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/iw_handler.h>
|
||||
#include <net/wireless.h>
|
||||
#include <net/cfg80211.h>
|
||||
@@ -206,7 +207,6 @@ int cfg80211_wext_giwrange(struct net_device *dev,
|
||||
range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
|
||||
IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
|
||||
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band ++) {
|
||||
int i;
|
||||
struct ieee80211_supported_band *sband;
|
||||
@@ -241,3 +241,47 @@ int cfg80211_wext_giwrange(struct net_device *dev,
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_wext_giwrange);
|
||||
|
||||
int cfg80211_wext_siwmlme(struct net_device *dev,
|
||||
struct iw_request_info *info,
|
||||
struct iw_point *data, char *extra)
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct iw_mlme *mlme = (struct iw_mlme *)extra;
|
||||
struct cfg80211_registered_device *rdev;
|
||||
union {
|
||||
struct cfg80211_disassoc_request disassoc;
|
||||
struct cfg80211_deauth_request deauth;
|
||||
} cmd;
|
||||
|
||||
if (!wdev)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rdev = wiphy_to_dev(wdev->wiphy);
|
||||
|
||||
if (wdev->iftype != NL80211_IFTYPE_STATION)
|
||||
return -EINVAL;
|
||||
|
||||
if (mlme->addr.sa_family != ARPHRD_ETHER)
|
||||
return -EINVAL;
|
||||
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
|
||||
switch (mlme->cmd) {
|
||||
case IW_MLME_DEAUTH:
|
||||
if (!rdev->ops->deauth)
|
||||
return -EOPNOTSUPP;
|
||||
cmd.deauth.peer_addr = mlme->addr.sa_data;
|
||||
cmd.deauth.reason_code = mlme->reason_code;
|
||||
return rdev->ops->deauth(wdev->wiphy, dev, &cmd.deauth);
|
||||
case IW_MLME_DISASSOC:
|
||||
if (!rdev->ops->disassoc)
|
||||
return -EOPNOTSUPP;
|
||||
cmd.disassoc.peer_addr = mlme->addr.sa_data;
|
||||
cmd.disassoc.reason_code = mlme->reason_code;
|
||||
return rdev->ops->disassoc(wdev->wiphy, dev, &cmd.disassoc);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_wext_siwmlme);
|
||||
|
Reference in New Issue
Block a user