Search Linux Wireless

Re: [PATCH] mac80211: reject/clear user rate mask if not usable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8-3-2017 11:20, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg@xxxxxxxxx>
> 
> If the user rate mask results in no (basic) rates being usable,
> clear it. Also, if we're already operating when it's set, reject
> it instead.
> 
> Technically, selecting basic rates as the criterion is a bit too
> restrictive, but calculating the usable rates over all stations
> (e.g. in AP mode) is harder, and all stations must support the
> basic rates. Similarly, in client mode, the basic rates will be
> used anyway for control frames.
> 
> This fixes the "no supported rates (...) in rate_mask ..." warning
> that occurs on TX when you've selected a rate mask that's not
> compatible with the connection (e.g. an AP that enables only the
> rates 36, 48, 54 and you've selected only 6, 9, 12.)
> 
> Reported-by: Kirtika Ruchandani <kirtika@xxxxxxxxxx>
> Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
> ---
>  net/mac80211/cfg.c  | 18 +++++++++++++++++-
>  net/mac80211/mlme.c |  2 ++
>  net/mac80211/rate.c | 29 +++++++++++++++++++++++++++++
>  net/mac80211/rate.h |  2 ++
>  4 files changed, 50 insertions(+), 1 deletion(-)
> 

[...]

> diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
> index 094c15645228..8c8d178ba798 100644
> --- a/net/mac80211/rate.c
> +++ b/net/mac80211/rate.c
> @@ -2,6 +2,7 @@
>   * Copyright 2002-2005, Instant802 Networks, Inc.
>   * Copyright 2005-2006, Devicescape Software, Inc.
>   * Copyright (c) 2006 Jiri Benc <jbenc@xxxxxxx>
> + * Copyright 2017	Intel Deutschland GmbH
>   *
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License version 2 as
> @@ -241,6 +242,34 @@ static void rate_control_free(struct ieee80211_local *local,
>  	kfree(ctrl_ref);
>  }
>  
> +void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata)
> +{
> +	struct ieee80211_local *local = sdata->local;
> +	struct ieee80211_supported_band *sband;
> +	u32 user_mask, basic_rates = sdata->vif.bss_conf.basic_rates;
> +	enum nl80211_band band;
> +
> +	if (WARN_ON(!sdata->vif.bss_conf.chandef.chan))
> +		return;
> +
> +	if (WARN_ON_ONCE(!basic_rates))
> +		return;
> +
> +	band = sdata->vif.bss_conf.chandef.chan->band;
> +	user_mask = sdata->rc_rateidx_mask[band];
> +	sband = local->hw.wiphy->bands[band];
> +
> +	basic_rates = sdata->vif.bss_conf.basic_rates;

basic_rates has already been initialized (and checked) above so this is
redundant.

Regards,
Arend



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux