blob: fb639423230c0b4e86d3d5103b94af2802042e28 [file] [log] [blame]
Dmitry Shmidtfb45fd52015-01-05 13:08:17 -08001/*
2 * BSS Load Element / Channel Utilization
3 * Copyright (c) 2014, Qualcomm Atheros, Inc.
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#include "utils/includes.h"
10
11#include "utils/common.h"
12#include "utils/eloop.h"
13#include "hostapd.h"
14#include "bss_load.h"
15#include "ap_drv_ops.h"
16#include "beacon.h"
17
18
19static void update_channel_utilization(void *eloop_data, void *user_data)
20{
21 struct hostapd_data *hapd = eloop_data;
22 unsigned int sec, usec;
23 int err;
24
25 if (!(hapd->beacon_set_done && hapd->started))
26 return;
27
28 err = hostapd_drv_get_survey(hapd, hapd->iface->freq);
29 if (err) {
30 wpa_printf(MSG_ERROR, "BSS Load: Failed to get survey data");
31 return;
32 }
33
34 ieee802_11_set_beacon(hapd);
35
36 sec = ((hapd->bss_load_update_timeout / 1000) * 1024) / 1000;
37 usec = (hapd->bss_load_update_timeout % 1000) * 1024;
38 eloop_register_timeout(sec, usec, update_channel_utilization, hapd,
39 NULL);
40}
41
42
43int bss_load_update_init(struct hostapd_data *hapd)
44{
45 struct hostapd_bss_config *conf = hapd->conf;
46 struct hostapd_config *iconf = hapd->iconf;
47 unsigned int sec, usec;
48
49 if (!conf->bss_load_update_period || !iconf->beacon_int)
50 return -1;
51
52 hapd->bss_load_update_timeout = conf->bss_load_update_period *
53 iconf->beacon_int;
54 sec = ((hapd->bss_load_update_timeout / 1000) * 1024) / 1000;
55 usec = (hapd->bss_load_update_timeout % 1000) * 1024;
56 eloop_register_timeout(sec, usec, update_channel_utilization, hapd,
57 NULL);
58 return 0;
59}
60
61
62void bss_load_update_deinit(struct hostapd_data *hapd)
63{
64 eloop_cancel_timeout(update_channel_utilization, hapd, NULL);
65}