mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Johannes Berg <johannes.berg@intel.com>
 | |
| 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 <mschiffer@universe-factory.net>
 | |
| Fixes: 1bd773c077de ("wireless: set correct mandatory rate flags")
 | |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 | |
| ---
 | |
|  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,
 |