MBO: Prevent association to APs that explicitly disallow this
Prevent association to MBO APs that have association disallowed attribute in MBO IE in Beacon or Probe Response frames. Signed-off-by: David Spinadel <david.spinadel@intel.com>
This commit is contained in:
		
							parent
							
								
									c5d193d7b3
								
							
						
					
					
						commit
						cb06cf3456
					
				
					 3 changed files with 32 additions and 0 deletions
				
			
		|  | @ -827,6 +827,9 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s, | |||
| 	const u8 *ie; | ||||
| 	struct wpa_ssid *ssid; | ||||
| 	int osen; | ||||
| #ifdef CONFIG_MBO | ||||
| 	const u8 *assoc_disallow; | ||||
| #endif /* CONFIG_MBO */ | ||||
| 
 | ||||
| 	ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE); | ||||
| 	wpa_ie_len = ie ? ie[1] : 0; | ||||
|  | @ -1064,6 +1067,16 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s, | |||
| 				(unsigned int) diff.usec); | ||||
| 			continue; | ||||
| 		} | ||||
| #ifdef CONFIG_MBO | ||||
| 		assoc_disallow = wpas_mbo_get_bss_attr( | ||||
| 			bss, MBO_ATTR_ID_ASSOC_DISALLOW); | ||||
| 		if (assoc_disallow && assoc_disallow[1] >= 1) { | ||||
| 			wpa_dbg(wpa_s, MSG_DEBUG, | ||||
| 				"   skip - MBO association disallowed (reason %u)", | ||||
| 				assoc_disallow[2]); | ||||
| 			continue; | ||||
| 		} | ||||
| #endif /* CONFIG_MBO */ | ||||
| 
 | ||||
| 		/* Matching configuration found */ | ||||
| 		return ssid; | ||||
|  |  | |||
|  | @ -36,6 +36,24 @@ static int wpas_mbo_validate_non_pref_chan(u8 oper_class, u8 chan, u8 reason) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| const u8 * wpas_mbo_get_bss_attr(struct wpa_bss *bss, enum mbo_attr_id attr) | ||||
| { | ||||
| 	const u8 *mbo, *end; | ||||
| 
 | ||||
| 	if (!bss) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	mbo = wpa_bss_get_vendor_ie(bss, MBO_IE_VENDOR_TYPE); | ||||
| 	if (!mbo) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	end = mbo + 2 + mbo[1]; | ||||
| 	mbo += MBO_IE_HEADER; | ||||
| 
 | ||||
| 	return get_ie(mbo, end - mbo, attr); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void wpas_mbo_non_pref_chan_attr_body(struct wpa_supplicant *wpa_s, | ||||
| 					     struct wpabuf *mbo, | ||||
| 					     u8 start, u8 end) | ||||
|  |  | |||
|  | @ -1144,6 +1144,7 @@ void wpas_rrm_handle_link_measurement_request(struct wpa_supplicant *wpa_s, | |||
| 
 | ||||
| /* MBO functions */ | ||||
| int wpas_mbo_ie(struct wpa_supplicant *wpa_s, u8 *buf, size_t len); | ||||
| const u8 * wpas_mbo_get_bss_attr(struct wpa_bss *bss, enum mbo_attr_id attr); | ||||
| int wpas_mbo_update_non_pref_chan(struct wpa_supplicant *wpa_s, | ||||
| 				  const char *non_pref_chan); | ||||
| void wpas_mbo_scan_ie(struct wpa_supplicant *wpa_s, struct wpabuf *ie); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 David Spinadel
						David Spinadel