Lines Matching full:data
89 struct bgscan_learn_data *data, const u8 *bssid)
93 dl_list_for_each(bss, &data->bss, struct bgscan_learn_bss, list) {
101 static int bgscan_learn_load(struct bgscan_learn_data *data)
107 if (data->fname == NULL)
110 f = fopen(data->fname, "r");
114 wpa_printf(MSG_DEBUG, "bgscan learn: Loading data from %s",
115 data->fname);
119 wpa_printf(MSG_INFO, "bgscan learn: Invalid data file %s",
120 data->fname);
135 dl_list_add(&data->bss, &bss->list);
146 bss = bgscan_learn_get_bss(data, addr);
161 static void bgscan_learn_save(struct bgscan_learn_data *data)
166 if (data->fname == NULL)
169 wpa_printf(MSG_DEBUG, "bgscan learn: Saving data to %s",
170 data->fname);
172 f = fopen(data->fname, "w");
177 dl_list_for_each(bss, &data->bss, struct bgscan_learn_bss, list) {
182 dl_list_for_each(bss, &data->bss, struct bgscan_learn_bss, list) {
211 static int * bgscan_learn_get_freqs(struct bgscan_learn_data *data,
219 dl_list_for_each(bss, &data->bss, struct bgscan_learn_bss, list) {
235 static int * bgscan_learn_get_probe_freq(struct bgscan_learn_data *data,
240 if (data->supp_freqs == NULL)
243 idx = data->probe_idx;
245 if (!in_array(freqs, data->supp_freqs[idx])) {
247 "%u", data->supp_freqs[idx]);
248 data->probe_idx = idx + 1;
249 if (data->supp_freqs[data->probe_idx] == 0)
250 data->probe_idx = 0;
255 freqs[count] = data->supp_freqs[idx];
262 if (data->supp_freqs[idx] == 0)
264 } while (idx != data->probe_idx);
272 struct bgscan_learn_data *data = eloop_ctx;
273 struct wpa_supplicant *wpa_s = data->wpa_s;
281 params.ssids[0].ssid = data->ssid->ssid;
282 params.ssids[0].ssid_len = data->ssid->ssid_len;
283 if (data->ssid->scan_freq)
284 params.freqs = data->ssid->scan_freq;
286 freqs = bgscan_learn_get_freqs(data, &count);
289 freqs = bgscan_learn_get_probe_freq(data, freqs, count);
310 eloop_register_timeout(data->scan_interval, 0,
311 bgscan_learn_timeout, data, NULL);
313 os_get_reltime(&data->last_bgscan);
318 static int bgscan_learn_get_params(struct bgscan_learn_data *data,
326 data->short_interval = atoi(params);
332 data->signal_threshold = atoi(pos);
340 data->long_interval = atoi(pos);
344 data->fname = os_strdup(pos);
387 struct bgscan_learn_data *data;
389 data = os_zalloc(sizeof(*data));
390 if (data == NULL)
392 dl_list_init(&data->bss);
393 data->wpa_s = wpa_s;
394 data->ssid = ssid;
395 if (bgscan_learn_get_params(data, params) < 0) {
396 os_free(data->fname);
397 os_free(data);
400 if (data->short_interval <= 0)
401 data->short_interval = 30;
402 if (data->long_interval <= 0)
403 data->long_interval = 30;
405 if (bgscan_learn_load(data) < 0) {
406 os_free(data->fname);
407 os_free(data);
413 data->signal_threshold, data->short_interval,
414 data->long_interval);
416 if (data->signal_threshold &&
417 wpa_drv_signal_monitor(wpa_s, data->signal_threshold, 4) < 0) {
422 data->supp_freqs = bgscan_learn_get_supp_freqs(wpa_s);
423 data->scan_interval = data->short_interval;
424 if (data->signal_threshold) {
428 siginfo.current_signal >= data->signal_threshold)
429 data->scan_interval = data->long_interval;
432 eloop_register_timeout(data->scan_interval, 0, bgscan_learn_timeout,
433 data, NULL);
441 os_get_reltime(&data->last_bgscan);
443 return data;
449 struct bgscan_learn_data *data = priv;
452 bgscan_learn_save(data);
453 eloop_cancel_timeout(bgscan_learn_timeout, data, NULL);
454 if (data->signal_threshold)
455 wpa_drv_signal_monitor(data->wpa_s, 0, 0);
456 os_free(data->fname);
457 dl_list_for_each_safe(bss, n, &data->bss, struct bgscan_learn_bss,
462 os_free(data->supp_freqs);
463 os_free(data);
467 static int bgscan_learn_bss_match(struct bgscan_learn_data *data,
476 if (data->ssid->ssid_len != ie[1] ||
477 os_memcmp(data->ssid->ssid, ie + 2, ie[1]) != 0)
487 struct bgscan_learn_data *data = priv;
495 eloop_cancel_timeout(bgscan_learn_timeout, data, NULL);
496 eloop_register_timeout(data->scan_interval, 0, bgscan_learn_timeout,
497 data, NULL);
501 if (!bgscan_learn_bss_match(data, res))
517 if (!bgscan_learn_bss_match(data, res))
520 bss = bgscan_learn_get_bss(data, res->bssid);
534 dl_list_add(&data->bss, &bss->list);
566 struct bgscan_learn_data *data = priv;
570 if (data->short_interval == data->long_interval ||
571 data->signal_threshold == 0)
578 if (data->scan_interval == data->long_interval && !above) {
581 data->scan_interval = data->short_interval;
583 if (now.sec > data->last_bgscan.sec + 1)
585 } else if (data->scan_interval == data->short_interval && above) {
588 data->scan_interval = data->long_interval;
589 eloop_cancel_timeout(bgscan_learn_timeout, data, NULL);
590 eloop_register_timeout(data->scan_interval, 0,
591 bgscan_learn_timeout, data, NULL);
598 if (now.sec > data->last_bgscan.sec + 10)
604 eloop_cancel_timeout(bgscan_learn_timeout, data, NULL);
605 eloop_register_timeout(0, 0, bgscan_learn_timeout, data, NULL);