[Madwifi-cvs] revision 1439 committed by mrenzmann
Status: Beta
Brought to you by:
otaku
From: mrenzmann <svn...@ma...> - 2006-02-05 08:37:57
|
Project : madwifi Revision : 1439 Author : mrenzmann Date : 2006-02-05 09:37:51 +0100 (Sun, 05 Feb 2006) Log Message : Add a private ioctl that allows to disassociate an associated station with the given MAC address: iwpriv <interface> kickmac <MAC address to kick> A disassociation frame will be sent to the station if it is associated (with an unspecified reason). Nothing stops the station reassociating immediately, but this seems to mirror other typical implementations of this functionality. This commit closes ticket #203. Signed-off-by: Ian M Rawley <im...@wa...> Affected Files: * trunk/net80211/ieee80211_ioctl.h updated * trunk/net80211/ieee80211_wireless.c updated Modified: trunk/net80211/ieee80211_ioctl.h =================================================================== --- trunk/net80211/ieee80211_ioctl.h 2006-02-04 19:45:55 UTC (rev 1438) +++ trunk/net80211/ieee80211_ioctl.h 2006-02-05 08:37:51 UTC (rev 1439) @@ -524,6 +524,7 @@ #define IEEE80211_IOCTL_DELMAC (SIOCIWFIRSTPRIV+24) #define IEEE80211_IOCTL_WDSADDMAC (SIOCIWFIRSTPRIV+26) #define IEEE80211_IOCTL_WDSDELMAC (SIOCIWFIRSTPRIV+28) +#define IEEE80211_IOCTL_KICKMAC (SIOCIWFIRSTPRIV+30) enum { IEEE80211_WMMPARAMS_CWMIN = 1, IEEE80211_WMMPARAMS_CWMAX = 2, Modified: trunk/net80211/ieee80211_wireless.c =================================================================== --- trunk/net80211/ieee80211_wireless.c 2006-02-04 19:45:55 UTC (rev 1438) +++ trunk/net80211/ieee80211_wireless.c 2006-02-05 08:37:51 UTC (rev 1439) @@ -2914,7 +2914,29 @@ return -1; } +/* + * kick associated station with the given MAC address. + */ static int +ieee80211_ioctl_kickmac(struct net_device *dev, struct iw_request_info *info, + void *w, char *extra) +{ + struct sockaddr *sa = (struct sockaddr *)extra; + struct ieee80211req_mlme mlme; + + if (sa->sa_family != ARPHRD_ETHER) + return -EINVAL; + + /* Setup a MLME request for disassociation of the given MAC */ + mlme.im_op = IEEE80211_MLME_DISASSOC; + mlme.im_reason = IEEE80211_REASON_UNSPECIFIED; + IEEE80211_ADDR_COPY(&(mlme.im_macaddr), sa->sa_data); + + /* Send the MLME request and return the result. */ + return ieee80211_ioctl_setmlme(dev, info, w, (char *)&mlme); +} + +static int ieee80211_ioctl_addmac(struct net_device *dev, struct iw_request_info *info, void *w, char *extra) { @@ -3537,6 +3559,8 @@ IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0,"addmac" }, { IEEE80211_IOCTL_DELMAC, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0,"delmac" }, + { IEEE80211_IOCTL_KICKMAC, + IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "kickmac"}, { IEEE80211_IOCTL_WDSADDMAC, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0,"wds_add" }, { IEEE80211_IOCTL_WDSDELMAC, @@ -3928,6 +3952,8 @@ (iw_handler) NULL, /* SIOCIWFIRSTPRIV+27 */ (iw_handler) ieee80211_ioctl_wdsdelmac, /* SIOCIWFIRSTPRIV+28 */ (iw_handler) NULL, /* SIOCIWFIRSTPRIV+29 */ + (iw_handler) ieee80211_ioctl_kickmac, /* SIOCIWFIRSTPRIV+30 */ + (iw_handler) NULL, /* SIOCIWFIRSTPRIV+31 */ }; static struct iw_handler_def ieee80211_iw_handler_def = { #define N(a) (sizeof (a) / sizeof (a[0])) |