Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a1771e8 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

[PATCH] softmac: add SIOCSIWMLME



This patch adds the SIOCSIWMLME wext to softmac, this functionality
appears to be used by wpa_supplicant and is softmac-specific.

Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Cc: Jouni Malinen <jkm@devicescape.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e3c5a64e
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -91,4 +91,9 @@ ieee80211softmac_wx_get_genie(struct net_device *dev,
			      struct iw_request_info *info,
			      struct iw_request_info *info,
			      union iwreq_data *wrqu,
			      union iwreq_data *wrqu,
			      char *extra);
			      char *extra);
extern int
ieee80211softmac_wx_set_mlme(struct net_device *dev,
			     struct iw_request_info *info,
			     union iwreq_data *wrqu,
			     char *extra);
#endif /* _IEEE80211SOFTMAC_WX */
#endif /* _IEEE80211SOFTMAC_WX */
+1 −1
Original line number Original line Diff line number Diff line
@@ -82,7 +82,7 @@ ieee80211softmac_assoc_timeout(void *d)
}
}


/* Sends out a disassociation request to the desired AP */
/* Sends out a disassociation request to the desired AP */
static void
void
ieee80211softmac_disassoc(struct ieee80211softmac_device *mac, u16 reason)
ieee80211softmac_disassoc(struct ieee80211softmac_device *mac, u16 reason)
{
{
	unsigned long flags;
	unsigned long flags;
+1 −0
Original line number Original line Diff line number Diff line
@@ -150,6 +150,7 @@ int ieee80211softmac_handle_disassoc(struct net_device * dev,
int ieee80211softmac_handle_reassoc_req(struct net_device * dev,
int ieee80211softmac_handle_reassoc_req(struct net_device * dev,
				        struct ieee80211_reassoc_request * reassoc);
				        struct ieee80211_reassoc_request * reassoc);
void ieee80211softmac_assoc_timeout(void *d);
void ieee80211softmac_assoc_timeout(void *d);
void ieee80211softmac_disassoc(struct ieee80211softmac_device *mac, u16 reason);


/* some helper functions */
/* some helper functions */
static inline int ieee80211softmac_scan_handlers_check_self(struct ieee80211softmac_device *sm)
static inline int ieee80211softmac_scan_handlers_check_self(struct ieee80211softmac_device *sm)
+32 −0
Original line number Original line Diff line number Diff line
@@ -431,3 +431,35 @@ ieee80211softmac_wx_get_genie(struct net_device *dev,
}
}
EXPORT_SYMBOL_GPL(ieee80211softmac_wx_get_genie);
EXPORT_SYMBOL_GPL(ieee80211softmac_wx_get_genie);


int
ieee80211softmac_wx_set_mlme(struct net_device *dev,
			     struct iw_request_info *info,
			     union iwreq_data *wrqu,
			     char *extra)
{
	struct ieee80211softmac_device *mac = ieee80211_priv(dev);
	struct iw_mlme *mlme = (struct iw_mlme *)extra;
	u16 reason = cpu_to_le16(mlme->reason_code);
	struct ieee80211softmac_network *net;

	if (memcmp(mac->associnfo.bssid, mlme->addr.sa_data, ETH_ALEN)) {
		printk(KERN_DEBUG PFX "wx_set_mlme: requested operation on net we don't use\n");
		return -EINVAL;
	}

	switch (mlme->cmd) {
	case IW_MLME_DEAUTH:
		net = ieee80211softmac_get_network_by_bssid_locked(mac, mlme->addr.sa_data);
		if (!net) {
			printk(KERN_DEBUG PFX "wx_set_mlme: we should know the net here...\n");
			return -EINVAL;
		}
		return ieee80211softmac_deauth_req(mac, net, reason);
	case IW_MLME_DISASSOC:
		ieee80211softmac_disassoc(mac, reason);
		return 0;
	default:
		return -EOPNOTSUPP;
	}
}
EXPORT_SYMBOL_GPL(ieee80211softmac_wx_set_mlme);