SME: Correctly check mode HT caps for enabling OBSS scan
Don't assume the 11g mode is always first in the list of mode (sometimes it isn't). Traverse the array of modes and check the HT40 capability is turned on for 11g. Signed-hostap: Arik Nemtsov <arik@wizery.com>
This commit is contained in:
		
							parent
							
								
									8dba4aef11
								
							
						
					
					
						commit
						b6871ebb17
					
				
					 1 changed files with 16 additions and 3 deletions
				
			
		|  | @ -843,6 +843,8 @@ void sme_sched_obss_scan(struct wpa_supplicant *wpa_s, int enable) | ||||||
| 	const u8 *ie; | 	const u8 *ie; | ||||||
| 	struct wpa_bss *bss = wpa_s->current_bss; | 	struct wpa_bss *bss = wpa_s->current_bss; | ||||||
| 	struct wpa_ssid *ssid = wpa_s->current_ssid; | 	struct wpa_ssid *ssid = wpa_s->current_ssid; | ||||||
|  | 	struct hostapd_hw_modes *hw_mode = NULL; | ||||||
|  | 	int i; | ||||||
| 
 | 
 | ||||||
| 	eloop_cancel_timeout(sme_obss_scan_timeout, wpa_s, NULL); | 	eloop_cancel_timeout(sme_obss_scan_timeout, wpa_s, NULL); | ||||||
| 	wpa_s->sme.sched_obss_scan = 0; | 	wpa_s->sme.sched_obss_scan = 0; | ||||||
|  | @ -853,9 +855,20 @@ void sme_sched_obss_scan(struct wpa_supplicant *wpa_s, int enable) | ||||||
| 	    ssid->mode != IEEE80211_MODE_INFRA) | 	    ssid->mode != IEEE80211_MODE_INFRA) | ||||||
| 		return; /* Not using station SME in wpa_supplicant */ | 		return; /* Not using station SME in wpa_supplicant */ | ||||||
| 
 | 
 | ||||||
| 	if (!wpa_s->hw.modes || | 	if (!wpa_s->hw.modes) | ||||||
| 	    !(wpa_s->hw.modes->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET)) | 		return; | ||||||
| 		return; /* Driver does not support HT40 */ | 
 | ||||||
|  | 	/* only HT caps in 11g mode are relevant */ | ||||||
|  | 	for (i = 0; i < wpa_s->hw.num_modes; i++) { | ||||||
|  | 		hw_mode = &wpa_s->hw.modes[i]; | ||||||
|  | 		if (hw_mode->mode == HOSTAPD_MODE_IEEE80211G) | ||||||
|  | 			break; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* Driver does not support HT40 for 11g or doesn't have 11g. */ | ||||||
|  | 	if (i == wpa_s->hw.num_modes || !hw_mode || | ||||||
|  | 	    !(hw_mode->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET)) | ||||||
|  | 		return; | ||||||
| 
 | 
 | ||||||
| 	if (bss == NULL || bss->freq < 2400 || bss->freq > 2500) | 	if (bss == NULL || bss->freq < 2400 || bss->freq > 2500) | ||||||
| 		return; /* Not associated on 2.4 GHz band */ | 		return; /* Not associated on 2.4 GHz band */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Arik Nemtsov
						Arik Nemtsov