Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: wpa_supplicant/bgscan_simple.c

Issue 3020075: CHROMIUMOS: wpa_supplicant: Honor initial bgscan timer (Closed) Base URL: ssh://gitrw.chromium.org/hostap.git
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * WPA Supplicant - background scan and roaming module: simple 2 * WPA Supplicant - background scan and roaming module: simple
3 * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi> 3 * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi>
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify 5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as 6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Alternatively, this software may be distributed under the terms of BSD 9 * Alternatively, this software may be distributed under the terms of BSD
10 * license. 10 * license.
(...skipping 13 matching lines...) Expand all
24 #include "bgscan.h" 24 #include "bgscan.h"
25 25
26 struct bgscan_simple_data { 26 struct bgscan_simple_data {
27 struct wpa_supplicant *wpa_s; 27 struct wpa_supplicant *wpa_s;
28 const struct wpa_ssid *ssid; 28 const struct wpa_ssid *ssid;
29 int scan_interval; 29 int scan_interval;
30 int signal_threshold; 30 int signal_threshold;
31 int short_interval; /* use if signal < threshold */ 31 int short_interval; /* use if signal < threshold */
32 int long_interval; /* use if signal > threshold */ 32 int long_interval; /* use if signal > threshold */
33 struct os_time last_bgscan; 33 struct os_time last_bgscan;
34 int init_scan;
34 }; 35 };
35 36
36 37
37 static void bgscan_simple_timeout(void *eloop_ctx, void *timeout_ctx) 38 static void bgscan_simple_timeout(void *eloop_ctx, void *timeout_ctx)
38 { 39 {
39 struct bgscan_simple_data *data = eloop_ctx; 40 struct bgscan_simple_data *data = eloop_ctx;
40 struct wpa_supplicant *wpa_s = data->wpa_s; 41 struct wpa_supplicant *wpa_s = data->wpa_s;
41 struct wpa_driver_scan_params params; 42 struct wpa_driver_scan_params params;
42 43
43 os_memset(&params, 0, sizeof(params)); 44 os_memset(&params, 0, sizeof(params));
44 params.num_ssids = 1; 45 params.num_ssids = 1;
45 params.ssids[0].ssid = data->ssid->ssid; 46 params.ssids[0].ssid = data->ssid->ssid;
46 params.ssids[0].ssid_len = data->ssid->ssid_len; 47 params.ssids[0].ssid_len = data->ssid->ssid_len;
47 params.freqs = data->ssid->scan_freq; 48 params.freqs = data->ssid->scan_freq;
48 49
49 /* 50 /*
50 * A more advanced bgscan module would learn about most like channels 51 * A more advanced bgscan module would learn about most like channels
51 * over time and request scans only for some channels (probing others 52 * over time and request scans only for some channels (probing others
52 * every now and then) to reduce effect on the data connection. 53 * every now and then) to reduce effect on the data connection.
53 */ 54 */
54 55
55 wpa_printf(MSG_DEBUG, "bgscan simple: Request a background scan"); 56 wpa_printf(MSG_DEBUG, "bgscan simple: Request a background scan");
56 if (wpa_supplicant_trigger_scan(wpa_s, &params)) { 57 if (wpa_supplicant_trigger_scan(wpa_s, &params)) {
57 wpa_printf(MSG_DEBUG, "bgscan simple: Failed to trigger scan"); 58 wpa_printf(MSG_DEBUG, "bgscan simple: Failed to trigger scan");
58 eloop_register_timeout(data->scan_interval, 0, 59 eloop_register_timeout(data->scan_interval, 0,
59 bgscan_simple_timeout, data, NULL); 60 bgscan_simple_timeout, data, NULL);
60 » } else 61 » } else {
61 os_get_time(&data->last_bgscan); 62 os_get_time(&data->last_bgscan);
63 data->init_scan = 0;
64 }
62 } 65 }
63 66
64 67
65 static int bgscan_simple_get_params(struct bgscan_simple_data *data, 68 static int bgscan_simple_get_params(struct bgscan_simple_data *data,
66 const char *params) 69 const char *params)
67 { 70 {
68 const char *pos; 71 const char *pos;
69 72
70 if (params == NULL) 73 if (params == NULL)
71 return 0; 74 return 0;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 data->signal_threshold, data->short_interval, 118 data->signal_threshold, data->short_interval,
116 data->long_interval); 119 data->long_interval);
117 120
118 if (data->signal_threshold && 121 if (data->signal_threshold &&
119 wpa_drv_signal_monitor(wpa_s, data->signal_threshold, 4) < 0) { 122 wpa_drv_signal_monitor(wpa_s, data->signal_threshold, 4) < 0) {
120 wpa_printf(MSG_ERROR, "bgscan simple: Failed to enable " 123 wpa_printf(MSG_ERROR, "bgscan simple: Failed to enable "
121 "signal strength monitoring"); 124 "signal strength monitoring");
122 } 125 }
123 126
124 data->scan_interval = data->short_interval; 127 data->scan_interval = data->short_interval;
128 data->init_scan = 1;
125 eloop_register_timeout(data->scan_interval, 0, bgscan_simple_timeout, 129 eloop_register_timeout(data->scan_interval, 0, bgscan_simple_timeout,
126 data, NULL); 130 data, NULL);
127 return data; 131 return data;
128 } 132 }
129 133
130 134
131 static void bgscan_simple_deinit(void *priv) 135 static void bgscan_simple_deinit(void *priv)
132 { 136 {
133 struct bgscan_simple_data *data = priv; 137 struct bgscan_simple_data *data = priv;
134 eloop_cancel_timeout(bgscan_simple_timeout, data, NULL); 138 eloop_cancel_timeout(bgscan_simple_timeout, data, NULL);
(...skipping 29 matching lines...) Expand all
164 wpa_printf(MSG_DEBUG, "bgscan simple: beacon loss"); 168 wpa_printf(MSG_DEBUG, "bgscan simple: beacon loss");
165 /* TODO: speed up background scanning */ 169 /* TODO: speed up background scanning */
166 } 170 }
167 171
168 172
169 static void bgscan_simple_notify_signal_change(void *priv, int above) 173 static void bgscan_simple_notify_signal_change(void *priv, int above)
170 { 174 {
171 struct bgscan_simple_data *data = priv; 175 struct bgscan_simple_data *data = priv;
172 176
173 if (data->short_interval == data->long_interval || 177 if (data->short_interval == data->long_interval ||
174 » data->signal_threshold == 0) 178 » data->signal_threshold == 0 ||
179 » data->init_scan != 0)
175 return; 180 return;
176 181
177 wpa_printf(MSG_DEBUG, "bgscan simple: signal level changed " 182 wpa_printf(MSG_DEBUG, "bgscan simple: signal level changed "
178 "(above=%d)", above); 183 "(above=%d)", above);
179 if (data->scan_interval == data->long_interval && !above) { 184 if (data->scan_interval == data->long_interval && !above) {
180 wpa_printf(MSG_DEBUG, "bgscan simple: Trigger immediate scan " 185 wpa_printf(MSG_DEBUG, "bgscan simple: Trigger immediate scan "
181 "and start using short bgscan interval"); 186 "and start using short bgscan interval");
182 data->scan_interval = data->short_interval; 187 data->scan_interval = data->short_interval;
183 eloop_cancel_timeout(bgscan_simple_timeout, data, NULL); 188 eloop_cancel_timeout(bgscan_simple_timeout, data, NULL);
184 eloop_register_timeout(0, 0, bgscan_simple_timeout, data, 189 eloop_register_timeout(0, 0, bgscan_simple_timeout, data,
(...skipping 25 matching lines...) Expand all
210 215
211 216
212 const struct bgscan_ops bgscan_simple_ops = { 217 const struct bgscan_ops bgscan_simple_ops = {
213 .name = "simple", 218 .name = "simple",
214 .init = bgscan_simple_init, 219 .init = bgscan_simple_init,
215 .deinit = bgscan_simple_deinit, 220 .deinit = bgscan_simple_deinit,
216 .notify_scan = bgscan_simple_notify_scan, 221 .notify_scan = bgscan_simple_notify_scan,
217 .notify_beacon_loss = bgscan_simple_notify_beacon_loss, 222 .notify_beacon_loss = bgscan_simple_notify_beacon_loss,
218 .notify_signal_change = bgscan_simple_notify_signal_change, 223 .notify_signal_change = bgscan_simple_notify_signal_change,
219 }; 224 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698