Add autoscan module named exponential

This module will compute the interval on a base exponential. Thus,
params to this module are following this format: <base>:<limit>

Signed-hostap: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2012-06-26 19:22:56 +03:00 committed by Jouni Malinen
parent 2bdd834257
commit c0fba2b38d
6 changed files with 128 additions and 1 deletions

View File

@ -1304,6 +1304,12 @@ L_CFLAGS += -DCONFIG_BGSCAN
OBJS += bgscan.c OBJS += bgscan.c
endif endif
ifdef CONFIG_AUTOSCAN_EXPONENTIAL
L_CFLAGS += -DCONFIG_AUTOSCAN_EXPONENTIAL
OBJS += autoscan_exponential.c
NEED_AUTOSCAN=y
endif
ifdef NEED_AUTOSCAN ifdef NEED_AUTOSCAN
L_CFLAGS += -DCONFIG_AUTOSCAN L_CFLAGS += -DCONFIG_AUTOSCAN
OBJS += autoscan.c OBJS += autoscan.c

View File

@ -1321,6 +1321,12 @@ CFLAGS += -DCONFIG_BGSCAN
OBJS += bgscan.o OBJS += bgscan.o
endif endif
ifdef CONFIG_AUTOSCAN_EXPONENTIAL
CFLAGS += -DCONFIG_AUTOSCAN_EXPONENTIAL
OBJS += autoscan_exponential.o
NEED_AUTOSCAN=y
endif
ifdef NEED_AUTOSCAN ifdef NEED_AUTOSCAN
CFLAGS += -DCONFIG_AUTOSCAN CFLAGS += -DCONFIG_AUTOSCAN
OBJS += autoscan.o OBJS += autoscan.o

View File

@ -15,7 +15,14 @@
#include "scan.h" #include "scan.h"
#include "autoscan.h" #include "autoscan.h"
#ifdef CONFIG_AUTOSCAN_EXPONENTIAL
extern const struct autoscan_ops autoscan_exponential_ops;
#endif /* CONFIG_AUTOSCAN_EXPONENTIAL */
static const struct autoscan_ops * autoscan_modules[] = { static const struct autoscan_ops * autoscan_modules[] = {
#ifdef CONFIG_AUTOSCAN_EXPONENTIAL
&autoscan_exponential_ops,
#endif /* CONFIG_AUTOSCAN_EXPONENTIAL */
NULL NULL
}; };

View File

@ -0,0 +1,101 @@
/*
* WPA Supplicant - auto scan exponential 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_exponential_data {
struct wpa_supplicant *wpa_s;
int base;
int limit;
int interval;
};
static int
autoscan_exponential_get_params(struct autoscan_exponential_data *data,
const char *params)
{
const char *pos;
if (params == NULL)
return -1;
data->base = atoi(params);
pos = os_strchr(params, ':');
if (pos == NULL)
return -1;
pos++;
data->limit = atoi(pos);
return 0;
}
static void * autoscan_exponential_init(struct wpa_supplicant *wpa_s,
const char *params)
{
struct autoscan_exponential_data *data;
data = os_zalloc(sizeof(struct autoscan_exponential_data));
if (data == NULL)
return NULL;
if (autoscan_exponential_get_params(data, params) < 0) {
os_free(data);
return NULL;
}
wpa_printf(MSG_DEBUG, "autoscan exponential: base exponential is %d "
"and limit is %d", data->base, data->limit);
data->wpa_s = wpa_s;
return data;
}
static void autoscan_exponential_deinit(void *priv)
{
struct autoscan_exponential_data *data = priv;
os_free(data);
}
static int autoscan_exponential_notify_scan(void *priv,
struct wpa_scan_results *scan_res)
{
struct autoscan_exponential_data *data = priv;
wpa_printf(MSG_DEBUG, "autoscan exponential: scan result "
"notification");
if (data->interval >= data->limit)
return data->limit;
if (data->interval <= 0)
data->interval = data->base;
data->interval = data->interval * data->base;
return data->interval;
}
const struct autoscan_ops autoscan_exponential_ops = {
.name = "exponential",
.init = autoscan_exponential_init,
.deinit = autoscan_exponential_deinit,
.notify_scan = autoscan_exponential_notify_scan,
};

View File

@ -504,4 +504,7 @@ CONFIG_PEERKEY=y
# Autoscan # Autoscan
# This can be used to enable automatic scan support in wpa_supplicant. # This can be used to enable automatic scan support in wpa_supplicant.
# See wpa_supplicant.conf for more information on autoscan usage. # See wpa_supplicant.conf for more information on autoscan usage.
#CONFIG_AUTOSCAN=y #
# Enabling directly a module will enable autoscan support.
# For exponential module:
#CONFIG_AUTOSCAN_EXPONENTIAL=y

View File

@ -230,6 +230,10 @@ fast_reauth=1
# within an interface in following format: # within an interface in following format:
#autoscan=<autoscan module name>:<module parameters> #autoscan=<autoscan module name>:<module parameters>
# autoscan is like bgscan but on disconnected or inactive state. # autoscan is like bgscan but on disconnected or inactive state.
# For instance, on exponential module parameters would be <base>:<limit>
#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)
# filter_ssids - SSID-based scan result filtering # filter_ssids - SSID-based scan result filtering
# 0 = do not filter scan results (default) # 0 = do not filter scan results (default)