diff --git a/wireless/wifictld/src/log.c b/wireless/wifictld/src/log.c index 0968734..c70614d 100644 --- a/wireless/wifictld/src/log.c +++ b/wireless/wifictld/src/log.c @@ -16,7 +16,7 @@ void log_debug(const char *format, ...) { void log_verbose(const char *format, ...) { - if (!verbose) + if (verbose) return; va_list args; va_start(args, format); diff --git a/wireless/wifictld/src/ubus_events.c b/wireless/wifictld/src/ubus_events.c index 3191119..7a6f7ff 100644 --- a/wireless/wifictld/src/ubus_events.c +++ b/wireless/wifictld/src/ubus_events.c @@ -101,6 +101,8 @@ static int receive_notify(struct ubus_context *ctx, struct ubus_object *obj, str int rem = blobmsg_data_len(msg); // read msg + log_debug("ubus_events.receive_notify(): read msg\n"); + blobmsg_for_each_attr(pos, msg, rem) { attr_name = blobmsg_name(pos); @@ -114,22 +116,29 @@ static int receive_notify(struct ubus_context *ctx, struct ubus_object *obj, str } } + // handle + log_debug("ubus_events.receive_notify(): handle\n"); if (!strcmp(method, "probe")) { - log_verbose("probe\n"); - if (client_probe_learning) + log_verbose("probe["MACSTR"]", MAC2STR(addr)); + if (client_probe_learning) { + log_verbose(" + learn freq[%d]\n", freq); wifi_clients_learn(addr, freq); + }else{ + log_verbose("\n"); + } return WLAN_STATUS_SUCCESS; } if (!strcmp(method, "auth")) { - if (!wifi_clients_try(addr, freq)) { - log_info("auth [drop]-> %s\n", addr); + log_info("auth["MACSTR"]", MAC2STR(addr)); + if (wifi_clients_try(addr, freq)) { + log_info(" -> drop\n"); return WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY; } - log_info("auth [accept]-> %s\n", addr); + log_info(" -> accept\n"); } else { - log_verbose("%s\n", method); + log_verbose("%s["MACSTR"]\n", method, MAC2STR(addr)); } return WLAN_STATUS_SUCCESS; diff --git a/wireless/wifictld/src/wifi_clients.c b/wireless/wifictld/src/wifi_clients.c index 346958d..d4de7fe 100644 --- a/wireless/wifictld/src/wifi_clients.c +++ b/wireless/wifictld/src/wifi_clients.c @@ -3,12 +3,18 @@ #include #include #include "hostapd/ieee802_11_defs.h" // ETH_ALEN +#include "log.h" #include "wifi_clients.h" static void wifi_clients_del(const u8 *addr); static struct avl_tree clients_by_addr; +static int avl_compare_macaddr(const void *k1, const void *k2, void *ptr) +{ + return memcmp(k1, k2, ETH_ALEN); +} + struct wifi_client { struct avl_node avl; u8 addr[ETH_ALEN]; @@ -18,6 +24,7 @@ struct wifi_client { }; int wifi_clients_init() { + avl_init(&clients_by_addr, avl_compare_macaddr, false, NULL); return 0; } @@ -25,26 +32,33 @@ void wifi_clients_close() { } -struct wifi_client *__get_client(const u8 *addr){ +struct wifi_client *__get_client(const u8 *address){ struct wifi_client *client; - client = avl_find_element(&clients_by_addr, addr, client, avl); - if (client) - return client; - client = malloc(sizeof(*client)); - memcpy(client->addr, addr, sizeof(client->addr)); - client->highfreq = 0; - client->try = 0; - client->time = 0; - client->avl.key = client->addr; - avl_insert(&clients_by_addr, &client->avl); + client = avl_find_element(&clients_by_addr, address, client, avl); + if (client) { + log_debug("wifi_clients.__get_client("MACSTR"): found existing client\n", MAC2STR(address)); return client; + } + log_debug("wifi_clients.__get_client("MACSTR"): gen new client\n", MAC2STR(address)); + client = calloc(sizeof(*client), 1); + memcpy(client->addr, address, sizeof(client->addr)); + client->highfreq = 0; + client->try = 0; + client->time = 0; + client->avl.key = client->addr; + log_debug("wifi_clients.__get_client("MACSTR"): add client to mem\n", MAC2STR(address)); + avl_insert(&clients_by_addr, &client->avl); + return client; } void __client_learn(struct wifi_client *client, uint32_t freq) { + log_debug("wifi_clients.__client_learn(., %d): ", freq); if (client->highfreq < freq) { client->highfreq = freq; + log_debug("new highfreq"); } + log_debug("\n"); //TODO time set and reset clean } @@ -59,13 +73,17 @@ int wifi_clients_try(const u8 *address, uint32_t freq) { client = __get_client(address); __client_learn(client, freq); + log_debug("wifi_clients.wifi_clients_try("MACSTR", %d): ", MAC2STR(address), freq); if (freq > 5000) { + log_debug("used correct freq\n"); client->try = 0; } else { if(client->try > client_freq_try_threashold) { + log_debug("clients %d try over threashold %d\n",client->try, client_freq_try_threashold); return 0; } client->try++; + log_debug("clients->try now by %d\n",client->try); } return client->try; diff --git a/wireless/wifictld/src/wifictld.c b/wireless/wifictld/src/wifictld.c index b51d658..ed69f01 100644 --- a/wireless/wifictld/src/wifictld.c +++ b/wireless/wifictld/src/wifictld.c @@ -7,13 +7,18 @@ int main(void) { verbose = 1; client_probe_learning = 1; + int ret = 0; + #ifdef MINI - log_error("start wifictld (mini)\n"); + log_info("start wifictld (mini)\n"); #else - log_error("start wifictld (full)\n"); + log_info("start wifictld (full)\n"); #endif + log_debug("log: show debug\n"); + log_verbose("log: show verbose\n"); + uloop_init(); // define wifi clients memory