From 88c2d4886062c5cd0fa6d03b7795c70abaf5324c Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 26 Dec 2013 16:52:55 +0200 Subject: [PATCH] Allow passive scan to be requested with SCAN passive=1 This allows external programs to request wpa_supplicant to execute a passive scan (i.e., do not send any Probe Request frames). Signed-hostap: Jouni Malinen --- wpa_supplicant/ctrl_iface.c | 6 ++++++ wpa_supplicant/scan.c | 3 +++ wpa_supplicant/wpa_supplicant_i.h | 1 + 3 files changed, 10 insertions(+) diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index e424c6f06..8518d4b99 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -5263,6 +5263,8 @@ static void wpas_ctrl_scan(struct wpa_supplicant *wpa_s, char *params, return; } + wpa_s->manual_scan_passive = 0; + if (params) { if (os_strncasecmp(params, "TYPE=ONLY", 9) == 0) wpa_s->scan_res_handler = scan_only_handler; @@ -5272,6 +5274,10 @@ static void wpas_ctrl_scan(struct wpa_supplicant *wpa_s, char *params, *reply_len = -1; return; } + + pos = os_strstr(params, "passive="); + if (pos) + wpa_s->manual_scan_passive = !!atoi(pos + 8); } else { os_free(wpa_s->manual_scan_freqs); wpa_s->manual_scan_freqs = NULL; diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index c22ffbf2e..d96345226 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -698,6 +698,9 @@ static void wpa_supplicant_scan(void *eloop_ctx, void *timeout_ctx) wpa_dbg(wpa_s, MSG_DEBUG, "Include wildcard SSID in " "the scan request"); params.num_ssids++; + } else if (wpa_s->last_scan_req == MANUAL_SCAN_REQ && + wpa_s->manual_scan_passive && params.num_ssids == 0) { + wpa_dbg(wpa_s, MSG_DEBUG, "Use passive scan based on manual request"); } else { wpa_s->prev_scan_ssid = WILDCARD_SSID_SCAN; params.num_ssids++; diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 5194e3424..ebe30e4ef 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -482,6 +482,7 @@ struct wpa_supplicant { int scan_runs; /* number of scan runs since WPS was started */ int *next_scan_freqs; int *manual_scan_freqs; + unsigned int manual_scan_passive: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