diff options
| author | Jouni Malinen <j@w1.fi> | 2013-12-26 17:33:26 +0200 |
|---|---|---|
| committer | Steve Kondik <shade@chemlab.org> | 2014-06-12 14:07:29 -0700 |
| commit | 9883d084cd7c3311fc59cd7f7071b4c5bc510206 (patch) | |
| tree | afd61a7236ceabcc21768c4fc384f4ecfd556493 | |
| parent | 7ad8428839199986294cc30a645f6d33d2fd15da (diff) | |
| download | android_external_wpa_supplicant_8-9883d084cd7c3311fc59cd7f7071b4c5bc510206.tar.gz android_external_wpa_supplicant_8-9883d084cd7c3311fc59cd7f7071b4c5bc510206.tar.bz2 android_external_wpa_supplicant_8-9883d084cd7c3311fc59cd7f7071b4c5bc510206.zip | |
Track whether scan was started by us or an external program
This can be used to improve scan behavior in cases external
programs request scans directly from the driver.
CRs-Fixed: 570640
Git-commit: a5f40eff189d7f939f6434455ee63554ddb3c3ae
Git-repo : git://w1.fi/srv/git/hostap.git
Signed-hostap: Jouni Malinen <j@w1.fi>
Change-Id: I4af18ace907f4c736cec48b41f925a462d816a56
| -rw-r--r-- | src/common/wpa_ctrl.h | 2 | ||||
| -rw-r--r-- | src/drivers/driver.h | 12 | ||||
| -rw-r--r-- | src/drivers/driver_common.c | 1 | ||||
| -rw-r--r-- | src/drivers/driver_nl80211.c | 1 | ||||
| -rw-r--r-- | wpa_supplicant/events.c | 17 | ||||
| -rw-r--r-- | wpa_supplicant/p2p_supplicant.c | 2 | ||||
| -rw-r--r-- | wpa_supplicant/scan.c | 1 | ||||
| -rw-r--r-- | wpa_supplicant/wpa_supplicant_i.h | 3 |
8 files changed, 37 insertions, 2 deletions
diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h index 1156043f..815dce91 100644 --- a/src/common/wpa_ctrl.h +++ b/src/common/wpa_ctrl.h @@ -54,6 +54,8 @@ extern "C" { #define WPA_EVENT_TEMP_DISABLED "CTRL-EVENT-SSID-TEMP-DISABLED " /** Temporarily disabled network block re-enabled */ #define WPA_EVENT_REENABLED "CTRL-EVENT-SSID-REENABLED " +/** New scan started */ +#define WPA_EVENT_SCAN_STARTED "CTRL-EVENT-SCAN-STARTED " /** New scan results available */ #define WPA_EVENT_SCAN_RESULTS "CTRL-EVENT-SCAN-RESULTS " /** wpa_supplicant state change */ diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 92db1575..4449db2f 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -3297,7 +3297,17 @@ enum wpa_event_type { * entry for one frequency. The survey data can be os_malloc()'d and * then os_free()'d, so the event callback must only copy data. */ - EVENT_SURVEY + EVENT_SURVEY, + + /** + * EVENT_SCAN_STARTED - Scan started + * + * This indicates that driver has started a scan operation either based + * on a request from wpa_supplicant/hostapd or from another application. + * EVENT_SCAN_RESULTS is used to indicate when the scan has been + * completed (either successfully or by getting cancelled). + */ + EVENT_SCAN_STARTED }; diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c index 8d1d22eb..8a6b438a 100644 --- a/src/drivers/driver_common.c +++ b/src/drivers/driver_common.c @@ -85,6 +85,7 @@ const char * event_to_string(enum wpa_event_type event) E2S(DFS_CAC_ABORTED); E2S(DFS_NOP_FINISHED); E2S(SURVEY); + E2S(SCAN_STARTED); } return "UNKNOWN"; diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index c51792d4..25d20518 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -2624,6 +2624,7 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd, switch (cmd) { case NL80211_CMD_TRIGGER_SCAN: wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Scan trigger"); + wpa_supplicant_event(drv->ctx, EVENT_SCAN_STARTED, NULL); break; case NL80211_CMD_START_SCHED_SCAN: wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Sched scan started"); diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index e939e36f..573ac22b 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -1241,7 +1241,8 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s, return 0; } - wpa_dbg(wpa_s, MSG_DEBUG, "New scan results available"); + 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_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SCAN_RESULTS); wpas_notify_scan_results(wpa_s); @@ -2701,8 +2702,22 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, wpa_supplicant_event_michael_mic_failure(wpa_s, data); break; #ifndef CONFIG_NO_SCAN_PROCESSING + case EVENT_SCAN_STARTED: + if (wpa_s->own_scan_requested) { + wpa_dbg(wpa_s, MSG_DEBUG, "Own scan request started a scan"); + wpa_s->own_scan_requested = 0; + wpa_s->own_scan_running = 1; + wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_SCAN_STARTED); + } else { + wpa_dbg(wpa_s, MSG_DEBUG, "External program started a scan"); + wpa_s->external_scan_running = 1; + wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_SCAN_STARTED); + } + break; case EVENT_SCAN_RESULTS: wpa_supplicant_event_scan_results(wpa_s, data); + wpa_s->own_scan_running = 0; + wpa_s->external_scan_running = 0; if (wpa_s->wpa_state != WPA_AUTHENTICATING && wpa_s->wpa_state != WPA_ASSOCIATING) wpas_p2p_continue_after_scan(wpa_s); diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index b61b28aa..a066e6c8 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -319,6 +319,7 @@ static int wpas_p2p_scan(void *ctx, enum p2p_scan_type type, int freq, } else { os_get_time(&wpa_s->scan_trigger_time); wpa_s->scan_res_handler = wpas_p2p_scan_res_handler; + wpa_s->own_scan_requested = 1; } return ret; @@ -3940,6 +3941,7 @@ static void wpas_p2p_join_scan_req(struct wpa_supplicant *wpa_s, int freq) if (!ret) { os_get_time(&wpa_s->scan_trigger_time); wpa_s->scan_res_handler = wpas_p2p_scan_res_join; + wpa_s->own_scan_requested = 1; } wpabuf_free(ies); diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index 7eec4683..3d940376 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -230,6 +230,7 @@ int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s, os_get_time(&wpa_s->scan_trigger_time); wpa_s->scan_runs++; wpa_s->normal_scans++; + wpa_s->own_scan_requested = 1; } return ret; diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 353c68e8..66730b98 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -476,6 +476,9 @@ struct wpa_supplicant { struct os_time scan_trigger_time; int scan_runs; /* number of scan runs since WPS was started */ int *next_scan_freqs; + unsigned int own_scan_requested:1; + unsigned int own_scan_running:1; + unsigned int external_scan_running:1; int scan_interval; /* time in sec between scans to find suitable AP */ int normal_scans; /* normal scans run before sched_scan */ int scan_for_connection; /* whether the scan request was triggered for |
