Patchwork wpa_supplicant: handle enabling of one or all networks equally

login
register
mail settings
Submitter dvdspndl@gmail.com
Date March 7, 2013, 9:26 a.m.
Message ID <1362648360-7808-1-git-send-email-dvdspndl@gmail.com>
Download mbox | patch
Permalink /patch/225772/
State Accepted
Commit dca1a51149c1b15d1c6117684d5c01a00be29f47
Headers show

Comments

dvdspndl@gmail.com - March 7, 2013, 9:26 a.m.
From: David Spinadel <david.spinadel@intel.com>

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

Signed-hostap: David Spinadel <david.spinadel@intel.com>
---
 wpa_supplicant/wpa_supplicant.c |   64 +++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 36 deletions(-)
Jouni Malinen - March 10, 2013, 3:44 p.m.
On Thu, Mar 07, 2013 at 11:26:00AM +0200, David Spinadel wrote:
> Moving enabling a network to a separate function.
> Try to reconnect if is not associated to an AP.
> Abort scheduled scan in any case of new scan.

Thanks, applied.

Patch

diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index fc3a84b..a4243ce 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1726,6 +1726,23 @@  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 +1755,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) {
+	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;
-
-			was_disabled = other_ssid->disabled;
-
-			other_ssid->disabled = 0;
-			if (was_disabled)
-				wpas_clear_temp_disabled(wpa_s, other_ssid, 0);
+		     other_ssid = other_ssid->next)
+			wpa_supplicant_enable_one_network(wpa_s, other_ssid);
+	else
+		wpa_supplicant_enable_one_network(wpa_s, ssid);
 
-			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);
 	}
 }