From 1a2aa2c6e2fafad3438414f55ad1e1af60186bb4 Mon Sep 17 00:00:00 2001 From: PolynomialDivision Date: Tue, 21 Nov 2017 18:37:12 +0100 Subject: [PATCH] insert macs to list --- files/mac_list | 2 ++ src/include/datastorage.h | 13 ++++++++ src/main.c | 1 - src/storage/datastorage.c | 63 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 files/mac_list diff --git a/files/mac_list b/files/mac_list new file mode 100644 index 0000000..8a35cbc --- /dev/null +++ b/files/mac_list @@ -0,0 +1,2 @@ +a4:2b:b0:de:f1:fd +f0:79:60:1c:26:f0 diff --git a/src/include/datastorage.h b/src/include/datastorage.h index 93f845f..d375738 100644 --- a/src/include/datastorage.h +++ b/src/include/datastorage.h @@ -13,9 +13,22 @@ #define ETH_ALEN 6 #endif +/* Mac */ + +// ---------------- Defines ------------------- +#define MAC_LIST_LENGTH 100 + +// ---------------- Structs ---------------- +uint8_t mac_list[MAC_LIST_LENGTH][ETH_ALEN]; + +// ---------------- Functions ---------- +void insert_macs_from_file(); + /* Metric */ +struct probe_metric_s dawn_metric; + // ---------------- Structs ---------------- struct probe_metric_s { int ht_support; diff --git a/src/main.c b/src/main.c index dba35be..947a67e 100644 --- a/src/main.c +++ b/src/main.c @@ -108,7 +108,6 @@ int main(int argc, char **argv) { sigaction(SIGTERM, &newSigAction, NULL); /* catch term signal */ sigaction(SIGINT, &newSigAction, NULL); /* catch interrupt signal */ - gcrypt_init(); gcrypt_set_key_and_iv(shared_key, iv); diff --git a/src/storage/datastorage.c b/src/storage/datastorage.c index c8eda89..bc44789 100644 --- a/src/storage/datastorage.c +++ b/src/storage/datastorage.c @@ -41,9 +41,12 @@ int probe_array_update_rssi(uint8_t bssid_addr[], uint8_t client_addr[], uint32_ int is_connected(uint8_t bssid_addr[], uint8_t client_addr[]); +int mac_in_maclist(uint8_t mac[]); + int probe_entry_last = -1; int client_entry_last = -1; int ap_entry_last = -1; +int mac_list_entry_last = -1; void remove_probe_array_cb(struct uloop_timeout *t); @@ -134,7 +137,7 @@ int better_ap_available(uint8_t bssid_addr[], uint8_t client_addr[]) { } int kick_client(struct client_s client_entry) { - return better_ap_available(client_entry.bssid_addr, client_entry.client_addr); + return !mac_in_maclist(client_entry.client_addr) && better_ap_available(client_entry.bssid_addr, client_entry.client_addr); } void kick_clients(uint8_t bssid[], uint32_t id) { @@ -600,6 +603,64 @@ void insert_client_to_array(client entry) { pthread_mutex_unlock(&client_array_mutex); } +void insert_macs_from_file() +{ + FILE * fp; + char * line = NULL; + size_t len = 0; + ssize_t read; + + fp = fopen("/etc/config/dawn", "r"); + if (fp == NULL) + exit(EXIT_FAILURE); + + while ((read = getline(&line, &len, fp)) != -1) { + printf("Retrieved line of length %zu :\n", read); + printf("%s", line); + + int tmp_int_mac[ETH_ALEN]; + sscanf(line, MACSTR, STR2MAC(tmp_int_mac)); + + for (int i = 0; i < ETH_ALEN; ++i) { + mac_list[mac_list_entry_last][i] = (uint8_t) tmp_int_mac[i]; + } + } + + printf("Printing MAC List:\n"); + for(int i = 0; i <= mac_list_entry_last; i++) + { + char mac_buf_target[20]; + sprintf(mac_buf_target, MACSTR, MAC2STR(mac_list[0])); + printf("%d: %s\n", i, mac_buf_target); + } + + fclose(fp); + if (line) + free(line); + exit(EXIT_SUCCESS); +} + +int mac_in_maclist(uint8_t mac[]) +{ + for(int i = 0; i <= mac_list_entry_last; i++) + { + if(mac_is_equal(mac, mac_list[i])) + { + return 1; + } + } + return 0; +} + + + + + + + + + + node *delete_probe_req(node **ret_remove, node *head, uint8_t bssid_addr[], uint8_t client_addr[]);