mirror of
https://github.com/berlin-open-wireless-lab/DAWN.git
synced 2025-03-09 15:40:12 +00:00
add kickcount
This commit is contained in:
parent
04f1410b8a
commit
7e5f9a36d8
4 changed files with 25 additions and 6 deletions
|
@ -48,3 +48,4 @@ config metric
|
||||||
option deny_auth_reason '1' # unspecified
|
option deny_auth_reason '1' # unspecified
|
||||||
option deny_assoc_reason '17' # assoc rejected can't handle new station
|
option deny_assoc_reason '17' # assoc rejected can't handle new station
|
||||||
option use_driver_recog '1'
|
option use_driver_recog '1'
|
||||||
|
option min_number_to_kick '3'
|
||||||
|
|
|
@ -59,6 +59,7 @@ struct probe_metric_s {
|
||||||
int deny_auth_reason;
|
int deny_auth_reason;
|
||||||
int deny_assoc_reason;
|
int deny_assoc_reason;
|
||||||
int use_driver_recog;
|
int use_driver_recog;
|
||||||
|
int min_kick_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct time_config_s {
|
struct time_config_s {
|
||||||
|
@ -179,6 +180,7 @@ typedef struct client_s {
|
||||||
uint8_t mfp;
|
uint8_t mfp;
|
||||||
time_t time;
|
time_t time;
|
||||||
uint32_t aid;
|
uint32_t aid;
|
||||||
|
uint32_t kick_count;
|
||||||
} client;
|
} client;
|
||||||
|
|
||||||
typedef struct ap_s {
|
typedef struct ap_s {
|
||||||
|
@ -220,7 +222,7 @@ void kick_clients(uint8_t bssid[], uint32_t id);
|
||||||
|
|
||||||
void client_array_insert(client entry);
|
void client_array_insert(client entry);
|
||||||
|
|
||||||
client *client_array_delete(client entry);
|
client client_array_delete(client entry);
|
||||||
|
|
||||||
void print_client_array();
|
void print_client_array();
|
||||||
|
|
||||||
|
|
|
@ -433,6 +433,16 @@ void kick_clients(uint8_t bssid[], uint32_t id) {
|
||||||
|
|
||||||
// better ap available
|
// better ap available
|
||||||
if (do_kick > 0) {
|
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");
|
printf("Better AP available. Kicking client:\n");
|
||||||
print_client_entry(client_array[j]);
|
print_client_entry(client_array[j]);
|
||||||
printf("Check if client is active receiving!\n");
|
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 i;
|
||||||
int found_in_array = 0;
|
int found_in_array = 0;
|
||||||
client *tmp = NULL;
|
client tmp;
|
||||||
|
|
||||||
if (client_entry_last == -1) {
|
if (client_entry_last == -1) {
|
||||||
return NULL;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i <= client_entry_last; i++) {
|
for (i = 0; i <= client_entry_last; i++) {
|
||||||
if (mac_is_equal(entry.bssid_addr, client_array[i].bssid_addr) &&
|
if (mac_is_equal(entry.bssid_addr, client_array[i].bssid_addr) &&
|
||||||
mac_is_equal(entry.client_addr, client_array[i].client_addr)) {
|
mac_is_equal(entry.client_addr, client_array[i].client_addr)) {
|
||||||
found_in_array = 1;
|
found_in_array = 1;
|
||||||
tmp = &client_array[i];
|
tmp = client_array[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -956,7 +966,12 @@ void insert_client_to_array(client entry) {
|
||||||
pthread_mutex_lock(&client_array_mutex);
|
pthread_mutex_lock(&client_array_mutex);
|
||||||
entry.time = time(0);
|
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);
|
client_array_insert(entry);
|
||||||
|
|
||||||
pthread_mutex_unlock(&client_array_mutex);
|
pthread_mutex_unlock(&client_array_mutex);
|
||||||
|
|
|
@ -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.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.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.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;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue