PERFORCE change 66196 for review
Sam Leffler
sam at FreeBSD.org
Wed Dec 1 10:49:55 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=66196
Change 66196 by sam at sam_ebb on 2004/12/01 18:49:02
o implement "kick all" for setmlme deauth/disassoc
o correct setmlme deauth/disassoc to send the correct
mgmt frame based on the request
Affected files ...
.. //depot/projects/wifi/sys/net80211/ieee80211_ioctl.c#20 edit
Differences ...
==== //depot/projects/wifi/sys/net80211/ieee80211_ioctl.c#20 (text+ko) ====
@@ -1528,6 +1528,22 @@
return 0;
}
+static void
+domlme(void *arg, struct ieee80211_node *ni)
+{
+ struct ieee80211com *ic = ni->ni_ic;
+ struct ieee80211req_mlme *mlme = arg;
+
+ if (ni->ni_associd != 0) {
+ IEEE80211_SEND_MGMT(ic, ni,
+ mlme->im_op == IEEE80211_MLME_DEAUTH ?
+ IEEE80211_FC0_SUBTYPE_DEAUTH :
+ IEEE80211_FC0_SUBTYPE_DISASSOC,
+ mlme->im_reason);
+ }
+ ieee80211_node_leave(ic, ni);
+}
+
static int
ieee80211_ioctl_setmlme(struct ieee80211com *ic, struct ieee80211req *ireq)
{
@@ -1576,16 +1592,19 @@
mlme.im_reason);
break;
case IEEE80211_M_HOSTAP:
- if (ic->ic_sta == NULL)
- return EINVAL;
- ni = ieee80211_find_node(ic->ic_sta, mlme.im_macaddr);
- if (ni == NULL)
- return EINVAL;
- IEEE80211_SEND_MGMT(ic, ni,
- IEEE80211_FC0_SUBTYPE_DEAUTH,
- mlme.im_reason);
- ieee80211_node_leave(ic, ni);
- ieee80211_free_node(ni);
+ /* NB: the broadcast address means do 'em all */
+ if (!IEEE80211_ADDR_EQ(mlme.im_macaddr, ic->ic_ifp->if_broadcastaddr)) {
+ if (ic->ic_sta == NULL ||
+ (ni = ieee80211_find_node(ic->ic_sta,
+ mlme.im_macaddr)) == NULL)
+ return EINVAL;
+ domlme(&mlme, ni);
+ ieee80211_free_node(ni);
+ } else {
+ if (ic->ic_sta != NULL)
+ ieee80211_iterate_nodes(ic->ic_sta,
+ domlme, &mlme);
+ }
break;
default:
return EINVAL;
More information about the p4-projects
mailing list