Usual manual scan request may cause reassociation due to several reasons.
New command is intended to perform pure scan.
Change-Id: I5f517a9f50f286482290e76ca1088abf6a1aeff9
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
wpa_supplicant_cancel_scan(wpa_s);
wpa_supplicant_deauthenticate(wpa_s,
WLAN_REASON_DEAUTH_LEAVING);
- } else if (os_strcmp(buf, "SCAN") == 0) {
+ } else if ((os_strcmp(buf, "SCAN") == 0) ||
+ (os_strncmp(buf, "SCAN ", 5) == 0)) {
if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED)
reply_len = -1;
else {
+ if ((os_strlen(buf) > 4) &&
+ (os_strncasecmp(buf + 5, "TYPE=ONLY", 9) == 0))
+ wpa_s->scan_res_handler = scan_only_handler;
if (!wpa_s->sched_scanning && !wpa_s->scanning &&
((wpa_s->wpa_state <= WPA_SCANNING) ||
(wpa_s->wpa_state == WPA_COMPLETED))) {
data ? &data->scan_info :
NULL, 1);
if (scan_res == NULL) {
- if (wpa_s->conf->ap_scan == 2 || ap)
+ if ((wpa_s->conf->ap_scan == 2 || ap) ||
+ (wpa_s->scan_res_handler == scan_only_handler))
return -1;
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to get scan results - try "
"scanning again");
#include "utils/common.h"
#include "utils/eloop.h"
#include "common/ieee802_11_defs.h"
+#include "common/wpa_ctrl.h"
#include "config.h"
#include "wpa_supplicant_i.h"
#include "driver_i.h"
return 0;
}
+
+
+/**
+ * scan_only_handler - Reports scan results
+ */
+void scan_only_handler(struct wpa_supplicant *wpa_s,
+ struct wpa_scan_results *scan_res)
+{
+ wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SCAN_RESULTS);
+ wpas_notify_scan_results(wpa_s);
+}
u32 vendor_type);
int wpa_supplicant_filter_bssid_match(struct wpa_supplicant *wpa_s,
const u8 *bssid);
+void scan_only_handler(struct wpa_supplicant *wpa_s,
+ struct wpa_scan_results *scan_res);
#endif /* SCAN_H */
static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
{
+ if (argc > 0)
+ return wpa_cli_cmd(ctrl, "SCAN", 1, argc, argv);
return wpa_ctrl_command(ctrl, "SCAN");
}