Move wpa_supplicant specific scan code away from src/drivers
This fits better in wpa_supplicant/scan.c. Couple of remaining scan_helpers.c functions are currently used in driver wrappers, but they can likely be removed in the future.
This commit is contained in:
		
							parent
							
								
									baac649094
								
							
						
					
					
						commit
						9ba9fa07cc
					
				
					 14 changed files with 224 additions and 204 deletions
				
			
		|  | @ -2272,13 +2272,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, | |||
| 			  union wpa_event_data *data); | ||||
| 
 | ||||
| const u8 * wpa_scan_get_ie(const struct wpa_scan_res *res, u8 ie); | ||||
| const u8 * wpa_scan_get_vendor_ie(const struct wpa_scan_res *res, | ||||
| 				  u32 vendor_type); | ||||
| struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res, | ||||
| 					     u32 vendor_type); | ||||
| int wpa_scan_get_max_rate(const struct wpa_scan_res *res); | ||||
| void wpa_scan_results_free(struct wpa_scan_results *res); | ||||
| void wpa_scan_sort_results(struct wpa_scan_results *res); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -38,80 +38,6 @@ const u8 * wpa_scan_get_ie(const struct wpa_scan_res *res, u8 ie) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| const u8 * wpa_scan_get_vendor_ie(const struct wpa_scan_res *res, | ||||
| 				  u32 vendor_type) | ||||
| { | ||||
| 	const u8 *end, *pos; | ||||
| 
 | ||||
| 	pos = (const u8 *) (res + 1); | ||||
| 	end = pos + res->ie_len; | ||||
| 
 | ||||
| 	while (pos + 1 < end) { | ||||
| 		if (pos + 2 + pos[1] > end) | ||||
| 			break; | ||||
| 		if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 && | ||||
| 		    vendor_type == WPA_GET_BE32(&pos[2])) | ||||
| 			return pos; | ||||
| 		pos += 2 + pos[1]; | ||||
| 	} | ||||
| 
 | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res, | ||||
