Message ID | 1365941518-4963-1-git-send-email-jogo@openwrt.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Sun, Apr 14, 2013 at 05:11:58AM -0700, Jonas Gorski wrote: > This rate causes an overflow in the extended rates IE's data rate field, > with the overflowing bit setting the Basic Rate Set membership. This > results in a bogus 8 Mpbs basic rate, making clients checking them refuse > association. > > Since the rate is likely unused anyway (HT will yield better rates between > supporting chips), we can just remove it. > > This fixes association from wpa_supplicant and Android 4.x and newer. Hi Jonas, If you are using hostapd, have you tried using 'supported_rates' and/or 'basic_rates' being set to correct rates in the hostapd.conf. Thanks Yogesh -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 15 Apr 2013 12:08:38 +0530 Yogesh Ashok Powar <yogeshp@marvell.com> wrote: > On Sun, Apr 14, 2013 at 05:11:58AM -0700, Jonas Gorski wrote: > > This rate causes an overflow in the extended rates IE's data rate > > field, with the overflowing bit setting the Basic Rate Set > > membership. This results in a bogus 8 Mpbs basic rate, making > > clients checking them refuse association. > > > > Since the rate is likely unused anyway (HT will yield better rates > > between supporting chips), we can just remove it. > > > > This fixes association from wpa_supplicant and Android 4.x and > > newer. > > Hi Jonas, > > If you are using hostapd, have you tried using 'supported_rates' > and/or 'basic_rates' being set to correct rates in the hostapd.conf. Not sure if that helps. The main problem is that this rate is unadvertisable in Beacons, as (Extended) Supported Rates (802.11-2012 8.4.2.3) encodes the rates as u8, with seven bits for the rate in units of 500 kb/s, which isn't enough for 72 Mbps; the maximum is 63.5 Mbps. The result is that it spills into the MSB, marking it as a "Basic Rate" even though it isn't marked as such by hostapd. It's just that 72 Mbps => 0x90 => "8 Mbps, Basic Rate". This is partially a bug in hostapd, it should probably reject rates not encodable. So AFAICT the only way to use it in hostapd is to not use it. Which makes me wonder how or if this rate is usable at all in 802.11 context, without a proprietary way of telling the other end that this rate is available, and therefore if it even makes sense to keep. Jonas -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index ee1778c..6820fce 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c @@ -193,10 +193,10 @@ struct mwl8k_priv { struct rxd_ops *rxd_ops; struct ieee80211_supported_band band_24; struct ieee80211_channel channels_24[14]; - struct ieee80211_rate rates_24[14]; + struct ieee80211_rate rates_24[13]; struct ieee80211_supported_band band_50; struct ieee80211_channel channels_50[4]; - struct ieee80211_rate rates_50[9]; + struct ieee80211_rate rates_50[8]; u32 ap_macids_supported; u32 sta_macids_supported; @@ -366,7 +366,6 @@ static const struct ieee80211_rate mwl8k_rates_24[] = { { .bitrate = 360, .hw_value = 72, }, { .bitrate = 480, .hw_value = 96, }, { .bitrate = 540, .hw_value = 108, }, - { .bitrate = 720, .hw_value = 144, }, }; static const struct ieee80211_channel mwl8k_channels_50[] = { @@ -385,7 +384,6 @@ static const struct ieee80211_rate mwl8k_rates_50[] = { { .bitrate = 360, .hw_value = 72, }, { .bitrate = 480, .hw_value = 96, }, { .bitrate = 540, .hw_value = 108, }, - { .bitrate = 720, .hw_value = 144, }, }; /* Set or get info from Firmware */ @@ -3083,11 +3081,11 @@ static void legacy_rate_mask_to_array(u8 *rates, u32 mask) int j; /* - * Clear nonstandard rates 4 and 13. + * Clear nonstandard rate 4. */ mask &= 0x1fef; - for (i = 0, j = 0; i < 14; i++) { + for (i = 0, j = 0; i < 13; i++) { if (mask & (1 << i)) rates[j++] = mwl8k_rates_24[i].hw_value; }
This rate causes an overflow in the extended rates IE's data rate field, with the overflowing bit setting the Basic Rate Set membership. This results in a bogus 8 Mpbs basic rate, making clients checking them refuse association. Since the rate is likely unused anyway (HT will yield better rates between supporting chips), we can just remove it. This fixes association from wpa_supplicant and Android 4.x and newer. Signed-off-by: Jonas Gorski <jogo@openwrt.org> --- Changes from RFC -> v1 * only remove 72 Mbps, as that's the problematic one * reword everything, add real cause drivers/net/wireless/mwl8k.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)