wpa_supplicant: Handle enabling of one or all networks equally

Move enabling a network to a separate function. Try to reconnect if not
associated to an AP. Abort scheduled scan in any case of a new scan.

Signed-hostap: David Spinadel <david.spinadel@intel.com>
This commit is contained in:
David Spinadel 2013-03-10 17:43:00 +02:00 committed by Jouni Malinen
parent 7ed52f678b
commit dca1a51149

View File

@ -1726,6 +1726,24 @@ void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s,
wpa_supplicant_clear_connection(wpa_s, addr);
}
static void wpa_supplicant_enable_one_network(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid)
{
if (!ssid || !ssid->disabled || ssid->disabled == 2)
return;
ssid->disabled = 0;
wpas_clear_temp_disabled(wpa_s, ssid, 1);
wpas_notify_network_enabled_changed(wpa_s, ssid);
/*
* Try to reassociate since there is no current configuration and a new
* network was made available.
*/
if (!wpa_s->current_ssid)
wpa_s->reassociate = 1;
}
/**
* wpa_supplicant_enable_network - Mark a configured network as enabled
@ -1738,47 +1756,22 @@ void wpa_supplicant_enable_network(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid)
{
struct wpa_ssid *other_ssid;
int was_disabled;
if (ssid == NULL) {
for (other_ssid = wpa_s->conf->ssid; other_ssid;
other_ssid = other_ssid->next) {
if (other_ssid->disabled == 2)
continue; /* do not change persistent P2P group
* data */
if (other_ssid == wpa_s->current_ssid &&
other_ssid->disabled)
wpa_s->reassociate = 1;
other_ssid = other_ssid->next)
wpa_supplicant_enable_one_network(wpa_s, other_ssid);
} else
wpa_supplicant_enable_one_network(wpa_s, ssid);
was_disabled = other_ssid->disabled;
other_ssid->disabled = 0;
if (was_disabled)
wpas_clear_temp_disabled(wpa_s, other_ssid, 0);
if (was_disabled != other_ssid->disabled)
wpas_notify_network_enabled_changed(
wpa_s, other_ssid);
}
if (wpa_s->reassociate)
wpa_supplicant_req_scan(wpa_s, 0, 0);
} else if (ssid->disabled && ssid->disabled != 2) {
if (wpa_s->current_ssid == NULL) {
/*
* Try to reassociate since there is no current
* configuration and a new network was made available.
*/
wpa_s->reassociate = 1;
wpa_supplicant_req_scan(wpa_s, 0, 0);
if (wpa_s->reassociate) {
if (wpa_s->sched_scanning) {
wpa_printf(MSG_DEBUG, "Stop ongoing sched_scan to add "
"new network to scan filters");
wpa_supplicant_cancel_sched_scan(wpa_s);
}
was_disabled = ssid->disabled;
ssid->disabled = 0;
wpas_clear_temp_disabled(wpa_s, ssid, 1);
if (was_disabled != ssid->disabled)
wpas_notify_network_enabled_changed(wpa_s, ssid);
wpa_supplicant_req_scan(wpa_s, 0, 0);
}
}