1
8
9
18
19
28
29
30
31
32
33
34
35
39
43
44
45
49
50
57
61
62
63
64
65
66
67
68
69
70
74
75
76
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* ... */
#include "utils/includes.h"
#include "utils/common.h"
#include "common/ieee802_11_defs.h"
#include "wpa_supplicant_i.h"
#include "drivers/driver.h"
#include "common/ieee802_11_common.h"
#include "bss.h"
#include "scan.h"8 includes
/* ... */
void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec)
{
int ret;
struct wpa_driver_scan_params *params;
os_sleep(sec, usec);
if (wpa_s->scanning) {
wpa_dbg(wpa_s, MSG_DEBUG, "Already scanning - Return");
return;
}{...}
if (!wpa_s->current_bss) {
wpa_dbg(wpa_s, MSG_INFO, "Current BSS is null - Return");
return;
}{...}
params = os_zalloc(sizeof(*params));
if (!params) {
wpa_printf(MSG_ERROR, "Memory allocation failed");
return;
}{...}
#ifdef CONFIG_WNM
if (wpa_s->wnm_mode) {
params->ssids[0].ssid = wpa_s->current_bss->ssid;
params->ssids[0].ssid_len = wpa_s->current_bss->ssid_len;
params->num_ssids = 1;
}{...}
#endif/* ... */
if (!is_zero_ether_addr(wpa_s->next_scan_bssid)) {
params->bssid = wpa_s->next_scan_bssid;
}{...}
if (wpa_s->next_scan_chan)
params->channel = wpa_s->next_scan_chan;
wpa_s->scan_reason = REASON_WNM_BSS_TRANS_REQ;
ret = wpa_supplicant_trigger_scan(wpa_s, params);
os_free(params);
if (ret < 0) {
wpa_printf(MSG_ERROR, "Failed to issue scan - Return");
return;
}{...}
}{ ... }
/* ... */
const u8 * wpa_scan_get_ie(const struct wpa_scan_res *res, u8 ie)
{
size_t ie_len = res->ie_len;
if (!ie_len)
ie_len = res->beacon_ie_len;
return get_ie((const u8 *) (res + 1), ie_len, ie);
}{ ... }
void wpa_scan_free_params(struct wpa_driver_scan_params *params)
{
if (params == NULL)
return;
os_free((u8 *) params->bssid);
os_free(params);
}{ ... }