[PATCH] supplicant: Allow disabling reassoc based on scan results.

Dan Williams dcbw at redhat.com
Wed Mar 23 06:41:42 PDT 2016


On Tue, 2016-03-22 at 19:12 -0400, greearb at candelatech.com wrote:
> From: Ben Greear <greearb at candelatech.com>
> 
> This gives configurable control over whether to consider
> roaming based on scan results.  I find this useful when
> doing explicit roaming tests, where I do not want scan
> requests to cause the roam automatically.

Manually triggered ones, or *all* scan requests even background ones?

Dan

> Signed-off-by: Ben Greear <greearb at candelatech.com>
> ---
>  wpa_supplicant/config.c | 6 ++++++
>  wpa_supplicant/config.h | 9 +++++++++
>  wpa_supplicant/events.c | 6 ++++++
>  3 files changed, 21 insertions(+)
> 
> diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
> index 83703a0..298d910 100644
> --- a/wpa_supplicant/config.c
> +++ b/wpa_supplicant/config.c
> @@ -3644,6 +3644,9 @@ struct wpa_config *
> wpa_config_alloc_empty(const char *ctrl_interface,
>  	if (driver_param)
>  		config->driver_param = os_strdup(driver_param);
>  
> +#ifndef CONFIG_NO_ROAMING
> +	config->disable_ess_roaming = DEFAULT_DISABLE_ESS_ROAMING;
> +#endif
>  	config->concurrent_assoc_ok = DEFAULT_CONCURRENT_ASSOC_OK;
>  	config->accept_external_scan_results =
> DEFAULT_ACCEPT_EXTERNAL_SCAN_RESULTS;
>  
> @@ -4335,6 +4338,9 @@ static const struct global_parse_data
> global_fields[] = {
>  	{ INT(sched_scan_interval), 0 },
>  	{ INT(tdls_external_control), 0},
>  	{ STR(osu_dir), 0 },
> +#ifndef CONFIG_NO_ROAMING
> +	{ INT(disable_ess_roaming), 0 },
> +#endif
>  	{ INT(concurrent_assoc_ok), 0 },
>  	{ INT(accept_external_scan_results), 0 },
>  	{ STR(wowlan_triggers), 0 },
> diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
> index 81ed410..b04f4a5 100644
> --- a/wpa_supplicant/config.h
> +++ b/wpa_supplicant/config.h
> @@ -33,6 +33,7 @@
>  #define DEFAULT_BSS_EXPIRATION_SCAN_COUNT 2
>  #define DEFAULT_MIN_SCAN_GAP 0
>  #define DEFAULT_MAX_ASSOC_PER_SCAN 25
> +#define DEFAULT_DISABLE_ESS_ROAMING 0
>  #define DEFAULT_CONCURRENT_ASSOC_OK 0
>  #define DEFAULT_ACCEPT_EXTERNAL_SCAN_RESULTS 0
>  #define DEFAULT_MAX_NUM_STA 128
> @@ -857,6 +858,14 @@ struct wpa_config {
>  	 */
>  	unsigned int changed_parameters;
>  
> +#ifndef CONFIG_NO_ROAMING
> +	/* If CONFIG_NO_ROAMING is not enabled, then scan results
> will
> +	 * be used to automatically roam.  Allow disabling this
> automated
> +	 * roaming without having to re-build the binary.
> +	 */
> +	int disable_ess_roaming;
> +#endif
> +
>  	/* By default, scans are no longer shared once one of the
> stations starts
>  	 * to associate.  This makes bringing up lots of vifs take a
> long time.
>  	 * This override below lets us propagate scans even if a
> station is
> diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
> index 1adf57d..2d2c29e 100644
> --- a/wpa_supplicant/events.c
> +++ b/wpa_supplicant/events.c
> @@ -1391,6 +1391,12 @@ static int wpa_supplicant_need_to_roam(struct
> wpa_supplicant *wpa_s,
>  		return 1; /* current BSS not seen in the last scan
> */
>  
>  #ifndef CONFIG_NO_ROAMING
> +	if (wpa_s->conf->disable_ess_roaming) {
> +		wpa_dbg(wpa_s, MSG_DEBUG,
> +			"NOT considering within-ESS reassociation,
> disable_ess_roaming is true");
> +		return 0;
> +	}
> +
>  	wpa_dbg(wpa_s, MSG_DEBUG, "Considering within-ESS
> reassociation");
>  	wpa_dbg(wpa_s, MSG_DEBUG, "Current BSS: " MACSTR
>  		" level=%d snr=%d est_throughput=%u",



More information about the Hostap mailing list