12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- From: Johannes Berg <[email protected]>
- Date: Tue, 30 Jan 2018 13:17:38 +0100
- Subject: [PATCH] cfg80211: use only 1Mbps for basic rates in mesh
- Mesh used to use the mandatory rates as basic rates, but we got
- the calculation of mandatory rates wrong until some time ago.
- Fix this this broke interoperability with older versions since
- now more basic rates are required, and thus the MBSS isn't the
- same and the network stops working.
- Fix this by simply using only 1Mbps as the basic rate in 2.4GHz.
- Since the changed mandatory rates only affected 2.4GHz, this is
- all we need to make it work again.
- Reported-and-tested-by: Matthias Schiffer <[email protected]>
- Fixes: 1bd773c077de ("wireless: set correct mandatory rate flags")
- Signed-off-by: Johannes Berg <[email protected]>
- ---
- net/wireless/mesh.c | 25 ++++++++++++++++++++++---
- 1 file changed, 22 insertions(+), 3 deletions(-)
- --- a/net/wireless/mesh.c
- +++ b/net/wireless/mesh.c
- @@ -169,9 +169,28 @@ int __cfg80211_join_mesh(struct cfg80211
- enum nl80211_bss_scan_width scan_width;
- struct ieee80211_supported_band *sband =
- rdev->wiphy.bands[setup->chandef.chan->band];
- - scan_width = cfg80211_chandef_to_scan_width(&setup->chandef);
- - setup->basic_rates = ieee80211_mandatory_rates(sband,
- - scan_width);
- +
- + if (setup->chandef.chan->band == NL80211_BAND_2GHZ) {
- + int i;
- +
- + /*
- + * Older versions selected the mandatory rates for
- + * 2.4 GHz as well, but were broken in that only
- + * 1 Mbps was regarded as a mandatory rate. Keep
- + * using just 1 Mbps as the default basic rate for
- + * mesh to be interoperable with older versions.
- + */
- + for (i = 0; i < sband->n_bitrates; i++) {
- + if (sband->bitrates[i].bitrate == 10) {
- + setup->basic_rates = BIT(i);
- + break;
- + }
- + }
- + } else {
- + scan_width = cfg80211_chandef_to_scan_width(&setup->chandef);
- + setup->basic_rates = ieee80211_mandatory_rates(sband,
- + scan_width);
- + }
- }
-
- err = cfg80211_chandef_dfs_required(&rdev->wiphy,
|