Add 'SCAN TYPE=ONLY' functionality
Usual manual scan request may cause reassociation due to several reasons. New command is intended to perform pure scan without taking any automatic action based on the results. Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
This commit is contained in:
parent
ff3ad3c531
commit
66fe0f703c
5 changed files with 24 additions and 3 deletions
|
@ -5125,10 +5125,14 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
|
||||||
wpa_supplicant_cancel_scan(wpa_s);
|
wpa_supplicant_cancel_scan(wpa_s);
|
||||||
wpa_supplicant_deauthenticate(wpa_s,
|
wpa_supplicant_deauthenticate(wpa_s,
|
||||||
WLAN_REASON_DEAUTH_LEAVING);
|
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)
|
if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED)
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
else {
|
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 &&
|
if (!wpa_s->sched_scanning && !wpa_s->scanning &&
|
||||||
((wpa_s->wpa_state <= WPA_SCANNING) ||
|
((wpa_s->wpa_state <= WPA_SCANNING) ||
|
||||||
(wpa_s->wpa_state == WPA_COMPLETED))) {
|
(wpa_s->wpa_state == WPA_COMPLETED))) {
|
||||||
|
|
|
@ -1125,7 +1125,8 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
|
||||||
data ? &data->scan_info :
|
data ? &data->scan_info :
|
||||||
NULL, 1);
|
NULL, 1);
|
||||||
if (scan_res == NULL) {
|
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;
|
return -1;
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to get scan results - try "
|
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to get scan results - try "
|
||||||
"scanning again");
|
"scanning again");
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "utils/common.h"
|
#include "utils/common.h"
|
||||||
#include "utils/eloop.h"
|
#include "utils/eloop.h"
|
||||||
#include "common/ieee802_11_defs.h"
|
#include "common/ieee802_11_defs.h"
|
||||||
|
#include "common/wpa_ctrl.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wpa_supplicant_i.h"
|
#include "wpa_supplicant_i.h"
|
||||||
#include "driver_i.h"
|
#include "driver_i.h"
|
||||||
|
@ -1580,3 +1581,16 @@ int wpa_supplicant_update_scan_results(struct wpa_supplicant *wpa_s)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* scan_only_handler - Reports scan results
|
||||||
|
*/
|
||||||
|
void scan_only_handler(struct wpa_supplicant *wpa_s,
|
||||||
|
struct wpa_scan_results *scan_res)
|
||||||
|
{
|
||||||
|
wpa_dbg(wpa_s, MSG_DEBUG, "Scan-only results received");
|
||||||
|
wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SCAN_RESULTS);
|
||||||
|
wpas_notify_scan_results(wpa_s);
|
||||||
|
wpas_notify_scan_done(wpa_s, 1);
|
||||||
|
}
|
||||||
|
|
|
@ -33,5 +33,7 @@ struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res,
|
||||||
int wpa_supplicant_filter_bssid_match(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_filter_bssid_match(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *bssid);
|
const u8 *bssid);
|
||||||
void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec);
|
void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec);
|
||||||
|
void scan_only_handler(struct wpa_supplicant *wpa_s,
|
||||||
|
struct wpa_scan_results *scan_res);
|
||||||
|
|
||||||
#endif /* SCAN_H */
|
#endif /* SCAN_H */
|
||||||
|
|
|
@ -1433,7 +1433,7 @@ static int wpa_cli_cmd_save_config(struct wpa_ctrl *ctrl, int argc,
|
||||||
|
|
||||||
static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
|
static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
return wpa_ctrl_command(ctrl, "SCAN");
|
return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue