List all neighbors with same score when kicking

The wnm_disassoc_imminent procedure takes a list of neighbor reports to
send to the client.

Instead of picking just one AP to be sent, send all that have the same
score.

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
This commit is contained in:
Eneas U de Queiroz 2021-07-12 15:20:10 -03:00 committed by Polynomdivision
parent 3ba0fa4947
commit a7a830950a
10 changed files with 211 additions and 153 deletions

View file

@ -347,9 +347,14 @@ void send_beacon_reports(ap *a, int id);
#define SORT_LENGTH 5
extern char sort_string[];
struct kicking_nr {
char nr[NEIGHBOR_REPORT_LEN];
int score;
struct kicking_nr *next;
};
// ---------------- Functions -------------------
int better_ap_available(ap *kicking_ap, struct dawn_mac client_addr, char* neighbor_report);
int better_ap_available(ap *kicking_ap, struct dawn_mac client_addr, struct kicking_nr** neighbor_report);
// All users of datastorage should call init_ / destroy_mutex at initialisation and termination respectively
int init_mutex();

View file

@ -10,6 +10,9 @@
#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
#define MACSTRLOWER "%02x:%02x:%02x:%02x:%02x:%02x"
#define NR_MACSTR "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c"
#define NR_MAC2STR(a) *a, *(a+1), *(a+2), *(a+3), *(a+4), *(a+5), *(a+6), *(a+7), *(a+8), *(a+9), *(a+10), *(a+11)
#ifndef ETH_ALEN
#define ETH_ALEN 6
#endif

View file

