add kickcount

This commit is contained in:
PolynomialDivision 2018-02-13 15:31:11 +01:00
parent 04f1410b8a
commit 7e5f9a36d8
4 changed files with 25 additions and 6 deletions

View file

@ -48,3 +48,4 @@ config metric
option deny_auth_reason '1' # unspecified
option deny_assoc_reason '17' # assoc rejected can't handle new station
option use_driver_recog '1'
option min_number_to_kick '3'

View file

@ -59,6 +59,7 @@ struct probe_metric_s {
int deny_auth_reason;
int deny_assoc_reason;
int use_driver_recog;
int min_kick_count;
};
struct time_config_s {
@ -179,6 +180,7 @@ typedef struct client_s {
uint8_t mfp;
time_t time;
uint32_t aid;
uint32_t kick_count;
} client;
typedef struct ap_s {
@ -220,7 +222,7 @@ void kick_clients(uint8_t bssid[], uint32_t id);
void client_array_insert(client entry);
client *client_array_delete(client entry);
client client_array_delete(client entry);
void print_client_array();

View file

@ -433,6 +433,16 @@ void kick_clients(uint8_t bssid[], uint32_t id) {
// better ap available
if (do_kick > 0) {
// kick after algorithm decided to kick several times
// + rssi is changing a lot
// + chan util is changing a lot
// + ping pong behavior of clients will be reduced...
client_array[j].kick_count++;
if(client_array[j].kick_count < dawn_metric.min_kick_count){
continue;
}
printf("Better AP available. Kicking client:\n");
print_client_entry(client_array[j]);
printf("Check if client is active receiving!\n");
@ -569,21 +579,21 @@ void client_array_insert(client entry) {
}
}
client *client_array_delete(client entry) {
client client_array_delete(client entry) {
int i;
int found_in_array = 0;
client *tmp = NULL;
client tmp;
if (client_entry_last == -1) {
return NULL;
return tmp;
}
for (i = 0; i <= client_entry_last; i++) {
if (mac_is_equal(entry.bssid_addr, client_array[i].bssid_addr) &&
mac_is_equal(entry.client_addr, client_array[i].client_addr)) {
found_in_array = 1;
tmp = &client_array[i];
tmp = client_array[i];
break;
}
}
@ -956,7 +966,12 @@ void insert_client_to_array(client entry) {
pthread_mutex_lock(&client_array_mutex);
entry.time = time(0);
client_array_delete(entry);
client client_tmp = client_array_delete(entry);
if (mac_is_equal(entry.bssid_addr, client_tmp.bssid_addr)) {
entry.kick_count = client_tmp.kick_count;
}
client_array_insert(entry);
pthread_mutex_unlock(&client_array_mutex);

View file

@ -71,6 +71,7 @@ struct probe_metric_s uci_get_dawn_metric() {
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");
ret.min_kick_count = uci_lookup_option_int(uci_ctx, s, "min_kick_count");
return ret;
}
}