dawn_uci: set default values

This sets the default metric values to the ones currently used in the
openwrt package config file.

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
This commit is contained in:
Eneas U de Queiroz 2021-08-04 10:16:58 -03:00 committed by Polynomdivision
parent 6eb747b4d4
commit 2b1a53cddc

View file

@ -12,14 +12,17 @@
static struct uci_context *uci_ctx = NULL;
static struct uci_package *uci_pkg = NULL;
// why is this not included in uci lib...?!
// found here: https://github.com/br101/pingcheck/blob/master/uci.c
static int uci_lookup_option_int(struct uci_context *uci, struct uci_section *s,
const char *name) {
const char *str = uci_lookup_option_string(uci, s, name);
return str == NULL ? -1 : atoi(str);
static void set_if_present_int(int *ret, struct uci_section *s, const char* option) {
const char *str;
if (s && (str = uci_lookup_option_string(uci_ctx, s, option)))
*ret = atoi(str);
}
#define DAWN_SET_CONFIG_INT(m, s, conf) \
set_if_present_int(&m.conf, s, #conf)
void uci_get_hostname(char* hostname)
{
char path[]= "system.@system[0].hostname";
@ -53,8 +56,29 @@ void uci_get_hostname(char* hostname)
dawn_unregmem(c);
}
static void set_if_present_time_t(time_t *ret, struct uci_section *s, const char* option) {
const char *str;
if (s && (str = uci_lookup_option_string(uci_ctx, s, option)))
*ret = atoi(str);
}
#define DAWN_SET_CONFIG_TIME(m, s, conf) \
set_if_present_time_t(&m.conf, s, #conf)
struct time_config_s uci_get_time_config() {
struct time_config_s ret;
struct time_config_s ret = {
.update_client = 10,
.remove_client = 15,
.remove_probe = 30,
.update_hostapd = 10,
.remove_ap = 460,
.update_tcp_con = 10,
.denied_req_threshold = 30,
.update_chan_util = 5,
.update_beacon_reports = 20,
};
struct uci_element *e;
uci_foreach_element(&uci_pkg->sections, e)
@ -62,15 +86,15 @@ struct time_config_s uci_get_time_config() {
struct uci_section *s = uci_to_section(e);
if (strcmp(s->type, "times") == 0) {
ret.update_client = uci_lookup_option_int(uci_ctx, s, "update_client");
ret.remove_client = uci_lookup_option_int(uci_ctx, s, "remove_client");
ret.remove_probe = uci_lookup_option_int(uci_ctx, s, "remove_probe");
ret.update_hostapd = uci_lookup_option_int(uci_ctx, s, "update_hostapd");
ret.remove_ap = uci_lookup_option_int(uci_ctx, s, "remove_ap");
ret.update_tcp_con = uci_lookup_option_int(uci_ctx, s, "update_tcp_con");
ret.denied_req_threshold = uci_lookup_option_int(uci_ctx, s, "denied_req_threshold");
ret.update_chan_util = uci_lookup_option_int(uci_ctx, s, "update_chan_util");
ret.update_beacon_reports = uci_lookup_option_int(uci_ctx, s, "update_beacon_reports");
DAWN_SET_CONFIG_TIME(ret, s, update_client);
DAWN_SET_CONFIG_TIME(ret, s, remove_client);
DAWN_SET_CONFIG_TIME(ret, s, remove_probe);
DAWN_SET_CONFIG_TIME(ret, s, update_hostapd);
DAWN_SET_CONFIG_TIME(ret, s, remove_ap);
DAWN_SET_CONFIG_TIME(ret, s, update_tcp_con);
DAWN_SET_CONFIG_TIME(ret, s, denied_req_threshold);
DAWN_SET_CONFIG_TIME(ret, s, update_chan_util);
DAWN_SET_CONFIG_TIME(ret, s, update_beacon_reports);
return ret;
}
}
@ -116,13 +140,6 @@ static int parse_rrm_mode(int *rrm_mode_order, const char *mode_string) {
}
static void set_if_present(int *ret, struct uci_section *s, const char* option) {
const char *str;
if (s && (str = uci_lookup_option_string(uci_ctx, s, option)))
*ret = atoi(str);
}
static struct uci_section *uci_find_metric_section(const char *name) {
struct uci_section *s;
struct uci_element *e;
@ -137,19 +154,52 @@ static struct uci_section *uci_find_metric_section(const char *name) {
return NULL;
}
#define DAWN_SET_CONFIG_INT(m, s, conf) \
set_if_present(&m.conf, s, #conf)
#define DAWN_SET_BANDS_CONFIG_INT(m, global_s, band_s, conf) \
do for (int band = 0; band < __DAWN_BAND_MAX; band++) { \
if (global_s) \
set_if_present(&m.conf[band], global_s, #conf); \
set_if_present_int(&m.conf[band], global_s, #conf); \
if (band_s[band]) \
set_if_present(&m.conf[band], band_s[band], #conf); \
set_if_present_int(&m.conf[band], band_s[band], #conf); \
} while (0)
struct probe_metric_s uci_get_dawn_metric() {
struct probe_metric_s ret = {0}; // TODO: Set reasonable defaults
struct probe_metric_s ret = {
.kicking = 0,
.min_probe_count = 0,
.use_station_count = 1,
.eval_auth_req = 0,
.eval_assoc_req = 0,
.deny_auth_reason = 1,
.deny_assoc_reason = 17,
.eval_probe_req = 0,
.min_number_to_kick = 3,
.set_hostapd_nr = 1,
.max_station_diff = 1,
.bandwidth_threshold = 6,
.use_driver_recog = 1,
.chan_util_avg_period = 3,
.duration = 0,
.rrm_mode_mask = WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE |
WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE |
WLAN_RRM_CAPS_BEACON_REPORT_TABLE,
.rrm_mode_order = { WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE,
WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE,
WLAN_RRM_CAPS_BEACON_REPORT_TABLE },
.ap_weight = { 0, 0 },
.ht_support = { 0, 0 },
.vht_support = { 0, 0 },
.no_ht_support = { 0, 0 },
.no_vht_support = { 0, 0 },
.rssi = { 10, 10 },
.rssi_val = { -60, -60 },
.freq = { 0, 100 },
.chan_util = { 0, 0 },
.max_chan_util = { -500, -500 },
.chan_util_val = { 140, 140 },
.max_chan_util_val = { 170, 170 },
.low_rssi = { -500, -500 },
.low_rssi_val = { -80, -80 },
};
struct uci_section *global_s, *band_s[__DAWN_BAND_MAX];
if (!(global_s = uci_find_metric_section("global"))) {
@ -202,8 +252,18 @@ struct probe_metric_s uci_get_dawn_metric() {
}
struct network_config_s uci_get_dawn_network() {
struct network_config_s ret;
memset(&ret, 0, sizeof(ret));
struct network_config_s ret = {
.broadcast_ip = "",
.broadcast_port = 1025,
.server_ip = "",
.tcp_port = 1026,
.network_option = 2,
.shared_key = "Niiiiiiiiiiiiiik",
.iv = "Niiiiiiiiiiiiiik",
.use_symm_enc = 1,
.collision_domain = -1,
.bandwidth = -1,
};
struct uci_element *e;
uci_foreach_element(&uci_pkg->sections, e)
@ -212,27 +272,28 @@ struct network_config_s uci_get_dawn_network() {
if (strcmp(s->type, "network") == 0) {
const char* str_broadcast = uci_lookup_option_string(uci_ctx, s, "broadcast_ip");
strncpy(ret.broadcast_ip, str_broadcast, MAX_IP_LENGTH);
if (str_broadcast)
strncpy(ret.broadcast_ip, str_broadcast, MAX_IP_LENGTH);
const char* str_server_ip = uci_lookup_option_string(uci_ctx, s, "server_ip");
if(str_server_ip)
strncpy(ret.server_ip, str_server_ip, MAX_IP_LENGTH);
else
ret.server_ip[0] = '\0';
ret.broadcast_port = uci_lookup_option_int(uci_ctx, s, "broadcast_port");
DAWN_SET_CONFIG_INT(ret, s, broadcast_port);
const char* str_shared_key = uci_lookup_option_string(uci_ctx, s, "shared_key");
strncpy(ret.shared_key, str_shared_key, MAX_KEY_LENGTH);
if (str_shared_key)
strncpy(ret.shared_key, str_shared_key, MAX_KEY_LENGTH);
const char* str_iv = uci_lookup_option_string(uci_ctx, s, "iv");
strncpy(ret.iv, str_iv, MAX_KEY_LENGTH);
if (str_iv)
strncpy(ret.iv, str_iv, MAX_KEY_LENGTH);
ret.network_option = uci_lookup_option_int(uci_ctx, s, "network_option");
ret.tcp_port = uci_lookup_option_int(uci_ctx, s, "tcp_port");
ret.use_symm_enc = uci_lookup_option_int(uci_ctx, s, "use_symm_enc");
ret.collision_domain = uci_lookup_option_int(uci_ctx, s, "collision_domain");
ret.bandwidth = uci_lookup_option_int(uci_ctx, s, "bandwidth");
DAWN_SET_CONFIG_INT(ret, s, network_option);
DAWN_SET_CONFIG_INT(ret, s, tcp_port);
DAWN_SET_CONFIG_INT(ret, s, use_symm_enc);
DAWN_SET_CONFIG_INT(ret, s, collision_domain);
DAWN_SET_CONFIG_INT(ret, s, bandwidth);
return ret;
}
}