From e3659c89d22d7a4aeae240b5e6f20562c84d6742 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Tue, 26 Jun 2012 19:28:21 +0300 Subject: [PATCH] Add a simple periodic autoscan module This module will sets a fixed scanning interval. Thus, the parameter to this module is following this format: Signed-hostap: Tomasz Bursztyka --- wpa_supplicant/Android.mk | 6 +++ wpa_supplicant/Makefile | 6 +++ wpa_supplicant/autoscan.c | 7 +++ wpa_supplicant/autoscan_periodic.c | 85 ++++++++++++++++++++++++++++++ wpa_supplicant/defconfig | 2 + wpa_supplicant/wpa_supplicant.conf | 3 ++ 6 files changed, 109 insertions(+) create mode 100644 wpa_supplicant/autoscan_periodic.c diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk index 97affc18e..0666f4d1e 100644 --- a/wpa_supplicant/Android.mk +++ b/wpa_supplicant/Android.mk @@ -1310,6 +1310,12 @@ OBJS += autoscan_exponential.c NEED_AUTOSCAN=y endif +ifdef CONFIG_AUTOSCAN_PERIODIC +CFLAGS += -DCONFIG_AUTOSCAN_PERIODIC +OBJS += autoscan_periodic.c +NEED_AUTOSCAN=y +endif + ifdef NEED_AUTOSCAN L_CFLAGS += -DCONFIG_AUTOSCAN OBJS += autoscan.c diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile index e08868582..dc6af3506 100644 --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile @@ -1327,6 +1327,12 @@ OBJS += autoscan_exponential.o NEED_AUTOSCAN=y endif +ifdef CONFIG_AUTOSCAN_PERIODIC +CFLAGS += -DCONFIG_AUTOSCAN_PERIODIC +OBJS += autoscan_periodic.o +NEED_AUTOSCAN=y +endif + ifdef NEED_AUTOSCAN CFLAGS += -DCONFIG_AUTOSCAN OBJS += autoscan.o diff --git a/wpa_supplicant/autoscan.c b/wpa_supplicant/autoscan.c index c53729146..bac8df67f 100644 --- a/wpa_supplicant/autoscan.c +++ b/wpa_supplicant/autoscan.c @@ -19,10 +19,17 @@ extern const struct autoscan_ops autoscan_exponential_ops; #endif /* CONFIG_AUTOSCAN_EXPONENTIAL */ +#ifdef CONFIG_AUTOSCAN_PERIODIC +extern const struct autoscan_ops autoscan_periodic_ops; +#endif /* CONFIG_AUTOSCAN_PERIODIC */ + static const struct autoscan_ops * autoscan_modules[] = { #ifdef CONFIG_AUTOSCAN_EXPONENTIAL &autoscan_exponential_ops, #endif /* CONFIG_AUTOSCAN_EXPONENTIAL */ +#ifdef CONFIG_AUTOSCAN_PERIODIC + &autoscan_periodic_ops, +#endif /* CONFIG_AUTOSCAN_PERIODIC */ NULL }; diff --git a/wpa_supplicant/autoscan_periodic.c b/wpa_supplicant/autoscan_periodic.c new file mode 100644 index 000000000..102d7234d --- /dev/null +++ b/wpa_supplicant/autoscan_periodic.c @@ -0,0 +1,85 @@ +/* + * WPA Supplicant - auto scan periodic module + * Copyright (c) 2012, Intel Corporation. All rights reserved. + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#include "includes.h" + +#include "common.h" +#include "wpa_supplicant_i.h" +#include "autoscan.h" + + +struct autoscan_periodic_data { + int periodic_interval; +}; + + +static int autoscan_periodic_get_params(struct autoscan_periodic_data *data, + const char *params) +{ + int interval; + + if (params == NULL) + return -1; + + interval = atoi(params); + + if (interval < 0) + return -1; + + data->periodic_interval = interval; + + return 0; +} + + +static void * autoscan_periodic_init(struct wpa_supplicant *wpa_s, + const char *params) +{ + struct autoscan_periodic_data *data; + + data = os_zalloc(sizeof(struct autoscan_periodic_data)); + if (data == NULL) + return NULL; + + if (autoscan_periodic_get_params(data, params) < 0) { + os_free(data); + return NULL; + } + + wpa_printf(MSG_DEBUG, "autoscan periodic: interval is %d", + data->periodic_interval); + + return data; +} + + +static void autoscan_periodic_deinit(void *priv) +{ + struct autoscan_periodic_data *data = priv; + + os_free(data); +} + + +static int autoscan_periodic_notify_scan(void *priv, + struct wpa_scan_results *scan_res) +{ + struct autoscan_periodic_data *data = priv; + + wpa_printf(MSG_DEBUG, "autoscan periodic: scan result notification"); + + return data->periodic_interval; +} + + +const struct autoscan_ops autoscan_periodic_ops = { + .name = "periodic", + .init = autoscan_periodic_init, + .deinit = autoscan_periodic_deinit, + .notify_scan = autoscan_periodic_notify_scan, +}; diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig index e70517334..392d8a814 100644 --- a/wpa_supplicant/defconfig +++ b/wpa_supplicant/defconfig @@ -508,3 +508,5 @@ CONFIG_PEERKEY=y # Enabling directly a module will enable autoscan support. # For exponential module: #CONFIG_AUTOSCAN_EXPONENTIAL=y +# For periodic module: +#CONFIG_AUTOSCAN_PERIODIC=y diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf index 455746723..ccde8445a 100644 --- a/wpa_supplicant/wpa_supplicant.conf +++ b/wpa_supplicant/wpa_supplicant.conf @@ -234,6 +234,9 @@ fast_reauth=1 #autoscan=exponential:3:300 # Which means a delay between scans on a base exponential of 3, # up to the limit of 300 seconds (3, 9, 27 ... 300) +# For periodic module, parameters would be +#autoscan=periodic:30 +# So a delay of 30 seconds will be applied between each scan # filter_ssids - SSID-based scan result filtering # 0 = do not filter scan results (default)