@ -139,7 +139,7 @@ int send_set_probe(struct dawn_mac client_addr);
* @param duration
* @return - 0 = asynchronous (client has been told to remove itself, and caller should manage arrays); 1 = synchronous (caller should assume arrays are updated)
*/
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, char* dest_ap, uint32_t duration);
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, struct kicking_nr* neighbor_list, uint32_t duration);
/**
* Send control message to all hosts to add the mac to a don't control list.

View file

@ -20,7 +20,7 @@ struct time_config_s timeout_config;
static int probe_compare(probe_entry *probe1, probe_entry *probe2);
static int kick_client(ap *kicking_ap, struct client_s *client_entry, char* neighbor_report);
static int kick_client(ap* kicking_ap, struct client_s *client_entry, struct kicking_nr** neighbor_report);
static void print_ap_entry(ap *entry);
@ -463,10 +463,36 @@ static int compare_station_count(ap* ap_entry_own, ap* ap_entry_to_compare, stru
}
printf("Comparing own station count %d to %d\n", sta_count, sta_count_to_compare);
return sta_count - sta_count_to_compare > dawn_metric.max_station_diff;
if (sta_count - sta_count_to_compare > dawn_metric.max_station_diff)
return 1;
else if (sta_count_to_compare - sta_count > dawn_metric.max_station_diff)
return -1;
else
return 0;
}
int better_ap_available(ap *kicking_ap, struct dawn_mac client_mac, char* neighbor_report) {
static struct kicking_nr *insert_kicking_nr(struct kicking_nr *nr_list, char *nr, int score) {
struct kicking_nr *new_entry;
if (!(new_entry = dawn_malloc(sizeof (struct kicking_nr))))
return NULL;
strncpy(new_entry->nr, nr, NEIGHBOR_REPORT_LEN);
new_entry->score = score;
new_entry->next = nr_list;
return new_entry;
}
static void remove_kicking_nr_list(struct kicking_nr *nr_list) {
struct kicking_nr *n;
while(nr_list) {
n = nr_list->next;
dawn_free(nr_list);
nr_list = n;
}
}
int better_ap_available(ap *kicking_ap, struct dawn_mac client_mac, struct kicking_nr **neighbor_report) {
// This remains set to the current AP of client for rest of function
probe_entry* own_probe = *probe_array_find_first_entry(client_mac, kicking_ap->bssid_addr, true);
@ -515,32 +541,40 @@ int better_ap_available(ap *kicking_ap, struct dawn_mac client_mac, char* neighb
if (score_to_compare > max_score) {
if(neighbor_report == NULL)
{
fprintf(stderr,"Neigbor-Report is NULL!\n");
fprintf(stderr,"Neighbor-Report is NULL!\n");
return 1; // TODO: Should this be -1?
}
kick = 1;
// instead of returning we append a neighbor report list...
strcpy(neighbor_report, candidate_ap->neighbor_report);
// instead of returning we create a neighbor report list...
remove_kicking_nr_list(*neighbor_report);
*neighbor_report = insert_kicking_nr(NULL, candidate_ap->neighbor_report, score_to_compare);
max_score = score_to_compare;
}
// if ap have same value but station count is different...
// TODO: Is absolute number meaningful when AP have diffeent capacity?
else if (dawn_metric.use_station_count > 0 && score_to_compare == max_score ) {
int compare = compare_station_count(kicking_ap, candidate_ap, client_mac);
if (compare_station_count(kicking_ap, candidate_ap, client_mac)) {
if (compare > 0) {
if (neighbor_report == NULL)
{
fprintf(stderr, "Neigbor-Report is NULL!\n");
fprintf(stderr, "Neighbor-Report is NULL!\n");
return 1; // TODO: Should this be -1?
}
kick = 1;
strcpy(neighbor_report, candidate_ap->neighbor_report);
remove_kicking_nr_list(*neighbor_report);
*neighbor_report = insert_kicking_nr(NULL, candidate_ap->neighbor_report, score_to_compare);
}
else if (compare == 0 && kick) {
*neighbor_report = insert_kicking_nr(*neighbor_report, candidate_ap->neighbor_report, score_to_compare);
}
}
else if (score_to_compare == max_score && kick) {
*neighbor_report = insert_kicking_nr(*neighbor_report, candidate_ap->neighbor_report, score_to_compare);
}
i = i->next_probe;
@ -549,7 +583,7 @@ int better_ap_available(ap *kicking_ap, struct dawn_mac client_mac, char* neighb
return kick;
}
static int kick_client(ap* kicking_ap, struct client_s *client_entry, char* neighbor_report) {
static int kick_client(ap* kicking_ap, struct client_s *client_entry, struct kicking_nr** neighbor_report) {
int ret = 0;
if (!mac_in_maclist(client_entry->client_addr)) {
@ -575,10 +609,11 @@ int kick_clients(ap* kicking_ap, uint32_t id) {
// Go threw clients
while (j != NULL && mac_is_equal_bb(j->bssid_addr, kicking_ap->bssid_addr)) {
char neighbor_report[NEIGHBOR_REPORT_LEN] = "";
struct kicking_nr *neighbor_report = NULL;
int do_kick = kick_client(kicking_ap, j, neighbor_report);
printf("Chosen AP %s\n", neighbor_report);
int do_kick = kick_client(kicking_ap, j, &neighbor_report);
for (struct kicking_nr *n = neighbor_report; n; n = n->next)
printf("Chosen AP candidate: " NR_MACSTR ", score=%d\n", NR_MAC2STR(n->nr), n->score);
// better ap available
if (do_kick > 0) {
@ -596,7 +631,8 @@ int kick_clients(ap* kicking_ap, uint32_t id) {
printf("Check if client is active receiving!\n");
float rx_rate, tx_rate;
if (get_bandwidth_iwinfo(j->client_addr, &rx_rate, &tx_rate)) {
bool have_bandwidth_iwinfo = !(get_bandwidth_iwinfo(j->client_addr, &rx_rate, &tx_rate));
if (!have_bandwidth_iwinfo && dawn_metric.bandwidth_threshold > 0) {
printf("No active transmission data for client. Don't kick!\n");
}
else
@ -604,12 +640,16 @@ int kick_clients(ap* kicking_ap, uint32_t id) {
// only use rx_rate for indicating if transmission is going on
// <= 6MBits <- probably no transmission
// tx_rate has always some weird value so don't use ist
if (rx_rate > dawn_metric.bandwidth_threshold) {
if (have_bandwidth_iwinfo && rx_rate > dawn_metric.bandwidth_threshold) {
printf("Client is probably in active transmisison. Don't kick! RxRate is: %f\n", rx_rate);
}
else
{
printf("Client is probably NOT in active transmisison. KICK! RxRate is: %f\n", rx_rate);
if (have_bandwidth_iwinfo)
printf("Client is probably NOT in active transmisison. KICK! RxRate is: %f\n", rx_rate);
else
printf("No active tranmission data for client, but bandwidth_threshold=%d means we don't care. KICK!\n",
dawn_metric.bandwidth_threshold);
// here we should send a messsage to set the probe.count for all aps to the min that there is no delay between switching
// the hearing map is full...
@ -632,6 +672,8 @@ int kick_clients(ap* kicking_ap, uint32_t id) {
// don't delete clients in a row. use update function again...
// -> chan_util update, ...
add_client_update_timer(timeout_config.update_client * 1000 / 4);
remove_kicking_nr_list(neighbor_report);
neighbor_report = NULL;
break;
}
}
@ -653,6 +695,8 @@ int kick_clients(ap* kicking_ap, uint32_t id) {
j->kick_count = 0;
}
remove_kicking_nr_list(neighbor_report);
neighbor_report = NULL;
j = j->next_entry_bc;
}

View file

@ -12,16 +12,16 @@ dawn min_kick_count=1
#AP
ap bssid=0A:7B:AA:00:01:00 ht_sup=1 vht_sup=1 util=156 stations=13 ssid=aTestSSID weight=10 neighbors=0A:7B:AA:00:01:00
ap bssid=02:67:AA:00:02:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=02:67:AA:00:02:00
ap bssid=14:02:AA:00:03:00 ht_sup=1 vht_sup=1 util=126 stations=9 ssid=aTestSSID weight=10 neighbors=14:02:AA:00:03:00
ap bssid=1F:36:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=1F:36:AA:00:04:00
ap bssid=69:E9:AA:00:05:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=69:E9:AA:00:05:00
ap bssid=6A:97:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=6A:97:AA:00:06:00
ap bssid=45:63:AA:00:07:00 ht_sup=0 vht_sup=0 util=55 stations=5 ssid=aTestSSID weight=10 neighbors=45:63:AA:00:07:00
ap bssid=07:1E:AA:00:08:00 ht_sup=1 vht_sup=1 util=88 stations=8 ssid=aTestSSID weight=10 neighbors=07:1E:AA:00:08:00
ap bssid=45:A2:AA:00:09:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=45:A2:AA:00:09:00
ap bssid=4C:4D:AA:00:0A:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=4C:4D:AA:00:0A:00
ap bssid=0A:7B:AA:00:01:00 ht_sup=1 vht_sup=1 util=156 stations=13 ssid=aTestSSID weight=10 neighbors=0A7BAA000100
ap bssid=02:67:AA:00:02:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=0267AA000200
ap bssid=14:02:AA:00:03:00 ht_sup=1 vht_sup=1 util=126 stations=9 ssid=aTestSSID weight=10 neighbors=1402AA000300
ap bssid=1F:36:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=1F36AA000400
ap bssid=69:E9:AA:00:05:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=69E9AA000500
ap bssid=6A:97:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=6A97AA000600
ap bssid=45:63:AA:00:07:00 ht_sup=0 vht_sup=0 util=55 stations=5 ssid=aTestSSID weight=10 neighbors=4563AA000700
ap bssid=07:1E:AA:00:08:00 ht_sup=1 vht_sup=1 util=88 stations=8 ssid=aTestSSID weight=10 neighbors=071EAA000800
ap bssid=45:A2:AA:00:09:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=45A2AA000900
ap bssid=4C:4D:AA:00:0A:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=4C4DAA000A00
#Client
client client=50:7B:DD:00:01:00 bssid=45:A2:AA:00:09:00 freq=2500 ht_cap=1 vht_cap=1

View file

@ -11,106 +11,106 @@ dawn low_rssi=0
dawn min_kick_count=1
# AP
ap bssid=20:C9:AA:00:01:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=20:C9:AA:00:01:00
ap bssid=47:90:AA:00:02:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=47:90:AA:00:02:00
ap bssid=57:BD:AA:00:03:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=57:BD:AA:00:03:00
ap bssid=23:0F:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=23:0F:AA:00:04:00
ap bssid=2C:B9:AA:00:05:00 ht_sup=0 vht_sup=0 util=84 stations=7 ssid=aTestSSID weight=10 neighbors=2C:B9:AA:00:05:00
ap bssid=73:74:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=73:74:AA:00:06:00
ap bssid=13:0F:AA:00:07:00 ht_sup=0 vht_sup=0 util=20 stations=2 ssid=aTestSSID weight=10 neighbors=13:0F:AA:00:07:00
ap bssid=77:C0:AA:00:08:00 ht_sup=0 vht_sup=0 util=196 stations=14 ssid=aTestSSID weight=10 neighbors=77:C0:AA:00:08:00
ap bssid=16:9D:AA:00:09:00 ht_sup=1 vht_sup=1 util=84 stations=6 ssid=aTestSSID weight=10 neighbors=16:9D:AA:00:09:00
ap bssid=77:99:AA:00:0A:00 ht_sup=1 vht_sup=0 util=70 stations=7 ssid=aTestSSID weight=10 neighbors=77:99:AA:00:0A:00
ap bssid=01:D2:AA:00:0B:00 ht_sup=0 vht_sup=0 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=01:D2:AA:00:0B:00
ap bssid=27:B9:AA:00:0C:00 ht_sup=1 vht_sup=1 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=27:B9:AA:00:0C:00
ap bssid=59:D5:AA:00:0D:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=59:D5:AA:00:0D:00
ap bssid=7C:37:AA:00:0E:00 ht_sup=1 vht_sup=1 util=99 stations=9 ssid=aTestSSID weight=10 neighbors=7C:37:AA:00:0E:00
ap bssid=1D:0F:AA:00:0F:00 ht_sup=0 vht_sup=0 util=210 stations=15 ssid=aTestSSID weight=10 neighbors=1D:0F:AA:00:0F:00
ap bssid=60:AD:AA:00:10:00 ht_sup=1 vht_sup=1 util=80 stations=8 ssid=aTestSSID weight=10 neighbors=60:AD:AA:00:10:00
ap bssid=3B:81:AA:00:11:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=3B:81:AA:00:11:00
ap bssid=6A:1B:AA:00:12:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=6A:1B:AA:00:12:00
ap bssid=61:D6:AA:00:13:00 ht_sup=1 vht_sup=1 util=28 stations=2 ssid=aTestSSID weight=10 neighbors=61:D6:AA:00:13:00
ap bssid=5B:F3:AA:00:14:00 ht_sup=1 vht_sup=1 util=24 stations=2 ssid=aTestSSID weight=10 neighbors=5B:F3:AA:00:14:00
ap bssid=7A:92:AA:00:15:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=7A:92:AA:00:15:00
ap bssid=3D:08:AA:00:16:00 ht_sup=1 vht_sup=0 util=75 stations=5 ssid=aTestSSID weight=10 neighbors=3D:08:AA:00:16:00
ap bssid=11:C4:AA:00:17:00 ht_sup=1 vht_sup=1 util=20 stations=2 ssid=aTestSSID weight=10 neighbors=11:C4:AA:00:17:00
ap bssid=21:01:AA:00:18:00 ht_sup=0 vht_sup=0 util=225 stations=15 ssid=aTestSSID weight=10 neighbors=21:01:AA:00:18:00
ap bssid=27:35:AA:00:19:00 ht_sup=0 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=27:35:AA:00:19:00
ap bssid=22:44:AA:00:1A:00 ht_sup=1 vht_sup=0 util=90 stations=9 ssid=aTestSSID weight=10 neighbors=22:44:AA:00:1A:00
ap bssid=1B:18:AA:00:1B:00 ht_sup=1 vht_sup=1 util=90 stations=9 ssid=aTestSSID weight=10 neighbors=1B:18:AA:00:1B:00
ap bssid=28:6D:AA:00:1C:00 ht_sup=0 vht_sup=0 util=121 stations=11 ssid=aTestSSID weight=10 neighbors=28:6D:AA:00:1C:00
ap bssid=01:39:AA:00:1D:00 ht_sup=1 vht_sup=1 util=50 stations=5 ssid=aTestSSID weight=10 neighbors=01:39:AA:00:1D:00
ap bssid=37:35:AA:00:1E:00 ht_sup=1 vht_sup=0 util=90 stations=6 ssid=aTestSSID weight=10 neighbors=37:35:AA:00:1E:00
ap bssid=46:AF:AA:00:1F:00 ht_sup=0 vht_sup=0 util=26 stations=2 ssid=aTestSSID weight=10 neighbors=46:AF:AA:00:1F:00
ap bssid=21:ED:AA:00:20:00 ht_sup=0 vht_sup=0 util=132 stations=11 ssid=aTestSSID weight=10 neighbors=21:ED:AA:00:20:00
ap bssid=36:0C:AA:00:21:00 ht_sup=1 vht_sup=0 util=150 stations=10 ssid=aTestSSID weight=10 neighbors=36:0C:AA:00:21:00
ap bssid=1F:62:AA:00:22:00 ht_sup=1 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=1F:62:AA:00:22:00
ap bssid=06:08:AA:00:23:00 ht_sup=0 vht_sup=0 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=06:08:AA:00:23:00
ap bssid=5A:57:AA:00:24:00 ht_sup=1 vht_sup=0 util=165 stations=15 ssid=aTestSSID weight=10 neighbors=5A:57:AA:00:24:00
ap bssid=3E:BB:AA:00:25:00 ht_sup=1 vht_sup=1 util=112 stations=8 ssid=aTestSSID weight=10 neighbors=3E:BB:AA:00:25:00
ap bssid=3A:70:AA:00:26:00 ht_sup=0 vht_sup=0 util=15 stations=1 ssid=aTestSSID weight=10 neighbors=3A:70:AA:00:26:00
ap bssid=61:41:AA:00:27:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=61:41:AA:00:27:00
ap bssid=41:A1:AA:00:28:00 ht_sup=0 vht_sup=0 util=66 stations=6 ssid=aTestSSID weight=10 neighbors=41:A1:AA:00:28:00
ap bssid=5D:F5:AA:00:29:00 ht_sup=0 vht_sup=0 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=5D:F5:AA:00:29:00
ap bssid=7A:24:AA:00:2A:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=7A:24:AA:00:2A:00
ap bssid=05:18:AA:00:2B:00 ht_sup=1 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=05:18:AA:00:2B:00
ap bssid=10:E2:AA:00:2C:00 ht_sup=0 vht_sup=0 util=90 stations=6 ssid=aTestSSID weight=10 neighbors=10:E2:AA:00:2C:00
ap bssid=3E:07:AA:00:2D:00 ht_sup=1 vht_sup=0 util=48 stations=4 ssid=aTestSSID weight=10 neighbors=3E:07:AA:00:2D:00
ap bssid=58:66:AA:00:2E:00 ht_sup=0 vht_sup=0 util=84 stations=6 ssid=aTestSSID weight=10 neighbors=58:66:AA:00:2E:00
ap bssid=70:EA:AA:00:2F:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=70:EA:AA:00:2F:00
ap bssid=10:4F:AA:00:30:00 ht_sup=0 vht_sup=0 util=33 stations=3 ssid=aTestSSID weight=10 neighbors=10:4F:AA:00:30:00
ap bssid=2E:E0:AA:00:31:00 ht_sup=1 vht_sup=1 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=2E:E0:AA:00:31:00
ap bssid=6D:3B:AA:00:32:00 ht_sup=0 vht_sup=0 util=33 stations=3 ssid=aTestSSID weight=10 neighbors=6D:3B:AA:00:32:00
ap bssid=44:B5:AA:00:33:00 ht_sup=1 vht_sup=1 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=44:B5:AA:00:33:00
ap bssid=7D:3D:AA:00:34:00 ht_sup=1 vht_sup=1 util=72 stations=6 ssid=aTestSSID weight=10 neighbors=7D:3D:AA:00:34:00
ap bssid=04:0E:AA:00:35:00 ht_sup=1 vht_sup=0 util=195 stations=15 ssid=aTestSSID weight=10 neighbors=04:0E:AA:00:35:00
ap bssid=24:C9:AA:00:36:00 ht_sup=1 vht_sup=0 util=52 stations=4 ssid=aTestSSID weight=10 neighbors=24:C9:AA:00:36:00
ap bssid=2F:19:AA:00:37:00 ht_sup=0 vht_sup=0 util=75 stations=5 ssid=aTestSSID weight=10 neighbors=2F:19:AA:00:37:00
ap bssid=10:24:AA:00:38:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=10:24:AA:00:38:00
ap bssid=12:BE:AA:00:39:00 ht_sup=1 vht_sup=0 util=143 stations=13 ssid=aTestSSID weight=10 neighbors=12:BE:AA:00:39:00
ap bssid=15:56:AA:00:3A:00 ht_sup=0 vht_sup=0 util=52 stations=4 ssid=aTestSSID weight=10 neighbors=15:56:AA:00:3A:00
ap bssid=7B:52:AA:00:3B:00 ht_sup=0 vht_sup=0 util=140 stations=14 ssid=aTestSSID weight=10 neighbors=7B:52:AA:00:3B:00
ap bssid=22:99:AA:00:3C:00 ht_sup=1 vht_sup=0 util=154 stations=11 ssid=aTestSSID weight=10 neighbors=22:99:AA:00:3C:00
ap bssid=4F:BF:AA:00:3D:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=4F:BF:AA:00:3D:00
ap bssid=75:49:AA:00:3E:00 ht_sup=1 vht_sup=0 util=30 stations=2 ssid=aTestSSID weight=10 neighbors=75:49:AA:00:3E:00
ap bssid=3F:3E:AA:00:3F:00 ht_sup=1 vht_sup=1 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=3F:3E:AA:00:3F:00
ap bssid=75:52:AA:00:40:00 ht_sup=0 vht_sup=0 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=75:52:AA:00:40:00
ap bssid=0D:7F:AA:00:41:00 ht_sup=1 vht_sup=1 util=143 stations=13 ssid=aTestSSID weight=10 neighbors=0D:7F:AA:00:41:00
ap bssid=31:26:AA:00:42:00 ht_sup=1 vht_sup=1 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=31:26:AA:00:42:00
ap bssid=29:5C:AA:00:43:00 ht_sup=0 vht_sup=0 util=48 stations=4 ssid=aTestSSID weight=10 neighbors=29:5C:AA:00:43:00
ap bssid=16:26:AA:00:44:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=16:26:AA:00:44:00
ap bssid=5A:0B:AA:00:45:00 ht_sup=1 vht_sup=1 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=5A:0B:AA:00:45:00
ap bssid=21:95:AA:00:46:00 ht_sup=0 vht_sup=0 util=182 stations=13 ssid=aTestSSID weight=10 neighbors=21:95:AA:00:46:00
ap bssid=6E:CA:AA:00:47:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=6E:CA:AA:00:47:00
ap bssid=66:09:AA:00:48:00 ht_sup=0 vht_sup=0 util=121 stations=11 ssid=aTestSSID weight=10 neighbors=66:09:AA:00:48:00
ap bssid=7D:12:AA:00:49:00 ht_sup=0 vht_sup=0 util=140 stations=10 ssid=aTestSSID weight=10 neighbors=7D:12:AA:00:49:00
ap bssid=61:5A:AA:00:4A:00 ht_sup=0 vht_sup=0 util=150 stations=15 ssid=aTestSSID weight=10 neighbors=61:5A:AA:00:4A:00
ap bssid=59:46:AA:00:4B:00 ht_sup=1 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=59:46:AA:00:4B:00
ap bssid=3F:13:AA:00:4C:00 ht_sup=1 vht_sup=1 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=3F:13:AA:00:4C:00
ap bssid=15:E2:AA:00:4D:00 ht_sup=1 vht_sup=0 util=60 stations=5 ssid=aTestSSID weight=10 neighbors=15:E2:AA:00:4D:00
ap bssid=43:5D:AA:00:4E:00 ht_sup=1 vht_sup=1 util=11 stations=1 ssid=aTestSSID weight=10 neighbors=43:5D:AA:00:4E:00
ap bssid=75:2D:AA:00:4F:00 ht_sup=0 vht_sup=0 util=91 stations=7 ssid=aTestSSID weight=10 neighbors=75:2D:AA:00:4F:00
ap bssid=3A:78:AA:00:50:00 ht_sup=0 vht_sup=0 util=225 stations=15 ssid=aTestSSID weight=10 neighbors=3A:78:AA:00:50:00
ap bssid=59:68:AA:00:51:00 ht_sup=0 vht_sup=0 util=182 stations=14 ssid=aTestSSID weight=10 neighbors=59:68:AA:00:51:00
ap bssid=68:A3:AA:00:52:00 ht_sup=0 vht_sup=0 util=99 stations=9 ssid=aTestSSID weight=10 neighbors=68:A3:AA:00:52:00
ap bssid=5F:7D:AA:00:53:00 ht_sup=1 vht_sup=0 util=50 stations=5 ssid=aTestSSID weight=10 neighbors=5F:7D:AA:00:53:00
ap bssid=16:90:AA:00:54:00 ht_sup=1 vht_sup=0 util=70 stations=5 ssid=aTestSSID weight=10 neighbors=16:90:AA:00:54:00
ap bssid=70:32:AA:00:55:00 ht_sup=1 vht_sup=1 util=195 stations=15 ssid=aTestSSID weight=10 neighbors=70:32:AA:00:55:00
ap bssid=76:52:AA:00:56:00 ht_sup=1 vht_sup=1 util=143 stations=11 ssid=aTestSSID weight=10 neighbors=76:52:AA:00:56:00
ap bssid=33:D6:AA:00:57:00 ht_sup=0 vht_sup=0 util=39 stations=3 ssid=aTestSSID weight=10 neighbors=33:D6:AA:00:57:00
ap bssid=3C:D0:AA:00:58:00 ht_sup=0 vht_sup=0 util=165 stations=11 ssid=aTestSSID weight=10 neighbors=3C:D0:AA:00:58:00
ap bssid=74:70:AA:00:59:00 ht_sup=0 vht_sup=0 util=135 stations=9 ssid=aTestSSID weight=10 neighbors=74:70:AA:00:59:00
ap bssid=6B:B1:AA:00:5A:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=6B:B1:AA:00:5A:00
ap bssid=1A:74:AA:00:5B:00 ht_sup=1 vht_sup=0 util=182 stations=13 ssid=aTestSSID weight=10 neighbors=1A:74:AA:00:5B:00
ap bssid=67:CE:AA:00:5C:00 ht_sup=1 vht_sup=1 util=15 stations=1 ssid=aTestSSID weight=10 neighbors=67:CE:AA:00:5C:00
ap bssid=0F:EE:AA:00:5D:00 ht_sup=1 vht_sup=0 util=156 stations=12 ssid=aTestSSID weight=10 neighbors=0F:EE:AA:00:5D:00
ap bssid=18:24:AA:00:5E:00 ht_sup=1 vht_sup=0 util=132 stations=11 ssid=aTestSSID weight=10 neighbors=18:24:AA:00:5E:00
ap bssid=76:35:AA:00:5F:00 ht_sup=1 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=76:35:AA:00:5F:00
ap bssid=69:40:AA:00:60:00 ht_sup=0 vht_sup=0 util=180 stations=12 ssid=aTestSSID weight=10 neighbors=69:40:AA:00:60:00
ap bssid=3A:1A:AA:00:61:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=3A:1A:AA:00:61:00
ap bssid=31:32:AA:00:62:00 ht_sup=1 vht_sup=1 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=31:32:AA:00:62:00
ap bssid=32:98:AA:00:63:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=32:98:AA:00:63:00
ap bssid=0F:FC:AA:00:64:00 ht_sup=1 vht_sup=0 util=26 stations=2 ssid=aTestSSID weight=10 neighbors=0F:FC:AA:00:64:00
ap bssid=20:C9:AA:00:01:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=20C9AA000100
ap bssid=47:90:AA:00:02:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=4790AA000200
ap bssid=57:BD:AA:00:03:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=57BDAA000300
ap bssid=23:0F:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=230FAA000400
ap bssid=2C:B9:AA:00:05:00 ht_sup=0 vht_sup=0 util=84 stations=7 ssid=aTestSSID weight=10 neighbors=2CB9AA000500
ap bssid=73:74:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=7374AA000600
ap bssid=13:0F:AA:00:07:00 ht_sup=0 vht_sup=0 util=20 stations=2 ssid=aTestSSID weight=10 neighbors=130FAA000700
ap bssid=77:C0:AA:00:08:00 ht_sup=0 vht_sup=0 util=196 stations=14 ssid=aTestSSID weight=10 neighbors=77C0AA000800
ap bssid=16:9D:AA:00:09:00 ht_sup=1 vht_sup=1 util=84 stations=6 ssid=aTestSSID weight=10 neighbors=169DAA000900
ap bssid=77:99:AA:00:0A:00 ht_sup=1 vht_sup=0 util=70 stations=7 ssid=aTestSSID weight=10 neighbors=7799AA000A00
ap bssid=01:D2:AA:00:0B:00 ht_sup=0 vht_sup=0 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=01D2AA000B00
ap bssid=27:B9:AA:00:0C:00 ht_sup=1 vht_sup=1 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=27B9AA000C00
ap bssid=59:D5:AA:00:0D:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=59D5AA000D00
ap bssid=7C:37:AA:00:0E:00 ht_sup=1 vht_sup=1 util=99 stations=9 ssid=aTestSSID weight=10 neighbors=7C37AA000E00
ap bssid=1D:0F:AA:00:0F:00 ht_sup=0 vht_sup=0 util=210 stations=15 ssid=aTestSSID weight=10 neighbors=1D0FAA000F00
ap bssid=60:AD:AA:00:10:00 ht_sup=1 vht_sup=1 util=80 stations=8 ssid=aTestSSID weight=10 neighbors=60ADAA001000
ap bssid=3B:81:AA:00:11:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=3B81AA001100
ap bssid=6A:1B:AA:00:12:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=6A1BAA001200
ap bssid=61:D6:AA:00:13:00 ht_sup=1 vht_sup=1 util=28 stations=2 ssid=aTestSSID weight=10 neighbors=61D6AA001300
ap bssid=5B:F3:AA:00:14:00 ht_sup=1 vht_sup=1 util=24 stations=2 ssid=aTestSSID weight=10 neighbors=5BF3AA001400
ap bssid=7A:92:AA:00:15:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=7A92AA001500
ap bssid=3D:08:AA:00:16:00 ht_sup=1 vht_sup=0 util=75 stations=5 ssid=aTestSSID weight=10 neighbors=3D08AA001600
ap bssid=11:C4:AA:00:17:00 ht_sup=1 vht_sup=1 util=20 stations=2 ssid=aTestSSID weight=10 neighbors=11C4AA001700
ap bssid=21:01:AA:00:18:00 ht_sup=0 vht_sup=0 util=225 stations=15 ssid=aTestSSID weight=10 neighbors=2101AA001800
ap bssid=27:35:AA:00:19:00 ht_sup=0 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=2735AA001900
ap bssid=22:44:AA:00:1A:00 ht_sup=1 vht_sup=0 util=90 stations=9 ssid=aTestSSID weight=10 neighbors=2244AA001A00
ap bssid=1B:18:AA:00:1B:00 ht_sup=1 vht_sup=1 util=90 stations=9 ssid=aTestSSID weight=10 neighbors=1B18AA001B00
ap bssid=28:6D:AA:00:1C:00 ht_sup=0 vht_sup=0 util=121 stations=11 ssid=aTestSSID weight=10 neighbors=286DAA001C00
ap bssid=01:39:AA:00:1D:00 ht_sup=1 vht_sup=1 util=50 stations=5 ssid=aTestSSID weight=10 neighbors=0139AA001D00
ap bssid=37:35:AA:00:1E:00 ht_sup=1 vht_sup=0 util=90 stations=6 ssid=aTestSSID weight=10 neighbors=3735AA001E00
ap bssid=46:AF:AA:00:1F:00 ht_sup=0 vht_sup=0 util=26 stations=2 ssid=aTestSSID weight=10 neighbors=46AFAA001F00
ap bssid=21:ED:AA:00:20:00 ht_sup=0 vht_sup=0 util=132 stations=11 ssid=aTestSSID weight=10 neighbors=21EDAA002000
ap bssid=36:0C:AA:00:21:00 ht_sup=1 vht_sup=0 util=150 stations=10 ssid=aTestSSID weight=10 neighbors=360CAA002100
ap bssid=1F:62:AA:00:22:00 ht_sup=1 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=1F62AA002200
ap bssid=06:08:AA:00:23:00 ht_sup=0 vht_sup=0 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=0608AA002300
ap bssid=5A:57:AA:00:24:00 ht_sup=1 vht_sup=0 util=165 stations=15 ssid=aTestSSID weight=10 neighbors=5A57AA002400
ap bssid=3E:BB:AA:00:25:00 ht_sup=1 vht_sup=1 util=112 stations=8 ssid=aTestSSID weight=10 neighbors=3EBBAA002500
ap bssid=3A:70:AA:00:26:00 ht_sup=0 vht_sup=0 util=15 stations=1 ssid=aTestSSID weight=10 neighbors=3A70AA002600
ap bssid=61:41:AA:00:27:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=6141AA002700
ap bssid=41:A1:AA:00:28:00 ht_sup=0 vht_sup=0 util=66 stations=6 ssid=aTestSSID weight=10 neighbors=41A1AA002800
ap bssid=5D:F5:AA:00:29:00 ht_sup=0 vht_sup=0 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=5DF5AA002900
ap bssid=7A:24:AA:00:2A:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=7A24AA002A00
ap bssid=05:18:AA:00:2B:00 ht_sup=1 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=0518AA002B00
ap bssid=10:E2:AA:00:2C:00 ht_sup=0 vht_sup=0 util=90 stations=6 ssid=aTestSSID weight=10 neighbors=10E2AA002C00
ap bssid=3E:07:AA:00:2D:00 ht_sup=1 vht_sup=0 util=48 stations=4 ssid=aTestSSID weight=10 neighbors=3E07AA002D00
ap bssid=58:66:AA:00:2E:00 ht_sup=0 vht_sup=0 util=84 stations=6 ssid=aTestSSID weight=10 neighbors=5866AA002E00
ap bssid=70:EA:AA:00:2F:00 ht_sup=0 vht_sup=0 util=98 stations=7 ssid=aTestSSID weight=10 neighbors=70EAAA002F00
ap bssid=10:4F:AA:00:30:00 ht_sup=0 vht_sup=0 util=33 stations=3 ssid=aTestSSID weight=10 neighbors=104FAA003000
ap bssid=2E:E0:AA:00:31:00 ht_sup=1 vht_sup=1 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=2EE0AA003100
ap bssid=6D:3B:AA:00:32:00 ht_sup=0 vht_sup=0 util=33 stations=3 ssid=aTestSSID weight=10 neighbors=6D3BAA003200
ap bssid=44:B5:AA:00:33:00 ht_sup=1 vht_sup=1 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=44B5AA003300
ap bssid=7D:3D:AA:00:34:00 ht_sup=1 vht_sup=1 util=72 stations=6 ssid=aTestSSID weight=10 neighbors=7D3DAA003400
ap bssid=04:0E:AA:00:35:00 ht_sup=1 vht_sup=0 util=195 stations=15 ssid=aTestSSID weight=10 neighbors=040EAA003500
ap bssid=24:C9:AA:00:36:00 ht_sup=1 vht_sup=0 util=52 stations=4 ssid=aTestSSID weight=10 neighbors=24C9AA003600
ap bssid=2F:19:AA:00:37:00 ht_sup=0 vht_sup=0 util=75 stations=5 ssid=aTestSSID weight=10 neighbors=2F19AA003700
ap bssid=10:24:AA:00:38:00 ht_sup=0 vht_sup=0 util=105 stations=7 ssid=aTestSSID weight=10 neighbors=1024AA003800
ap bssid=12:BE:AA:00:39:00 ht_sup=1 vht_sup=0 util=143 stations=13 ssid=aTestSSID weight=10 neighbors=12BEAA003900
ap bssid=15:56:AA:00:3A:00 ht_sup=0 vht_sup=0 util=52 stations=4 ssid=aTestSSID weight=10 neighbors=1556AA003A00
ap bssid=7B:52:AA:00:3B:00 ht_sup=0 vht_sup=0 util=140 stations=14 ssid=aTestSSID weight=10 neighbors=7B52AA003B00
ap bssid=22:99:AA:00:3C:00 ht_sup=1 vht_sup=0 util=154 stations=11 ssid=aTestSSID weight=10 neighbors=2299AA003C00
ap bssid=4F:BF:AA:00:3D:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=4FBFAA003D00
ap bssid=75:49:AA:00:3E:00 ht_sup=1 vht_sup=0 util=30 stations=2 ssid=aTestSSID weight=10 neighbors=7549AA003E00
ap bssid=3F:3E:AA:00:3F:00 ht_sup=1 vht_sup=1 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=3F3EAA003F00
ap bssid=75:52:AA:00:40:00 ht_sup=0 vht_sup=0 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=7552AA004000
ap bssid=0D:7F:AA:00:41:00 ht_sup=1 vht_sup=1 util=143 stations=13 ssid=aTestSSID weight=10 neighbors=0D7FAA004100
ap bssid=31:26:AA:00:42:00 ht_sup=1 vht_sup=1 util=100 stations=10 ssid=aTestSSID weight=10 neighbors=3126AA004200
ap bssid=29:5C:AA:00:43:00 ht_sup=0 vht_sup=0 util=48 stations=4 ssid=aTestSSID weight=10 neighbors=295CAA004300
ap bssid=16:26:AA:00:44:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=1626AA004400
ap bssid=5A:0B:AA:00:45:00 ht_sup=1 vht_sup=1 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=5A0BAA004500
ap bssid=21:95:AA:00:46:00 ht_sup=0 vht_sup=0 util=182 stations=13 ssid=aTestSSID weight=10 neighbors=2195AA004600
ap bssid=6E:CA:AA:00:47:00 ht_sup=0 vht_sup=0 util=120 stations=10 ssid=aTestSSID weight=10 neighbors=6ECAAA004700
ap bssid=66:09:AA:00:48:00 ht_sup=0 vht_sup=0 util=121 stations=11 ssid=aTestSSID weight=10 neighbors=6609AA004800
ap bssid=7D:12:AA:00:49:00 ht_sup=0 vht_sup=0 util=140 stations=10 ssid=aTestSSID weight=10 neighbors=7D12AA004900
ap bssid=61:5A:AA:00:4A:00 ht_sup=0 vht_sup=0 util=150 stations=15 ssid=aTestSSID weight=10 neighbors=615AAA004A00
ap bssid=59:46:AA:00:4B:00 ht_sup=1 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=5946AA004B00
ap bssid=3F:13:AA:00:4C:00 ht_sup=1 vht_sup=1 util=22 stations=2 ssid=aTestSSID weight=10 neighbors=3F13AA004C00
ap bssid=15:E2:AA:00:4D:00 ht_sup=1 vht_sup=0 util=60 stations=5 ssid=aTestSSID weight=10 neighbors=15E2AA004D00
ap bssid=43:5D:AA:00:4E:00 ht_sup=1 vht_sup=1 util=11 stations=1 ssid=aTestSSID weight=10 neighbors=435DAA004E00
ap bssid=75:2D:AA:00:4F:00 ht_sup=0 vht_sup=0 util=91 stations=7 ssid=aTestSSID weight=10 neighbors=752DAA004F00
ap bssid=3A:78:AA:00:50:00 ht_sup=0 vht_sup=0 util=225 stations=15 ssid=aTestSSID weight=10 neighbors=3A78AA005000
ap bssid=59:68:AA:00:51:00 ht_sup=0 vht_sup=0 util=182 stations=14 ssid=aTestSSID weight=10 neighbors=5968AA005100
ap bssid=68:A3:AA:00:52:00 ht_sup=0 vht_sup=0 util=99 stations=9 ssid=aTestSSID weight=10 neighbors=68A3AA005200
ap bssid=5F:7D:AA:00:53:00 ht_sup=1 vht_sup=0 util=50 stations=5 ssid=aTestSSID weight=10 neighbors=5F7DAA005300
ap bssid=16:90:AA:00:54:00 ht_sup=1 vht_sup=0 util=70 stations=5 ssid=aTestSSID weight=10 neighbors=1690AA005400
ap bssid=70:32:AA:00:55:00 ht_sup=1 vht_sup=1 util=195 stations=15 ssid=aTestSSID weight=10 neighbors=7032AA005500
ap bssid=76:52:AA:00:56:00 ht_sup=1 vht_sup=1 util=143 stations=11 ssid=aTestSSID weight=10 neighbors=7652AA005600
ap bssid=33:D6:AA:00:57:00 ht_sup=0 vht_sup=0 util=39 stations=3 ssid=aTestSSID weight=10 neighbors=33D6AA005700
ap bssid=3C:D0:AA:00:58:00 ht_sup=0 vht_sup=0 util=165 stations=11 ssid=aTestSSID weight=10 neighbors=3CD0AA005800
ap bssid=74:70:AA:00:59:00 ht_sup=0 vht_sup=0 util=135 stations=9 ssid=aTestSSID weight=10 neighbors=7470AA005900
ap bssid=6B:B1:AA:00:5A:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=6BB1AA005A00
ap bssid=1A:74:AA:00:5B:00 ht_sup=1 vht_sup=0 util=182 stations=13 ssid=aTestSSID weight=10 neighbors=1A74AA005B00
ap bssid=67:CE:AA:00:5C:00 ht_sup=1 vht_sup=1 util=15 stations=1 ssid=aTestSSID weight=10 neighbors=67CEAA005C00
ap bssid=0F:EE:AA:00:5D:00 ht_sup=1 vht_sup=0 util=156 stations=12 ssid=aTestSSID weight=10 neighbors=0FEEAA005D00
ap bssid=18:24:AA:00:5E:00 ht_sup=1 vht_sup=0 util=132 stations=11 ssid=aTestSSID weight=10 neighbors=1824AA005E00
ap bssid=76:35:AA:00:5F:00 ht_sup=1 vht_sup=0 util=60 stations=4 ssid=aTestSSID weight=10 neighbors=7635AA005F00
ap bssid=69:40:AA:00:60:00 ht_sup=0 vht_sup=0 util=180 stations=12 ssid=aTestSSID weight=10 neighbors=6940AA006000
ap bssid=3A:1A:AA:00:61:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=3A1AAA006100
ap bssid=31:32:AA:00:62:00 ht_sup=1 vht_sup=1 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=3132AA006200
ap bssid=32:98:AA:00:63:00 ht_sup=0 vht_sup=0 util=65 stations=5 ssid=aTestSSID weight=10 neighbors=3298AA006300
ap bssid=0F:FC:AA:00:64:00 ht_sup=1 vht_sup=0 util=26 stations=2 ssid=aTestSSID weight=10 neighbors=0FFCAA006400
# Device

View file

@ -12,16 +12,16 @@ dawn min_kick_count=1
#AP
ap bssid=0A:7B:AA:00:01:00 ht_sup=1 vht_sup=1 util=156 stations=13 ssid=aTestSSID weight=10 neighbors=0A:7B:AA:00:01:00
ap bssid=02:67:AA:00:02:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=02:67:AA:00:02:00
ap bssid=14:02:AA:00:03:00 ht_sup=1 vht_sup=1 util=126 stations=9 ssid=aTestSSID weight=10 neighbors=14:02:AA:00:03:00
ap bssid=1F:36:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=1F:36:AA:00:04:00
ap bssid=69:E9:AA:00:05:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=69:E9:AA:00:05:00
ap bssid=6A:97:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=6A:97:AA:00:06:00
ap bssid=45:63:AA:00:07:00 ht_sup=0 vht_sup=0 util=55 stations=5 ssid=aTestSSID weight=10 neighbors=45:63:AA:00:07:00
ap bssid=07:1E:AA:00:08:00 ht_sup=1 vht_sup=1 util=88 stations=8 ssid=aTestSSID weight=10 neighbors=07:1E:AA:00:08:00
ap bssid=45:A2:AA:00:09:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=45:A2:AA:00:09:00
ap bssid=4C:4D:AA:00:0A:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=4C:4D:AA:00:0A:00
ap bssid=0A:7B:AA:00:01:00 ht_sup=1 vht_sup=1 util=156 stations=13 ssid=aTestSSID weight=10 neighbors=0A7BAA000100
ap bssid=02:67:AA:00:02:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=0267AA000200
ap bssid=14:02:AA:00:03:00 ht_sup=1 vht_sup=1 util=126 stations=9 ssid=aTestSSID weight=10 neighbors=1402AA000300
ap bssid=1F:36:AA:00:04:00 ht_sup=0 vht_sup=0 util=120 stations=8 ssid=aTestSSID weight=10 neighbors=1F36AA000400
ap bssid=69:E9:AA:00:05:00 ht_sup=0 vht_sup=0 util=44 stations=4 ssid=aTestSSID weight=10 neighbors=69E9AA000500
ap bssid=6A:97:AA:00:06:00 ht_sup=0 vht_sup=0 util=110 stations=11 ssid=aTestSSID weight=10 neighbors=6A97AA000600
ap bssid=45:63:AA:00:07:00 ht_sup=0 vht_sup=0 util=55 stations=5 ssid=aTestSSID weight=10 neighbors=4563AA000700
ap bssid=07:1E:AA:00:08:00 ht_sup=1 vht_sup=1 util=88 stations=8 ssid=aTestSSID weight=10 neighbors=071EAA000800
ap bssid=45:A2:AA:00:09:00 ht_sup=0 vht_sup=0 util=120 stations=12 ssid=aTestSSID weight=10 neighbors=45A2AA000900
ap bssid=4C:4D:AA:00:0A:00 ht_sup=1 vht_sup=1 util=195 stations=13 ssid=aTestSSID weight=10 neighbors=4C4DAA000A00
#Client
client client=50:7B:DD:00:01:00 bssid=45:A2:AA:00:09:00 freq=2500 ht_cap=1 vht_cap=1

View file

@ -1,7 +1,7 @@
dawn default
dawn min_kick_count=2
ap bssid=11:22:33:44:55:66 neighbors=11:22:33:44:55:66
ap bssid=22:33:44:55:66:77 neighbors=22:33:44:55:66:77
ap bssid=11:22:33:44:55:66 neighbors=112233445566
ap bssid=22:33:44:55:66:77 neighbors=223344556677
client bssid=11:22:33:44:55:66 client=ff:ee:dd:cc:bb:aa
ap_show
client_show

View file

@ -22,20 +22,25 @@ int send_set_probe(struct dawn_mac client_addr)
return 0;
}
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, char* dest_ap, uint32_t duration)
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, struct kicking_nr* neighbor_list, uint32_t duration)
{
int ret = 0;
printf("wnm_disassoc_imminent() was called...\n");
if (dest_ap != NULL)
if (neighbor_list != NULL)
{
// Fake a client being disassociated and then rejoining on the recommended neoghbor
client *mc = client_array_get_client(client_addr);
mc = client_array_delete(mc, true);
hwaddr_aton(dest_ap, mc->bssid_addr.u8);
// Originally, there was only one AP, not a list of them; that AP is at the tail of the list
// Use it to keep the results the same as before
while (neighbor_list && neighbor_list->next)
neighbor_list = neighbor_list->next;
for (int n=0; n < ETH_ALEN; n++)
sscanf(neighbor_list->nr + n*2, "%2hhx", mc->bssid_addr.u8 + n);
insert_client_to_array(mc, 0);
printf("BSS TRANSITION TO %s\n", dest_ap);
printf("BSS TRANSITION TO " NR_MACSTR "\n", NR_MAC2STR(neighbor_list->nr));
// Tell caller not to change the arrays any further
ret = 1;
@ -996,6 +1001,8 @@ static int consume_actions(int argc, char* argv[], int harness_verbosity)
load_u32(&autokick, argv[3]);
char nb[NEIGHBOR_REPORT_LEN] = "TAMPER EVIDENT NEIGHBOR REPORT INITIALISATION STRING";
struct kicking_nr neighbor = {0};
struct kicking_nr *neighbor_list = &neighbor;
if (curr_arg + 5 <= argc)
{
@ -1009,8 +1016,8 @@ static int consume_actions(int argc, char* argv[], int harness_verbosity)
{
strcpy(nb, argv[4]);
}
tr = better_ap_available(ap_array_get_ap(bssid_mac, NULL), client_mac, nb);
strncpy(neighbor.nr, nb, NEIGHBOR_REPORT_LEN);
tr = better_ap_available(ap_array_get_ap(bssid_mac, NULL), client_mac, &neighbor_list);
}
else
{

View file

@ -926,7 +926,7 @@ void del_client_interface(uint32_t id, const struct dawn_mac client_addr, uint32
}
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, char *dest_ap, uint32_t duration) {
int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, struct kicking_nr* neighbor_list, uint32_t duration) {
struct hostapd_sock_entry *sub;
blob_buf_init(&b, 0);
@ -934,12 +934,11 @@ int wnm_disassoc_imminent(uint32_t id, const struct dawn_mac client_addr, char *
blobmsg_add_u32(&b, "duration", duration);
blobmsg_add_u8(&b, "abridged", 1); // prefer aps in neighborlist
// ToDo: maybe exchange to a list of aps
void* nbs = blobmsg_open_array(&b, "neighbors");
if (dest_ap != NULL)
{
blobmsg_add_string(&b, NULL, dest_ap);
printf("BSS TRANSITION TO %s\n", dest_ap);
while(neighbor_list != NULL) {
printf("BSS TRANSITION NEIGHBOR " NR_MACSTR ", Score=%d\n", NR_MAC2STR(neighbor_list->nr), neighbor_list->score);
blobmsg_add_string(&b, NULL, neighbor_list->nr);
neighbor_list = neighbor_list->next;
}
blobmsg_close_array(&b, nbs);