| 					     u32 vendor_type) | ||||
| { | ||||
| 	struct wpabuf *buf; | ||||
| 	const u8 *end, *pos; | ||||
| 
 | ||||
| 	buf = wpabuf_alloc(res->ie_len); | ||||
| 	if (buf == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	pos = (const u8 *) (res + 1); | ||||
| 	end = pos + res->ie_len; | ||||
| 
 | ||||
| 	while (pos + 1 < end) { | ||||
| 		if (pos + 2 + pos[1] > end) | ||||
| 			break; | ||||
| 		if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 && | ||||
| 		    vendor_type == WPA_GET_BE32(&pos[2])) | ||||
| 			wpabuf_put_data(buf, pos + 2 + 4, pos[1] - 4); | ||||
| 		pos += 2 + pos[1]; | ||||
| 	} | ||||
| 
 | ||||
| 	if (wpabuf_len(buf) == 0) { | ||||
| 		wpabuf_free(buf); | ||||
| 		buf = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	return buf; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int wpa_scan_get_max_rate(const struct wpa_scan_res *res) | ||||
| { | ||||
| 	int rate = 0; | ||||
| 	const u8 *ie; | ||||
| 	int i; | ||||
| 
 | ||||
| 	ie = wpa_scan_get_ie(res, WLAN_EID_SUPP_RATES); | ||||
| 	for (i = 0; ie && i < ie[1]; i++) { | ||||
| 		if ((ie[i + 2] & 0x7f) > rate) | ||||
| 			rate = ie[i + 2] & 0x7f; | ||||
| 	} | ||||
| 
 | ||||
| 	ie = wpa_scan_get_ie(res, WLAN_EID_EXT_SUPP_RATES); | ||||
| 	for (i = 0; ie && i < ie[1]; i++) { | ||||
| 		if ((ie[i + 2] & 0x7f) > rate) | ||||
| 			rate = ie[i + 2] & 0x7f; | ||||
| 	} | ||||
| 
 | ||||
| 	return rate; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void wpa_scan_results_free(struct wpa_scan_results *res) | ||||
| { | ||||
| 	size_t i; | ||||
|  | @ -124,59 +50,3 @@ void wpa_scan_results_free(struct wpa_scan_results *res) | |||
| 	os_free(res->res); | ||||
| 	os_free(res); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Compare function for sorting scan results. Return >0 if @b is considered
 | ||||
|  * better. */ | ||||
| static int wpa_scan_result_compar(const void *a, const void *b) | ||||
| { | ||||
| 	struct wpa_scan_res **_wa = (void *) a; | ||||
| 	struct wpa_scan_res **_wb = (void *) b; | ||||
| 	struct wpa_scan_res *wa = *_wa; | ||||
| 	struct wpa_scan_res *wb = *_wb; | ||||
| 	int wpa_a, wpa_b, maxrate_a, maxrate_b; | ||||
| 
 | ||||
| 	/* WPA/WPA2 support preferred */ | ||||
| 	wpa_a = wpa_scan_get_vendor_ie(wa, WPA_IE_VENDOR_TYPE) != NULL || | ||||
| 		wpa_scan_get_ie(wa, WLAN_EID_RSN) != NULL; | ||||
| 	wpa_b = wpa_scan_get_vendor_ie(wb, WPA_IE_VENDOR_TYPE) != NULL || | ||||
| 		wpa_scan_get_ie(wb, WLAN_EID_RSN) != NULL; | ||||
| 
 | ||||
| 	if (wpa_b && !wpa_a) | ||||
| 		return 1; | ||||
| 	if (!wpa_b && wpa_a) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	/* privacy support preferred */ | ||||
| 	if ((wa->caps & IEEE80211_CAP_PRIVACY) == 0 && | ||||
| 	    (wb->caps & IEEE80211_CAP_PRIVACY)) | ||||
| 		return 1; | ||||
| 	if ((wa->caps & IEEE80211_CAP_PRIVACY) && | ||||
| 	    (wb->caps & IEEE80211_CAP_PRIVACY) == 0) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	/* best/max rate preferred if signal level close enough XXX */ | ||||
| 	if ((wa->level && wb->level && abs(wb->level - wa->level) < 5) || | ||||
| 	    (wa->qual && wb->qual && abs(wb->qual - wa->qual) < 10)) { | ||||
| 		maxrate_a = wpa_scan_get_max_rate(wa); | ||||
| 		maxrate_b = wpa_scan_get_max_rate(wb); | ||||
| 		if (maxrate_a != maxrate_b) | ||||
| 			return maxrate_b - maxrate_a; | ||||
| 	} | ||||
| 
 | ||||
| 	/* use freq for channel preference */ | ||||
| 
 | ||||
| 	/* all things being equal, use signal level; if signal levels are
 | ||||
| 	 * identical, use quality values since some drivers may only report | ||||
| 	 * that value and leave the signal level zero */ | ||||
| 	if (wb->level == wa->level) | ||||
| 		return wb->qual - wa->qual; | ||||
| 	return wb->level - wa->level; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void wpa_scan_sort_results(struct wpa_scan_results *res) | ||||
| { | ||||
| 	qsort(res->res, res->num, sizeof(struct wpa_scan_res *), | ||||
| 	      wpa_scan_result_compar); | ||||
| } | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ | |||
| #include "drivers/driver.h" | ||||
| #include "config_ssid.h" | ||||
| #include "wpa_supplicant_i.h" | ||||
| #include "scan.h" | ||||
| #include "bgscan.h" | ||||
| 
 | ||||
| struct bgscan_simple_data { | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ | |||
| #include "ap.h" | ||||
| #include "notify.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| #include "ctrl_iface.h" | ||||
| 
 | ||||
| extern struct wpa_driver_ops *wpa_drivers[]; | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ | |||
| #include "../notify.h" | ||||
| #include "../wpas_glue.h" | ||||
| #include "../bss.h" | ||||
| #include "../scan.h" | ||||
| #include "dbus_new_helpers.h" | ||||
| #include "dbus_new.h" | ||||
| #include "dbus_new_handlers.h" | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ | |||
| #include "../notify.h" | ||||
| #include "../wpas_glue.h" | ||||
| #include "../bss.h" | ||||
| #include "../scan.h" | ||||
| #include "dbus_old.h" | ||||
| #include "dbus_old_handlers.h" | ||||
| #include "dbus_dict_helpers.h" | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ | |||
| #include "ap.h" | ||||
| #include "bss.h" | ||||
| #include "mlme.h" | ||||
| #include "scan.h" | ||||
| 
 | ||||
| 
 | ||||
| static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s) | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| /*
 | ||||
|  * WPA Supplicant - Scanning | ||||
|  * Copyright (c) 2003-2008, Jouni Malinen <j@w1.fi> | ||||
|  * Copyright (c) 2003-2010, Jouni Malinen <j@w1.fi> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  | @ -12,16 +12,19 @@ | |||
|  * See README and COPYING for more details. | ||||
|  */ | ||||
| 
 | ||||
| #include "includes.h" | ||||
| #include "utils/includes.h" | ||||
| 
 | ||||
| #include "common.h" | ||||
| #include "eloop.h" | ||||
| #include "utils/common.h" | ||||
| #include "utils/eloop.h" | ||||
| #include "common/ieee802_11_defs.h" | ||||
| #include "config.h" | ||||
| #include "wpa_supplicant_i.h" | ||||
| #include "driver_i.h" | ||||
| #include "mlme.h" | ||||
| #include "wps_supplicant.h" | ||||
| #include "notify.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| 
 | ||||
| 
 | ||||
| static void wpa_supplicant_gen_assoc_event(struct wpa_supplicant *wpa_s) | ||||
|  | @ -434,3 +437,176 @@ void wpa_supplicant_notify_scanning(struct wpa_supplicant *wpa_s, | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int wpa_scan_get_max_rate(const struct wpa_scan_res *res) | ||||
| { | ||||
| 	int rate = 0; | ||||
| 	const u8 *ie; | ||||
| 	int i; | ||||
| 
 | ||||
| 	ie = wpa_scan_get_ie(res, WLAN_EID_SUPP_RATES); | ||||
| 	for (i = 0; ie && i < ie[1]; i++) { | ||||
| 		if ((ie[i + 2] & 0x7f) > rate) | ||||
| 			rate = ie[i + 2] & 0x7f; | ||||
| 	} | ||||
| 
 | ||||
| 	ie = wpa_scan_get_ie(res, WLAN_EID_EXT_SUPP_RATES); | ||||
| 	for (i = 0; ie && i < ie[1]; i++) { | ||||
| 		if ((ie[i + 2] & 0x7f) > rate) | ||||
| 			rate = ie[i + 2] & 0x7f; | ||||
| 	} | ||||
| 
 | ||||
| 	return rate; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| const u8 * wpa_scan_get_vendor_ie(const struct wpa_scan_res *res, | ||||
| 				  u32 vendor_type) | ||||
| { | ||||
| 	const u8 *end, *pos; | ||||
| 
 | ||||
| 	pos = (const u8 *) (res + 1); | ||||
| 	end = pos + res->ie_len; | ||||
| 
 | ||||
| 	while (pos + 1 < end) { | ||||
| 		if (pos + 2 + pos[1] > end) | ||||
| 			break; | ||||
| 		if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 && | ||||
| 		    vendor_type == WPA_GET_BE32(&pos[2])) | ||||
| 			return pos; | ||||
| 		pos += 2 + pos[1]; | ||||
| 	} | ||||
| 
 | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res, | ||||
| 					     u32 vendor_type) | ||||
| { | ||||
| 	struct wpabuf *buf; | ||||
| 	const u8 *end, *pos; | ||||
| 
 | ||||
| 	buf = wpabuf_alloc(res->ie_len); | ||||
| 	if (buf == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	pos = (const u8 *) (res + 1); | ||||
| 	end = pos + res->ie_len; | ||||
| 
 | ||||
| 	while (pos + 1 < end) { | ||||
| 		if (pos + 2 + pos[1] > end) | ||||
| 			break; | ||||
| 		if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 && | ||||
| 		    vendor_type == WPA_GET_BE32(&pos[2])) | ||||
| 			wpabuf_put_data(buf, pos + 2 + 4, pos[1] - 4); | ||||
| 		pos += 2 + pos[1]; | ||||
| 	} | ||||
| 
 | ||||
| 	if (wpabuf_len(buf) == 0) { | ||||
| 		wpabuf_free(buf); | ||||
| 		buf = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	return buf; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Compare function for sorting scan results. Return >0 if @b is considered
 | ||||
|  * better. */ | ||||
| static int wpa_scan_result_compar(const void *a, const void *b) | ||||
| { | ||||
| 	struct wpa_scan_res **_wa = (void *) a; | ||||
| 	struct wpa_scan_res **_wb = (void *) b; | ||||
| 	struct wpa_scan_res *wa = *_wa; | ||||
| 	struct wpa_scan_res *wb = *_wb; | ||||
| 	int wpa_a, wpa_b, maxrate_a, maxrate_b; | ||||
| 
 | ||||
| 	/* WPA/WPA2 support preferred */ | ||||
| 	wpa_a = wpa_scan_get_vendor_ie(wa, WPA_IE_VENDOR_TYPE) != NULL || | ||||
| 		wpa_scan_get_ie(wa, WLAN_EID_RSN) != NULL; | ||||
| 	wpa_b = wpa_scan_get_vendor_ie(wb, WPA_IE_VENDOR_TYPE) != NULL || | ||||
| 		wpa_scan_get_ie(wb, WLAN_EID_RSN) != NULL; | ||||
| 
 | ||||
| 	if (wpa_b && !wpa_a) | ||||
| 		return 1; | ||||
| 	if (!wpa_b && wpa_a) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	/* privacy support preferred */ | ||||
| 	if ((wa->caps & IEEE80211_CAP_PRIVACY) == 0 && | ||||
| 	    (wb->caps & IEEE80211_CAP_PRIVACY)) | ||||
| 		return 1; | ||||
| 	if ((wa->caps & IEEE80211_CAP_PRIVACY) && | ||||
| 	    (wb->caps & IEEE80211_CAP_PRIVACY) == 0) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	/* best/max rate preferred if signal level close enough XXX */ | ||||
| 	if ((wa->level && wb->level && abs(wb->level - wa->level) < 5) || | ||||
| 	    (wa->qual && wb->qual && abs(wb->qual - wa->qual) < 10)) { | ||||
| 		maxrate_a = wpa_scan_get_max_rate(wa); | ||||
| 		maxrate_b = wpa_scan_get_max_rate(wb); | ||||
| 		if (maxrate_a != maxrate_b) | ||||
| 			return maxrate_b - maxrate_a; | ||||
| 	} | ||||
| 
 | ||||
| 	/* use freq for channel preference */ | ||||
| 
 | ||||
| 	/* all things being equal, use signal level; if signal levels are
 | ||||
| 	 * identical, use quality values since some drivers may only report | ||||
| 	 * that value and leave the signal level zero */ | ||||
| 	if (wb->level == wa->level) | ||||
| 		return wb->qual - wa->qual; | ||||
| 	return wb->level - wa->level; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * wpa_supplicant_get_scan_results - Get scan results | ||||
|  * @wpa_s: Pointer to wpa_supplicant data | ||||
|  * @info: Information about what was scanned or %NULL if not available | ||||
|  * @new_scan: Whether a new scan was performed | ||||
|  * Returns: Scan results, %NULL on failure | ||||
|  * | ||||
|  * This function request the current scan results from the driver and updates | ||||
|  * the local BSS list wpa_s->bss. The caller is responsible for freeing the | ||||
|  * results with wpa_scan_results_free(). | ||||
|  */ | ||||
| struct wpa_scan_results * | ||||
| wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s, | ||||
| 				struct scan_info *info, int new_scan) | ||||
| { | ||||
| 	struct wpa_scan_results *scan_res; | ||||
| 	size_t i; | ||||
| 
 | ||||
| 	if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME) | ||||
| 		scan_res = ieee80211_sta_get_scan_results(wpa_s); | ||||
| 	else | ||||
| 		scan_res = wpa_drv_get_scan_results2(wpa_s); | ||||
| 	if (scan_res == NULL) { | ||||
| 		wpa_printf(MSG_DEBUG, "Failed to get scan results"); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	qsort(scan_res->res, scan_res->num, sizeof(struct wpa_scan_res *), | ||||
| 	      wpa_scan_result_compar); | ||||
| 
 | ||||
| 	wpa_bss_update_start(wpa_s); | ||||
| 	for (i = 0; i < scan_res->num; i++) | ||||
| 		wpa_bss_update_scan_res(wpa_s, scan_res->res[i]); | ||||
| 	wpa_bss_update_end(wpa_s, info, new_scan); | ||||
| 
 | ||||
| 	return scan_res; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int wpa_supplicant_update_scan_results(struct wpa_supplicant *wpa_s) | ||||
| { | ||||
| 	struct wpa_scan_results *scan_res; | ||||
| 	scan_res = wpa_supplicant_get_scan_results(wpa_s, NULL, 0); | ||||
| 	if (scan_res == NULL) | ||||
| 		return -1; | ||||
| 	wpa_scan_results_free(scan_res); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										35
									
								
								wpa_supplicant/scan.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								wpa_supplicant/scan.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| /*
 | ||||
|  * WPA Supplicant - Scanning | ||||
|  * Copyright (c) 2003-2010, Jouni Malinen <j@w1.fi> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of BSD | ||||
|  * license. | ||||
|  * | ||||
|  * See README and COPYING for more details. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef SCAN_H | ||||
| #define SCAN_H | ||||
| 
 | ||||
| int wpa_supplicant_enabled_networks(struct wpa_config *conf); | ||||
| void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec); | ||||
| void wpa_supplicant_cancel_scan(struct wpa_supplicant *wpa_s); | ||||
| void wpa_supplicant_notify_scanning(struct wpa_supplicant *wpa_s, | ||||
| 				    int scanning); | ||||
| struct wpa_driver_scan_params; | ||||
| int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s, | ||||
| 				struct wpa_driver_scan_params *params); | ||||
| struct wpa_scan_results * | ||||
| wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s, | ||||
| 				struct scan_info *info, int new_scan); | ||||
| int wpa_supplicant_update_scan_results(struct wpa_supplicant *wpa_s); | ||||
| const u8 * wpa_scan_get_vendor_ie(const struct wpa_scan_res *res, | ||||
| 				  u32 vendor_type); | ||||
| struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res, | ||||
| 					     u32 vendor_type); | ||||
| 
 | ||||
| #endif /* SCAN_H */ | ||||
|  | @ -28,6 +28,7 @@ | |||
| #include "notify.h" | ||||
| #include "blacklist.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| #include "sme.h" | ||||
| 
 | ||||
| void sme_authenticate(struct wpa_supplicant *wpa_s, | ||||
|  |  | |||
|  | @ -45,6 +45,7 @@ | |||
| #include "notify.h" | ||||
| #include "bgscan.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| 
 | ||||
| const char *wpa_supplicant_version = | ||||
| "wpa_supplicant v" VERSION_STR "\n" | ||||
|  | @ -1566,56 +1567,6 @@ int wpa_supplicant_set_debug_params(struct wpa_global *global, int debug_level, | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * wpa_supplicant_get_scan_results - Get scan results | ||||
|  * @wpa_s: Pointer to wpa_supplicant data | ||||
|  * @info: Information about what was scanned or %NULL if not available | ||||
|  * @new_scan: Whether a new scan was performed | ||||
|  * Returns: Scan results, %NULL on failure | ||||
|  * | ||||
|  * This function request the current scan results from the driver and updates | ||||
|  * the local BSS list wpa_s->bss. The caller is responsible for freeing the | ||||
|  * results with wpa_scan_results_free(). | ||||
|  */ | ||||
| struct wpa_scan_results * | ||||
| wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s, | ||||
| 				struct scan_info *info, int new_scan) | ||||
| { | ||||
| 	struct wpa_scan_results *scan_res; | ||||
| 	size_t i; | ||||
| 
 | ||||
| 	if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME) | ||||
| 		scan_res = ieee80211_sta_get_scan_results(wpa_s); | ||||
| 	else | ||||
| 		scan_res = wpa_drv_get_scan_results2(wpa_s); | ||||
| 	if (scan_res == NULL) { | ||||
| 		wpa_printf(MSG_DEBUG, "Failed to get scan results"); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	wpa_scan_sort_results(scan_res); | ||||
| 
 | ||||
| 	wpa_bss_update_start(wpa_s); | ||||
| 	for (i = 0; i < scan_res->num; i++) | ||||
| 		wpa_bss_update_scan_res(wpa_s, scan_res->res[i]); | ||||
| 	wpa_bss_update_end(wpa_s, info, new_scan); | ||||
| 
 | ||||
| 	return scan_res; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int wpa_supplicant_update_scan_results(struct wpa_supplicant *wpa_s) | ||||
| { | ||||
| 	struct wpa_scan_results *scan_res; | ||||
| 	scan_res = wpa_supplicant_get_scan_results(wpa_s, NULL, 0); | ||||
| 	if (scan_res == NULL) | ||||
| 		return -1; | ||||
| 	wpa_scan_results_free(scan_res); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * wpa_supplicant_get_ssid - Get a pointer to the current network structure | ||||
|  * @wpa_s: Pointer to wpa_supplicant data | ||||
|  |  | |||
|  | @ -444,10 +444,6 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s, | |||
| void wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s, | ||||
| 				       struct wpa_ssid *ssid); | ||||
| void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s); | ||||
| struct wpa_scan_results * | ||||
| wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s, | ||||
| 				struct scan_info *info, int new_scan); | ||||
| int wpa_supplicant_update_scan_results(struct wpa_supplicant *wpa_s); | ||||
| void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr); | ||||
| void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s, | ||||
| 				     int sec, int usec); | ||||
|  | @ -490,16 +486,6 @@ void wpa_supplicant_terminate_proc(struct wpa_global *global); | |||
| void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr, | ||||
| 			     const u8 *buf, size_t len); | ||||
| 
 | ||||
| /* scan.c */ | ||||
| int wpa_supplicant_enabled_networks(struct wpa_config *conf); | ||||
| void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec); | ||||
| void wpa_supplicant_cancel_scan(struct wpa_supplicant *wpa_s); | ||||
| void wpa_supplicant_notify_scanning(struct wpa_supplicant *wpa_s, | ||||
| 				    int scanning); | ||||
| struct wpa_driver_scan_params; | ||||
| int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s, | ||||
| 				struct wpa_driver_scan_params *params); | ||||
| 
 | ||||
| /* events.c */ | ||||
| void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s); | ||||
| 
 | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ | |||
| #include "wpas_glue.h" | ||||
| #include "wps_supplicant.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| 
 | ||||
| 
 | ||||
| #ifndef CONFIG_NO_CONFIG_BLOBS | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ | |||
| #include "notify.h" | ||||
| #include "blacklist.h" | ||||
| #include "bss.h" | ||||
| #include "scan.h" | ||||
| #include "wps_supplicant.h" | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jouni Malinen
						Jouni Malinen