[PATCH] wpa_supplicant: use signal quality if level is not available for comparing max rates

Helmut Schaa helmut.schaa at googlemail.com
Thu Feb 5 12:47:48 EST 2009


Jouni, did you miss that patch?

Thanks,
Helmut

Am Dienstag, 27. Januar 2009 schrieb Helmut Schaa:
> Some drivers (for example ipw2100) do not report signal level but only
> signal quality. wpa_supplicant already uses the signal quality if no level
> is reported and all other comparision parameters are equal to sort the scan
> results. However, if two APs have different max rates and the signal level
> does not differ much wpa_supplicant chooses the AP with the higher max rate.
> 
> In case of ipw2100 no signal level is reported and thus wpa_supplicant ever
> takes the AP with higher max rate even if its signal quality is really low.
> For example if AP1 (max rate 11Mb/s, 80% signal quality) and AP2 (max rate
> 54Mb/s, 20% signal quality) are found by a scan wpa_supplicant would choose
> AP2.
> 
> Hence, if no signal level is reported depend on the signal quality if max
> rate should be compared. A quality difference of 10% is considered
> acceptable in favour of the higher max rate.
> 
> Signed-off-by: Helmut Schaa <helmut.schaa at googlemail.com>
> ---
> 
> diff --git a/src/drivers/scan_helpers.c b/src/drivers/scan_helpers.c
> index 72e360f..5047214 100644
> --- a/src/drivers/scan_helpers.c
> +++ b/src/drivers/scan_helpers.c
> @@ -156,10 +156,13 @@ static int wpa_scan_result_compar(const void *a, const void *b)
>  		return -1;
>  
>  	/* best/max rate preferred if signal level close enough XXX */
> -	maxrate_a = wpa_scan_get_max_rate(wa);
> -	maxrate_b = wpa_scan_get_max_rate(wb);
> -	if (maxrate_a != maxrate_b && abs(wb->level - wa->level) < 5)
> -		return maxrate_b - maxrate_a;
> +	if ( (wb->level != 0 && wa->level != 0 && abs(wb->level - wa->level) < 5) ||
> +	     (abs(wb->qual - wa->qual) < 10) ) {
> +		maxrate_a = wpa_scan_get_max_rate(wa);
> +		maxrate_b = wpa_scan_get_max_rate(wb);
> +		if (maxrate_a != maxrate_b)
> +			return maxrate_b - maxrate_a;
> +	}
>  
>  	/* use freq for channel preference */
>  
> 




More information about the HostAP mailing list