Thread: [Madwifi-cvs] madwifi/net80211 ieee80211_wireless.c,1.18.2.8,1.18.2.9
Status: Beta
Brought to you by:
otaku
From: Sebastian W. <to...@us...> - 2005-02-23 13:10:37
|
Update of /cvsroot/madwifi/madwifi/net80211 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18035 Modified Files: Tag: BSD ieee80211_wireless.c Log Message: - fixed MLME_DEAUTH for broadcast - some other minor fixes to MLME from bsd Index: ieee80211_wireless.c =================================================================== RCS file: /cvsroot/madwifi/madwifi/net80211/ieee80211_wireless.c,v retrieving revision 1.18.2.8 retrieving revision 1.18.2.9 diff -C2 -d -r1.18.2.8 -r1.18.2.9 *** ieee80211_wireless.c 23 Feb 2005 11:16:20 -0000 1.18.2.8 --- ieee80211_wireless.c 23 Feb 2005 13:10:22 -0000 1.18.2.9 *************** *** 1859,1862 **** --- 1859,1878 ---- EXPORT_SYMBOL(ieee80211_ioctl_delkey); + 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); + } + int ieee80211_ioctl_setmlme(struct ieee80211com *ic, struct iw_request_info *info, *************** *** 1868,1874 **** switch (mlme->im_op) { case IEEE80211_MLME_ASSOC: ! if (ic->ic_opmode != IEEE80211_M_STA) ! return -EINVAL; ! /* XXX must be in S_SCAN state? */ if (ic->ic_des_esslen != 0) { --- 1884,1890 ---- switch (mlme->im_op) { case IEEE80211_MLME_ASSOC: ! if (ic->ic_opmode != IEEE80211_M_STA) ! return EINVAL; ! /* XXX must be in S_SCAN state? */ if (ic->ic_des_esslen != 0) { *************** *** 1877,1882 **** * ssid to distinguish ap advertising multiple ssid's. */ ! ni = ieee80211_find_node_with_ssid(&ic->ic_scan, mlme->im_macaddr, ! ic->ic_des_esslen, ic->ic_des_essid); // TODO } else { /* --- 1893,1899 ---- * ssid to distinguish ap advertising multiple ssid's. */ ! ni = ieee80211_find_node_with_ssid(&ic->ic_scan, ! mlme->im_macaddr, ! ic->ic_des_esslen, ic->ic_des_essid); } else { /* *************** *** 1886,1894 **** } if (ni == NULL) ! return -EINVAL; if (!ieee80211_sta_join(ic, ni)) { ! /* NB: from AP scan; don't free, just unref */ ! ieee80211_unref_node(&ni); ! return -EINVAL; } break; --- 1903,1910 ---- } if (ni == NULL) ! return EINVAL; if (!ieee80211_sta_join(ic, ni)) { ! ieee80211_free_node(ni); ! return EINVAL; } break; *************** *** 1902,1917 **** break; case IEEE80211_M_HOSTAP: ! ni = ieee80211_find_node(&ic->ic_sta, mlme->im_macaddr); ! if (ni == NULL) ! return -EINVAL; ! 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); break; default: ! return -EINVAL; } break; --- 1918,1935 ---- break; case IEEE80211_M_HOSTAP: ! /* NB: the broadcast address means do 'em all */ ! if (!IEEE80211_ADDR_EQ(mlme->im_macaddr, ic->ic_dev->broadcast)) { ! if ((ni = ieee80211_find_node(&ic->ic_sta, ! mlme->im_macaddr)) == NULL) ! return EINVAL; ! domlme(&mlme, ni); ! ieee80211_free_node(ni); ! } else { ! ieee80211_iterate_nodes(&ic->ic_sta, ! domlme, &mlme); ! } break; default: ! return EINVAL; } break; *************** *** 1930,1936 **** break; case IEEE80211_MLME_CLEAR_STATS: ! if (ic->ic_opmode != IEEE80211_M_HOSTAP) return -EINVAL; ! ni = ieee80211_find_node(ic, mlme->im_macaddr); if (ni == NULL) return -EINVAL; --- 1948,1954 ---- break; case IEEE80211_MLME_CLEAR_STATS: ! if (ic->ic_opmode != IEEE80211_M_HOSTAP) return -EINVAL; ! ni = ieee80211_find_node(&ic->ic_sta, mlme->im_macaddr); if (ni == NULL) return -EINVAL; |