Use separate configs for 802.11g & 802.11a bands

This changes the metrics variables that invove scores to arrays.  At the
momemnt, there are two bands implemented, 802_11a and 802_11g.
Internally, they are chosen based on the frequency of the channel being
used.  Anything < 2500 MHz is 802_11g, and everything else is 802_11a.
Dawn will issue a warning if it finds a frequency greater or equal to
5925 MHz.  The upper limit of the 802.11a band, and the start of the
next band vary by country, so this will have to be reviewed.

The UCI configuration changes.  Instead of a single metric config, there
will be a global metric config, and one for each band.  The
non-band-specific configuration will only work in the global config.
Any per-band configuration present at the global config will be applied
to all bands.  Any configuration present at the specific band will
override any global values.

The following configuration options are split into bands:
 - ap_weight
 - ht_support
 - vht_support
 - no_ht_support
 - no_vht_support
 - rssi
 - rssi_val
 - low_rssi
 - low_rssi_val
 - freq
 - chan_util
 - max_chan_util
 - chan_util_val
 - max_chan_util_val

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
This commit is contained in:
Eneas U de Queiroz 2021-06-28 14:01:49 -03:00 committed by Polynomdivision
parent 1e34357bdc
commit 6eb747b4d4
10 changed files with 367 additions and 201 deletions

View file

@ -48,31 +48,34 @@ struct mac_entry_s* insert_to_mac_array(struct mac_entry_s* entry, struct mac_en
void mac_array_delete(struct mac_entry_s* entry);
int get_band(int freq);
// ---------------- Global variables ----------------
/*** Metrics and configuration data ***/
// TODO: Define a proper version string
#ifndef DAWN_CONFIG_VERSION
#define DAWN_CONFIG_VERSION "1"
#define DAWN_CONFIG_VERSION "2"
#endif
// Band definitions
// Keep them sorted by frequency, in ascending order
enum dawn_bands {
DAWN_BAND_80211G,
DAWN_BAND_80211A,
__DAWN_BAND_MAX
};
// config section name
extern const char *band_config_name[__DAWN_BAND_MAX];
// starting frequency
// TODO: make this configurable
extern const int max_band_freq[__DAWN_BAND_MAX];
// ---------------- Structs ----------------
struct probe_metric_s {
int ap_weight; // TODO: Never evaluated?
int ht_support; // eval_probe_metric()()
int vht_support; // eval_probe_metric()()
int no_ht_support; // eval_probe_metric()()
int no_vht_support; // eval_probe_metric()()
int rssi; // eval_probe_metric()()
int low_rssi; // eval_probe_metric()()
int freq; // eval_probe_metric()()
int chan_util; // eval_probe_metric()()
int max_chan_util; // eval_probe_metric()()
int rssi_val; // eval_probe_metric()()
int low_rssi_val; // eval_probe_metric()()
int chan_util_val; // eval_probe_metric()()
int max_chan_util_val; // eval_probe_metric()()
// Global Configuration
int min_probe_count;
int bandwidth_threshold; // kick_clients()
int use_station_count; // better_ap_available()
@ -83,13 +86,29 @@ struct probe_metric_s {
int deny_auth_reason;
int deny_assoc_reason;
int use_driver_recog;
int min_kick_count; // kick_clients()
int min_number_to_kick; // kick_clients()
int chan_util_avg_period;
int set_hostapd_nr;
int kicking;
int duration;
int rrm_mode_mask;
int rrm_mode_order[__RRM_BEACON_RQST_MODE_MAX];
// Per-band Configuration
int ap_weight[__DAWN_BAND_MAX]; // TODO: Never evaluated?
int ht_support[__DAWN_BAND_MAX]; // eval_probe_metric()()
int vht_support[__DAWN_BAND_MAX]; // eval_probe_metric()()
int no_ht_support[__DAWN_BAND_MAX]; // eval_probe_metric()()
int no_vht_support[__DAWN_BAND_MAX]; // eval_probe_metric()()
int rssi[__DAWN_BAND_MAX]; // eval_probe_metric()()
int low_rssi[__DAWN_BAND_MAX]; // eval_probe_metric()()
int freq[__DAWN_BAND_MAX]; // eval_probe_metric()()
int chan_util[__DAWN_BAND_MAX]; // eval_probe_metric()()
int max_chan_util[__DAWN_BAND_MAX]; // eval_probe_metric()()
int rssi_val[__DAWN_BAND_MAX]; // eval_probe_metric()()
int low_rssi_val[__DAWN_BAND_MAX]; // eval_probe_metric()()
int chan_util_val[__DAWN_BAND_MAX]; // eval_probe_metric()()
int max_chan_util_val[__DAWN_BAND_MAX]; // eval_probe_metric()()
};
struct time_config_s {