[PATCH] wext: fix maxrate calculation

Dan Williams dcbw at redhat.com
Tue Jul 15 12:24:52 EDT 2008


On Wed, 2008-07-09 at 11:43 -0400, Dan Williams wrote:
> When scan results got moved from wpa_scan_result -> wpa_scan_res, the
> 'maxrate' member was dropped from wpa_scan_res.  The D-Bus interface
> used 'maxrate', which was replaced with wpa_scan_get_max_rate().
> Unfortunately, wpa_scan_get_max_rate() returns 802.11 rate values
> directly from the IE, where 'maxrate' was the rate in bits/second.  The
> supplicant internally fakes an IE for wpa_scan_res from the value of
> wpa_scan_result->maxrate, but interprets ->maxrate as an 802.11 rate
> index.
> 
> As a side-effect, this fixes a soft-break of the D-Bus control API since
> the wpa_scan_res change was introduced.

Ping; any thoughts on this?

> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> index af38cb1..777b097 100644
> --- a/src/drivers/driver_nl80211.c
> +++ b/src/drivers/driver_nl80211.c
> @@ -1237,7 +1237,11 @@ static void wext_get_scan_rate(struct iw_event *iwe,
>  		clen -= sizeof(struct iw_param);
>  		custom += sizeof(struct iw_param);
>  	}
> -	res->maxrate = maxrate;
> +
> +	/* Convert the maxrate from WE-style (b/s units) to
> +	 * 802.11 rates (500000 b/s units).
> +	 */
> +	res->maxrate = maxrate / 500000;
>  }
>  
> 
> diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
> index 4c5ff7b..a7f4ead 100644
> --- a/src/drivers/driver_wext.c
> +++ b/src/drivers/driver_wext.c
> @@ -1364,7 +1364,11 @@ static void wext_get_scan_rate(struct iw_event *iwe,
>  		clen -= sizeof(struct iw_param);
>  		custom += sizeof(struct iw_param);
>  	}
> -	res->maxrate = maxrate;
> +
> +	/* Convert the maxrate from WE-style (b/s units) to
> +	 * 802.11 rates (500000 b/s units).
> +	 */
> +	res->maxrate = maxrate / 500000;
>  }
>  
> 
> diff --git a/wpa_supplicant/ctrl_iface_dbus_handlers.c b/wpa_supplicant/ctrl_iface_dbus_handlers.c
> index 6bf3993..a2d1dcc 100644
> --- a/wpa_supplicant/ctrl_iface_dbus_handlers.c
> +++ b/wpa_supplicant/ctrl_iface_dbus_handlers.c
> @@ -435,7 +435,7 @@ DBusMessage * wpas_dbus_bssid_properties(DBusMessage *message,
>  	if (!wpa_dbus_dict_append_int32(&iter_dict, "level", res->level))
>  		goto error;
>  	if (!wpa_dbus_dict_append_int32(&iter_dict, "maxrate",
> -					wpa_scan_get_max_rate(res)))
> +					(wpa_scan_get_max_rate(res) & 0x7F) * 500000))
>  		goto error;
>  
>  	if (!wpa_dbus_dict_close_write(&iter, &iter_dict))
> 
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap



More information about the HostAP mailing list