diff --git a/src/include/datastorage.h b/src/include/datastorage.h index 4fd795a..3b0911b 100644 --- a/src/include/datastorage.h +++ b/src/include/datastorage.h @@ -6,21 +6,13 @@ #include #include +#include "ieee80211_utils.h" #include "mac_utils.h" #include "utils.h" /* Mac */ // ---------------- Defines ------------------- -#define DEFAULT_RRM_MODE_ORDER "pat" -#define RRM_MODE_COUNT 3 - -enum rrm_beacon_rqst_mode { - RRM_BEACON_RQST_MODE_PASSIVE, - RRM_BEACON_RQST_MODE_ACTIVE, - RRM_BEACON_RQST_MODE_BEACON_TABLE, - __RRM_BEACON_RQST_MODE_MAX -}; // ---------------- Global variables ---------------- extern struct mac_entry_s *mac_set; @@ -212,12 +204,6 @@ typedef struct auth_entry_s assoc_entry; #define NR_OP_CLASS 20 #define NR_CHANNEL 22 #define NR_PHY 24 -#ifndef BIT -#define BIT(x) (1U << (x)) -#endif -#define WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE BIT(4) -#define WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE BIT(5) -#define WLAN_RRM_CAPS_BEACON_REPORT_TABLE BIT(6) // ---------------- Global variables ---------------- extern struct auth_entry_s *denied_req_set; diff --git a/src/include/ieee80211_utils.h b/src/include/ieee80211_utils.h index edad37e..62e6e9e 100644 --- a/src/include/ieee80211_utils.h +++ b/src/include/ieee80211_utils.h @@ -3,6 +3,23 @@ #include +#ifndef BIT +#define BIT(x) (1U << (x)) +#endif +#define WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE BIT(4) +#define WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE BIT(5) +#define WLAN_RRM_CAPS_BEACON_REPORT_TABLE BIT(6) + +#define DEFAULT_RRM_MODE_ORDER "pat" +#define RRM_MODE_COUNT 3 + +enum rrm_beacon_rqst_mode { + RRM_BEACON_RQST_MODE_PASSIVE, + RRM_BEACON_RQST_MODE_ACTIVE, + RRM_BEACON_RQST_MODE_BEACON_TABLE, + __RRM_BEACON_RQST_MODE_MAX +}; + /** * Calculate bitrate using the supported rates values. * @param supp_rate_val @@ -24,4 +41,12 @@ double iee80211_calculate_expected_throughput_mbit(int exp_thr); */ int rcpi_to_rssi(int rcpi); +/** + * Convert mode string to array of RRM masks + * @param rrm_mode_order + * @param mode_string + * @return + */ +int parse_rrm_mode(int* rrm_mode_order, const char* mode_string); + #endif //DAWN_IEEE80211_UTILS_H diff --git a/src/test/test_storage.c b/src/test/test_storage.c index a747c6a..09bda61 100644 --- a/src/test/test_storage.c +++ b/src/test/test_storage.c @@ -334,44 +334,6 @@ static int load_time(time_t* v, char* s) return ret; } -static int get_rrm_mode_val(char mode); -static int get_rrm_mode_val(char mode) { - switch (tolower(mode)) { - case 'a': - return WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE; - break; - case 'p': - return WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE; - break; - case 'b': - case 't': - return WLAN_RRM_CAPS_BEACON_REPORT_TABLE; - break; - } - return 0; -} - -static int parse_rrm_mode(int *rrm_mode_order, const char *mode_string); -static int parse_rrm_mode(int *rrm_mode_order, const char *mode_string) { - int len, mode_val; - int mask = 0, order = 0, pos = 0; - - if (!mode_string) - mode_string = DEFAULT_RRM_MODE_ORDER; - len = strlen(mode_string); - - while (order < __RRM_BEACON_RQST_MODE_MAX) { - if (pos >= len) { - rrm_mode_order[order++] = 0; - } else { - mode_val = get_rrm_mode_val(mode_string[pos++]); - if (mode_val && !(mask & mode_val)) - mask |= (rrm_mode_order[order++] = mode_val); - } - } - return mask; -} - static int consume_actions(int argc, char* argv[], int harness_verbosity); static int consume_actions(int argc, char* argv[], int harness_verbosity) diff --git a/src/utils/dawn_uci.c b/src/utils/dawn_uci.c index 43edeb4..1b7e5cb 100644 --- a/src/utils/dawn_uci.c +++ b/src/utils/dawn_uci.c @@ -144,44 +144,6 @@ struct local_config_s uci_get_local_config() { } -static int get_rrm_mode_val(char mode) { - switch (tolower(mode)) { - case 'a': - return WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE; - break; - case 'p': - return WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE; - break; - case 'b': - case 't': - return WLAN_RRM_CAPS_BEACON_REPORT_TABLE; - break; - } - return 0; -} - -static int parse_rrm_mode(int *rrm_mode_order, const char *mode_string) { - int len, mode_val; - int mask = 0, order = 0, pos = 0; - - dawnlog_debug_func("Entering..."); - - if (!mode_string) - mode_string = DEFAULT_RRM_MODE_ORDER; - len = strlen(mode_string); - - while (order < __RRM_BEACON_RQST_MODE_MAX) { - if (pos >= len) { - rrm_mode_order[order++] = 0; - } else { - mode_val = get_rrm_mode_val(mode_string[pos++]); - if (mode_val && !(mask & mode_val)) - mask |= (rrm_mode_order[order++] = mode_val); - } - } - return mask; -} - static struct mac_entry_s *insert_neighbor_mac(struct mac_entry_s *head, const char* mac) { dawnlog_debug_func("Entering..."); diff --git a/src/utils/ieee80211_utils.c b/src/utils/ieee80211_utils.c index bf2ddcb..cb253fb 100644 --- a/src/utils/ieee80211_utils.c +++ b/src/utils/ieee80211_utils.c @@ -12,3 +12,49 @@ int rcpi_to_rssi(int rcpi) { return rcpi / 2 - 110; } + +static int get_rrm_mode_val(char mode) { + int ret = 0; + switch (mode) { + case 'A': + case 'a': + ret = WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE; + break; + case 'P': + case 'p': + ret = WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE; + break; + case 'B': + case 'b': + case 'T': + case 't': + ret = WLAN_RRM_CAPS_BEACON_REPORT_TABLE; + break; + } + return ret; +} + +int parse_rrm_mode(int* rrm_mode_order, const char* mode_string) { + if (!mode_string) + mode_string = DEFAULT_RRM_MODE_ORDER; + + int mask = 0; + int order = 0; + while ((*mode_string != 0) && (order < __RRM_BEACON_RQST_MODE_MAX)) { + int mode_val = get_rrm_mode_val(*mode_string); + if (mode_val && (mask & mode_val) == 0) + { + rrm_mode_order[order++] = mode_val; + mask |= mode_val; + } + + mode_string++; + } + + while (order < __RRM_BEACON_RQST_MODE_MAX) + { + rrm_mode_order[order++] = 0; + } + + return mask; +}