[PATCH] wpa_supplicant: cancel sched scan on all interfaces
Ilan Peer
ilan.peer
Sun Nov 3 05:25:02 PST 2013
From: David Spinadel <david.spinadel at intel.com>
Cancel sched scan on all interfaces (that share the same radio)
to enable scanning on one interfaces when there is a scheduled
scan on another interface.
Signed-hostap: David Spinadel <david.spinadel at intel.com>
---
wpa_supplicant/scan.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index cfac768..0549656 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -1230,16 +1230,43 @@ void wpa_supplicant_cancel_delayed_sched_scan(struct wpa_supplicant *wpa_s)
* wpa_supplicant_cancel_sched_scan - Stop running scheduled scans
* @wpa_s: Pointer to wpa_supplicant data
*
- * This function is used to stop a periodic scheduled scan.
+ * This function is used to stop a periodic scheduled scan on all interfaces
+ * that share the same radio.
*/
void wpa_supplicant_cancel_sched_scan(struct wpa_supplicant *wpa_s)
{
+ struct wpa_supplicant *iface;
+ const char *rn, *rn2;
+
if (!wpa_s->sched_scanning)
return;
wpa_dbg(wpa_s, MSG_DEBUG, "Cancelling sched scan");
eloop_cancel_timeout(wpa_supplicant_sched_scan_timeout, wpa_s, NULL);
wpa_supplicant_stop_sched_scan(wpa_s);
+
+ /* Cancel scheduled scan on other interfaces */
+ if (!wpa_s->driver->get_radio_name)
+ return;
+
+ rn = wpa_s->driver->get_radio_name(wpa_s->drv_priv);
+
+ if (!rn || rn[0] == '\0')
+ return;
+
+ for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
+ if (iface == wpa_s || !iface->driver->get_radio_name)
+ continue;
+
+ rn2 = iface->driver->get_radio_name(iface->drv_priv);
+ if (!rn2 || os_strcmp(rn, rn2) != 0)
+ continue;
+
+ eloop_cancel_timeout(wpa_supplicant_sched_scan_timeout, iface,
+ NULL);
+ wpa_supplicant_stop_sched_scan(iface);
+ }
+
}
--
1.7.10.4
More information about the Hostap
mailing list