From bea48f77843b1b355e94df49ef242cb705eb6338 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Mon, 30 Nov 2015 14:00:41 +0200 Subject: [PATCH] Allow sched_scan_plans to be updated at runtime This allows the control interface SET command to be used to update the sched_scan_plans parameter at runtime. In addition, an empty string can be used to clear the previously configured plan. Signed-off-by: Jouni Malinen --- wpa_supplicant/config.c | 2 +- wpa_supplicant/config.h | 1 + wpa_supplicant/scan.c | 8 ++++++++ wpa_supplicant/wpa_supplicant.c | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index b8b19de89..f2ae4fd97 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -4260,7 +4260,7 @@ static const struct global_parse_data global_fields[] = { { INT_RANGE(fst_llt, 1, FST_MAX_LLT_MS), 0 }, #endif /* CONFIG_FST */ { INT_RANGE(wpa_rsc_relaxation, 0, 1), 0 }, - { STR(sched_scan_plans), 0 }, + { STR(sched_scan_plans), CFG_CHANGED_SCHED_SCAN_PLANS }, }; #undef FUNC diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h index e93a0a3f8..86f940d35 100644 --- a/wpa_supplicant/config.h +++ b/wpa_supplicant/config.h @@ -332,6 +332,7 @@ struct wpa_cred { #define CFG_CHANGED_EXT_PW_BACKEND BIT(14) #define CFG_CHANGED_NFC_PASSWORD_TOKEN BIT(15) #define CFG_CHANGED_P2P_PASSPHRASE_LEN BIT(16) +#define CFG_CHANGED_SCHED_SCAN_PLANS BIT(17) /** * struct wpa_config - wpa_supplicant configuration data diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index fd01f4871..3c3f9e01d 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -2548,6 +2548,14 @@ int wpas_sched_scan_plans_set(struct wpa_supplicant *wpa_s, const char *cmd) if (!cmd) return -1; + if (!cmd[0]) { + wpa_printf(MSG_DEBUG, "Clear sched scan plans"); + os_free(wpa_s->sched_scan_plans); + wpa_s->sched_scan_plans = NULL; + wpa_s->sched_scan_plans_num = 0; + return 0; + } + while ((token = cstr_token(cmd, " ", &context))) { int ret; struct sched_scan_plan *scan_plan, *n; diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index c9b78de1d..7e5c07ade 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -5314,6 +5314,9 @@ void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s) if (wpa_s->conf->changed_parameters & CFG_CHANGED_EXT_PW_BACKEND) wpas_init_ext_pw(wpa_s); + if (wpa_s->conf->changed_parameters & CFG_CHANGED_SCHED_SCAN_PLANS) + wpas_sched_scan_plans_set(wpa_s, wpa_s->conf->sched_scan_plans); + #ifdef CONFIG_WPS wpas_wps_update_config(wpa_s); #endif /* CONFIG_WPS */