From d90bfa97f4b11ad9d4799d6f5320da52c031d019 Mon Sep 17 00:00:00 2001 From: Ben Rosenfeld Date: Sun, 18 Jan 2015 20:44:08 -0500 Subject: [PATCH] Move external_scan_running to wpa_radio external_scan_running should be common to all interfaces that share a radio. This fixes a case where external_scan_running was set on a single interface, but did not block scan on other interfaces. Signed-off-by: Ben Rosenfeld --- wpa_supplicant/events.c | 10 +++++----- wpa_supplicant/wpa_supplicant.c | 2 +- wpa_supplicant/wpa_supplicant_i.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 0e78ea23d..240ee1c72 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -1313,7 +1313,7 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s, #endif /* CONFIG_NO_RANDOM_POOL */ if (own_request && wpa_s->scan_res_handler && - (wpa_s->own_scan_running || !wpa_s->external_scan_running)) { + (wpa_s->own_scan_running || !wpa_s->radio->external_scan_running)) { void (*scan_res_handler)(struct wpa_supplicant *wpa_s, struct wpa_scan_results *scan_res); @@ -1334,7 +1334,7 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s, } wpa_dbg(wpa_s, MSG_DEBUG, "New scan results available (own=%u ext=%u)", - wpa_s->own_scan_running, wpa_s->external_scan_running); + wpa_s->own_scan_running, wpa_s->radio->external_scan_running); if (wpa_s->last_scan_req == MANUAL_SCAN_REQ && wpa_s->manual_scan_use_id && wpa_s->own_scan_running) { wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SCAN_RESULTS "id=%u", @@ -1347,7 +1347,7 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s, wpas_notify_scan_done(wpa_s, 1); - if (!wpa_s->own_scan_running && wpa_s->external_scan_running) { + if (!wpa_s->own_scan_running && wpa_s->radio->external_scan_running) { wpa_dbg(wpa_s, MSG_DEBUG, "Do not use results from externally requested scan operation for network selection"); wpa_scan_results_free(scan_res); return 0; @@ -3073,7 +3073,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, } } else { wpa_dbg(wpa_s, MSG_DEBUG, "External program started a scan"); - wpa_s->external_scan_running = 1; + wpa_s->radio->external_scan_running = 1; wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SCAN_STARTED); } break; @@ -3089,7 +3089,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, } wpa_supplicant_event_scan_results(wpa_s, data); wpa_s->own_scan_running = 0; - wpa_s->external_scan_running = 0; + wpa_s->radio->external_scan_running = 0; radio_work_check_next(wpa_s); break; #endif /* CONFIG_NO_SCAN_PROCESSING */ diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index eeeb3c356..47243a3f4 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -3611,7 +3611,7 @@ static void radio_start_next_work(void *eloop_ctx, void *timeout_ctx) wpa_s = dl_list_first(&radio->ifaces, struct wpa_supplicant, radio_list); - if (wpa_s && wpa_s->external_scan_running) { + if (wpa_s && wpa_s->radio->external_scan_running) { wpa_printf(MSG_DEBUG, "Delay radio work start until externally triggered scan completes"); return; } diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 7f1e27fa9..d1938fab7 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -296,6 +296,7 @@ struct wpa_global { struct wpa_radio { char name[16]; /* from driver_ops get_radio_name() or empty if not * available */ + unsigned int external_scan_running:1; struct dl_list ifaces; /* struct wpa_supplicant::radio_list entries */ struct dl_list work; /* struct wpa_radio_work::list entries */ }; @@ -596,7 +597,6 @@ struct wpa_supplicant { unsigned int manual_scan_only_new:1; unsigned int own_scan_requested:1; unsigned int own_scan_running:1; - unsigned int external_scan_running:1; unsigned int clear_driver_scan_cache:1; unsigned int manual_scan_id; int scan_interval; /* time in sec between scans to find suitable AP */ -- 2.39.2