[RFC 1/3] supplicant: Allow concurrent association by sharing scan results.

Ben Greear greearb at candelatech.com
Tue May 13 01:29:59 EDT 2014


These patches are on top of some other out-of-tree patches I carry,
so mostly they are just to explain what I did to make scanning work
better for my scenario of having lots of station vifs.

Things mostly work as they used to for me now, though I'm not sure
scan propagation to peers is working quite as well as it could be, yet.

Maybe someone will find some pieces that are worthy of upstream code.

Thanks,
Ben


On 05/12/2014 10:27 PM, greearb at candelatech.com wrote:
> From: Ben Greear <greearb at candelatech.com>
>
> This allows one to share scan results and have multiple stations
> associate at the same time.  May cause bugs in some drivers
> so it remains disabled by default.
>
> Signed-off-by: Ben Greear <greearb at candelatech.com>
> ---
>   wpa_supplicant/config.c |    3 +++
>   wpa_supplicant/config.h |    8 ++++++++
>   wpa_supplicant/events.c |    7 ++++++-
>   3 files changed, 17 insertions(+), 1 deletions(-)
>
> diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
> index 154add9..015036c 100644
> --- a/wpa_supplicant/config.c
> +++ b/wpa_supplicant/config.c
> @@ -3348,6 +3348,8 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
>   	if (driver_param)
>   		config->driver_param = os_strdup(driver_param);
>
> +	config->concurrent_assoc_ok = DEFAULT_CONCURRENT_ASSOC_OK;
> +
>   	return config;
>   }
>
> @@ -3963,6 +3965,7 @@ static const struct global_parse_data global_fields[] = {
>   	{ INT(tdls_external_control), 0},
>   	{ STR(osu_dir), 0 },
>   	{ STR(wowlan_triggers), 0 },
> +	{ INT(concurrent_assoc_ok), 0 },
>   };
>
>   #undef FUNC
> diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
> index 61f1e47..845d15b 100644
> --- a/wpa_supplicant/config.h
> +++ b/wpa_supplicant/config.h
> @@ -28,6 +28,7 @@
>   #define DEFAULT_SCAN_CUR_FREQ 0
>   #define DEFAULT_MIN_SCAN_GAP 0
>   #define DEFAULT_MAX_ASSOC_PER_SCAN 25
> +#define DEFAULT_CONCURRENT_ASSOC_OK 0
>
>   #include "config_ssid.h"
>   #include "wps/wps.h"
> @@ -787,6 +788,13 @@ struct wpa_config {
>   	 */
>   	int can_scan_one;
>
> +	/* 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
> +	 * associating.
> +	 */
> +	int concurrent_assoc_ok;
> +
>   	/**
>   	 * disassoc_low_ack - Disassocicate stations with massive packet loss
>   	 */
> diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
> index 9b0e5db..0a1d50d 100644
> --- a/wpa_supplicant/events.c
> +++ b/wpa_supplicant/events.c
> @@ -1349,6 +1349,7 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
>   	if (wpa_s->conf->min_scan_gap &&
>   	    eloop_is_timeout_registered(wpa_supplicant_scan, wpa_s, NULL)) {
>   		/* Min gap will be applied as needed */
> +		wpa_dbg(wpa_s, MSG_DEBUG, "Re-requesting scan to apply min-gap");
>   		wpa_supplicant_req_scan(wpa_s, 1, 0);
>   	}
>
> @@ -1520,10 +1521,12 @@ static void wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
>   					      union wpa_event_data *data)
>   {
>   	struct wpa_supplicant *ifs;
> +	int res;
>
>   	num_assoc_reqs = 0;
>
> -	if (_wpa_supplicant_event_scan_results(wpa_s, data, 1) != 0) {
> +	if (((res = _wpa_supplicant_event_scan_results(wpa_s, data, 1)) < 0) ||
> +	    ((res > 0) && !wpa_s->conf->concurrent_assoc_ok)) {
>   		/*
>   		 * If no scan results could be fetched, then no need to
>   		 * notify those interfaces that did not actually request
> @@ -1531,6 +1534,8 @@ static void wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
>   		 * interface, do not notify other interfaces to avoid concurrent
>   		 * operations during a connection attempt.
>   		 */
> +		wpa_printf(MSG_DEBUG, "event-scan-results not sharable: %d",
> +			   res);
>   		return;
>   	}
>
>

-- 
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com


More information about the HostAP mailing list