diff --git a/files/dawn.config b/files/dawn.config index 2485b09..6f992ec 100644 --- a/files/dawn.config +++ b/files/dawn.config @@ -44,3 +44,4 @@ config metric option eval_assoc_req '1' # just deny assocs... option deny_auth_reason '1' # unspecified option deny_assoc_reason '17' # assoc rejected can't handle new station + option use_driver_recog '1' diff --git a/src/include/datastorage.h b/src/include/datastorage.h index 62280e0..96f88d2 100644 --- a/src/include/datastorage.h +++ b/src/include/datastorage.h @@ -58,6 +58,7 @@ struct probe_metric_s { int eval_assoc_req; int deny_auth_reason; int deny_assoc_reason; + int use_driver_recog; }; struct time_config_s { diff --git a/src/storage/datastorage.c b/src/storage/datastorage.c index 4d2a981..2a0790d 100644 --- a/src/storage/datastorage.c +++ b/src/storage/datastorage.c @@ -866,7 +866,10 @@ void uloop_add_data_cbs() { uloop_timeout_add(&probe_timeout); uloop_timeout_add(&client_timeout); uloop_timeout_add(&ap_timeout); - uloop_timeout_add(&denied_req_timeout); + + if(dawn_metric.use_driver_recog){ + uloop_timeout_add(&denied_req_timeout); + } } void remove_probe_array_cb(struct uloop_timeout *t) { diff --git a/src/utils/dawn_uci.c b/src/utils/dawn_uci.c index 659e22f..66f4152 100644 --- a/src/utils/dawn_uci.c +++ b/src/utils/dawn_uci.c @@ -72,6 +72,7 @@ struct probe_metric_s uci_get_dawn_metric() { ret.deny_auth_reason = uci_lookup_option_int(uci_ctx, s, "deny_auth_reason"); ret.deny_assoc_reason = uci_lookup_option_int(uci_ctx, s, "deny_assoc_reason"); ret.max_station_diff = uci_lookup_option_int(uci_ctx, s, "max_station_diff"); + ret.use_driver_recog = uci_lookup_option_int(uci_ctx, s, "use_driver_recog"); return ret; } } diff --git a/src/utils/ubus.c b/src/utils/ubus.c index ee6c7ce..5a48e20 100644 --- a/src/utils/ubus.c +++ b/src/utils/ubus.c @@ -422,13 +422,18 @@ static int handle_auth_req(struct blob_attr *msg) { // block if entry was not already found in probe database if (!(mac_is_equal(tmp.bssid_addr, auth_req.bssid_addr) && mac_is_equal(tmp.client_addr, auth_req.client_addr))) { printf("DENY AUTH!\n"); - insert_to_denied_req_array(auth_req, 1); + + if(dawn_metric.use_driver_recog){ + insert_to_denied_req_array(auth_req, 1); + } return dawn_metric.deny_auth_reason; } if (!decide_function(&tmp, REQ_TYPE_AUTH)) { printf("DENY AUTH\n"); - insert_to_denied_req_array(auth_req, 1); + if(dawn_metric.use_driver_recog) { + insert_to_denied_req_array(auth_req, 1); + } return dawn_metric.deny_auth_reason; } @@ -459,13 +464,17 @@ static int handle_assoc_req(struct blob_attr *msg) { // block if entry was not already found in probe database if (!(mac_is_equal(tmp.bssid_addr, auth_req.bssid_addr) && mac_is_equal(tmp.client_addr, auth_req.client_addr))) { printf("DENY ASSOC!\n"); - insert_to_denied_req_array(auth_req, 1); + if(dawn_metric.use_driver_recog) { + insert_to_denied_req_array(auth_req, 1); + } return dawn_metric.deny_assoc_reason; } if (!decide_function(&tmp, REQ_TYPE_ASSOC)) { printf("DENY ASSOC\n"); - insert_to_denied_req_array(auth_req, 1); + if(dawn_metric.use_driver_recog) { + insert_to_denied_req_array(auth_req, 1); + } return dawn_metric.deny_assoc_reason; }