A way to force deassociation ? Solved !
Dominique Blas
ml
Tue Nov 5 10:59:28 PST 2002
Le Lundi 4 Novembre 2002 13:30, Victor Aleo a ?crit :
> >does someone know a smooth way to force deassociation on all associated
> >stations ?
>
> Try with: iwconfig wlan# kickmac <mac addr>
I tried this command but the result is not what I expected.
Sta are deauthenticated but the mac addresses remain in /proc/net/hostap/wlan#
which I don't want.
My purpose is REALLY to dissociate all stas without asking about their opinion
and change the ESSID while they are no other sta associated.
So I need
to clear the hostap internal table that lists associated stas
and send a deassociation frame to the stas.
> With this command the AP will send a Deauthentication message to the
> <mac addr>, but not a Disassociation one. The result is slightly
> different: the station will be Deauthenticated (state 1, see standard
> for more details) so it will have to authenticate with another AP.
>
> Victor
So I investigated the Jouni's code.
The instruction that is sent when timer expires is (in function
ap_handle_timer from hostap_ap.c) :
prism2_send_mgmt(local->dev, WLAN_FC_TYPE_MGMT,
(deauth ? WLAN_FC_STYPE_DEAUTH :
WLAN_FC_STYPE_DISASSOC),
(char *) &resp, 2, 1, sta->addr);
So an instruction that does
for i in sta do
prism2_send_mgmt(local->dev, WLAN_FC_TYPE_MGMT, WLAN_FC_STYP_DISASSOC, (char
*) &resp, 2, 2, sta->i)
done
will be welcome.
In fact, the function I was looking for is nearly the function
ap_control_kickmac but working on the list of associated stas instead of
authenticated stas and doing
prism2_send_mgmt(...WLAN_FC_STYPE_DISASSOC instead of ...
WLAN_FC_STYPE_DEAUTH.
Such a function exists : it's ap_control_kickall that works by forcing the
expiration of the timers of inactivity for each sta.
Than looking backward how this function is called I found that funtion
ap_mac_cmd_ioctl in hostap_ioctl.c is calling it
when value of the command maccmd is 4 (AP_MAC_CMD_KICKALL = 4 according to
hostap_wlan.h).
maccmd = 4 does 2 things :
deassociation of all stas
and
deauthentification of all stas
Perfect !
Here is the involved code :
case AP_MAC_CMD_KICKALL:
ap_control_kickall(local->ap);
hostap_deauth_all_stas(local->dev, local->ap, 0);
break;
The command I was looking for is, in conclusion :
iwpriv wlan0 maccmd 4
that works as expected : smoothly and efficiently.
The procedure is thus :
change the ESSID : already associated stations stay associated
launch iwpriv wlan# maccmd 4 : stations are deassociated and cannot
reassociate if
new essid is unknown.
Thanks to all,
db
More information about the Hostap
mailing list