Delay scan request on select_network if disconnecting

The disconnection command results in disassociation and deauthentication
events which were previously processed during the scan in case of
select_network command being used while associated with another network.
While this works in most cases, it can result in confusing event
messages in ctrl_iface and debug log. Avoid this by using a short delay
between the disconnection and scan request to allow the disconnection
events to be processed prior to starting the new scan.

Signed-hostap: Jouni Malinen <j@w1.fi>
intended-for: hostap-1
This commit is contained in:
Jouni Malinen 2012-02-04 12:28:16 +02:00
parent c7bce24dc9
commit d93dfbd588

View file

@ -1,6 +1,6 @@
/* /*
* WPA Supplicant * WPA Supplicant
* Copyright (c) 2003-2011, Jouni Malinen <j@w1.fi> * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
@ -1667,10 +1667,13 @@ void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
{ {
struct wpa_ssid *other_ssid; struct wpa_ssid *other_ssid;
int disconnected = 0;
if (ssid && ssid != wpa_s->current_ssid && wpa_s->current_ssid) if (ssid && ssid != wpa_s->current_ssid && wpa_s->current_ssid) {
wpa_supplicant_disassociate( wpa_supplicant_disassociate(
wpa_s, WLAN_REASON_DEAUTH_LEAVING); wpa_s, WLAN_REASON_DEAUTH_LEAVING);
disconnected = 1;
}
/* /*
* Mark all other networks disabled or mark all networks enabled if no * Mark all other networks disabled or mark all networks enabled if no
@ -1698,7 +1701,7 @@ void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
wpa_s->connect_without_scan = NULL; wpa_s->connect_without_scan = NULL;
wpa_s->disconnected = 0; wpa_s->disconnected = 0;
wpa_s->reassociate = 1; wpa_s->reassociate = 1;
wpa_supplicant_req_scan(wpa_s, 0, 0); wpa_supplicant_req_scan(wpa_s, 0, disconnected ? 100000 : 0);
if (ssid) if (ssid)
wpas_notify_network_selected(wpa_s, ssid); wpas_notify_network_selected(wpa_s, ssid);