Skip to content
Snippets Groups Projects
Commit 29465724 authored by Filip Matusiak's avatar Filip Matusiak
Browse files

Debug channel scan report

parent a4a62653
Branches
No related tags found
1 merge request!139Issue initial channel scan
...@@ -2291,103 +2291,16 @@ int handle_backhaul_sta_steer_response(void *cntlr, struct cmdu_buff *cmdu) ...@@ -2291,103 +2291,16 @@ int handle_backhaul_sta_steer_response(void *cntlr, struct cmdu_buff *cmdu)
int handle_channel_scan_report(void *cntlr, struct cmdu_buff *cmdu) int handle_channel_scan_report(void *cntlr, struct cmdu_buff *cmdu)
{ {
dbg("%s: --->\n", __func__); dbg("%s: --->\n", __func__);
int i, j, num = 256;
int offset = 0; int num = 256;
uint8_t time_len;
uint16_t num_neightbor;
uint8_t bw_len;
uint8_t *tv_data = NULL;
struct tlv *tv_tsp[1][16]; struct tlv *tv_tsp[1][16];
struct tlv *tv_scan[256]; struct tlv *tv_scan[256];
char timestamp[TIMESTAMP_MAX_LEN] = {0};
struct tlv_timestamp *p = NULL;
if (!validate_channel_scan_report(cmdu, tv_tsp, tv_scan, &num)) { if (!validate_channel_scan_report(cmdu, tv_tsp, tv_scan, &num)) {
dbg("cmdu validation: [CHANNEL_SCAN_REPORT] failed\n"); dbg("cmdu validation: [CHANNEL_SCAN_REPORT] failed\n");
return -1; return -1;
} }
dbg("\nTLV type: MAP_TLV_TIMESTAMP\n");
tv_data = (uint8_t *)tv_tsp[0][0]->data;
p = (struct tlv_timestamp *)tv_data;
dbg("\tlen: %d\n", p->len);
/*Max size is 256 as per the Multi-ap r2 spec*/
if (p->len > (TIMESTAMP_MAX_LEN - 1))
return -1;
strncpy(timestamp, (char *)p->timestamp, p->len);
timestamp[p->len] = '\0';
dbg("\ttimestamp: %s\n", timestamp);
dbg("\n");
for (i = 0; i < num; i++) {
uint8_t info = 0x00;
tv_data = (uint8_t *)tv_scan[i]->data;
struct tlv_channel_scan_result *p1 = (struct tlv_channel_scan_result *)tv_data;
dbg("\nTLV type: MAP_TLV_CHANNEL_SCAN_RES\n");
dbg("\tradio: " MACFMT "\n", MAC2STR(p1->radio));
dbg("\topclass: %d\n", p1->opclass);
dbg("\tchannel: %d\n", p1->channel);
dbg("\tstatus: 0x%02x\n", p1->status);
offset = sizeof(*p1);
if (p1->status == 0x00) {
time_len = tv_data[offset++];
dbg("\tlen: %d\n", time_len - 1);
dbg("\ttimestamp: ");
for (j = 0; j < time_len; j++) {
dbg("%c", tv_data[offset]);
offset++;
}
dbg("\n");
dbg("\tutilization: %d\n", tv_data[offset]);
offset++;
dbg("\tnoise: %d\n", tv_data[offset]);
offset++;
num_neightbor = BUF_GET_BE16(tv_data[offset]);
dbg("\tnum_neighbor: %d\n", num_neightbor);
offset += 2;
for (j = 0; j < num_neightbor; j++) {
char ssidstr[33] = {0};
uint8_t len = 0, ssidlen;
dbg("\n\t\tbssid: " MACFMT "\n", MAC2STR(&tv_data[offset]));
offset += 6;
ssidlen = tv_data[offset++];
dbg("\t\tlen: %d\n", ssidlen);
len = (ssidlen + 1 > sizeof(ssidstr)
? sizeof(ssidstr) : ssidlen + 1);
snprintf(ssidstr, len, "%s", (char *)&tv_data[offset]);
dbg("\t\tssid: %s\n", ssidstr);
offset += ssidlen;
dbg("\t\trcpi: %d\n", (int)tv_data[offset]);
offset++;
bw_len = tv_data[offset++];
dbg("\t\tlen: %d\n", bw_len);
dbg("\t\tbwstr: %d\n", atoi((char *)&tv_data[offset]));
offset += bw_len;
info = tv_data[offset];
dbg("\t\tinfo: %d\n", offset);
offset++;
if (info & CH_SCAN_RESULT_BSSLOAD_PRESENT) {
dbg("\t\t\tch_util: %d\n", tv_data[offset]);
offset++;
dbg("\t\t\tsta_count: %d\n", tv_data[offset]);
offset += 2;
}
}
}
dbg("\n");
}
return 0; return 0;
} }
......
...@@ -1184,57 +1184,109 @@ int debug_backhaul_sta_steer_response(void *cntlr, struct cmdu_buff *cmdu) ...@@ -1184,57 +1184,109 @@ int debug_backhaul_sta_steer_response(void *cntlr, struct cmdu_buff *cmdu)
// return 0; // return 0;
} }
#define TIMESTAMP_MAX_LEN 256
int debug_channel_scan_report(void *cntlr, struct cmdu_buff *cmdu) int debug_channel_scan_report(void *cntlr, struct cmdu_buff *cmdu)
{ {
trace("%s: --->\n", __func__);
int i, j, num = 256;
int offset = 0;
uint8_t time_len;
uint16_t num_neightbor;
uint8_t bw_len;
uint8_t *tv_data = NULL;
struct tlv *tv_tsp[1][16];
struct tlv *tv_scan[256];
char timestamp[TIMESTAMP_MAX_LEN] = {0};
struct tlv_timestamp *p = NULL;
if (!validate_channel_scan_report(cmdu, tv_tsp, tv_scan, &num)) {
dbg("cmdu validation: [CHANNEL_SCAN_REPORT] failed\n");
return -1;
}
trace("\nTLV type: MAP_TLV_TIMESTAMP\n");
tv_data = (uint8_t *)tv_tsp[0][0]->data;
p = (struct tlv_timestamp *)tv_data;
trace("\tlen: %d\n", p->len);
/*Max size is 256 as per the Multi-ap r2 spec*/
if (p->len > (TIMESTAMP_MAX_LEN - 1))
return -1;
strncpy(timestamp, (char *)p->timestamp, p->len);
timestamp[p->len] = '\0';
trace("\ttimestamp: %s\n", timestamp);
trace("\n");
for (i = 0; i < num; i++) {
uint8_t info = 0x00;
tv_data = (uint8_t *)tv_scan[i]->data;
struct tlv_channel_scan_result *p1 = (struct tlv_channel_scan_result *)tv_data;
trace("\nTLV type: MAP_TLV_CHANNEL_SCAN_RES\n");
trace("\tradio: " MACFMT "\n", MAC2STR(p1->radio));
trace("\topclass: %d\n", p1->opclass);
trace("\tchannel: %d\n", p1->channel);
trace("\tstatus: 0x%02x\n", p1->status);
offset = sizeof(*p1);
if (p1->status == 0x00) {
time_len = tv_data[offset++];
trace("\tlen: %d\n", time_len - 1);
trace("\ttimestamp: ");
for (j = 0; j < time_len; j++) {
trace("%c", tv_data[offset]);
offset++;
}
trace("\n");
trace("\tutilization: %d\n", tv_data[offset]);
offset++;
trace("\tnoise: %d\n", tv_data[offset]);
offset++;
num_neightbor = BUF_GET_BE16(tv_data[offset]);
trace("\tnum_neighbor: %d\n", num_neightbor);
offset += 2;
for (j = 0; j < num_neightbor; j++) {
char ssidstr[33] = {0};
uint8_t len = 0, ssidlen;
trace("\n\t\tbssid: " MACFMT "\n", MAC2STR(&tv_data[offset]));
offset += 6;
ssidlen = tv_data[offset++];
trace("\t\tlen: %d\n", ssidlen);
len = (ssidlen + 1 > sizeof(ssidstr)
? sizeof(ssidstr) : ssidlen + 1);
snprintf(ssidstr, len, "%s", (char *)&tv_data[offset]);
trace("\t\tssid: %s\n", ssidstr);
offset += ssidlen;
trace("\t\trcpi: %d\n", (int)tv_data[offset]);
offset++;
bw_len = tv_data[offset++];
trace("\t\tlen: %d\n", bw_len);
trace("\t\tbwstr: %d\n", atoi((char *)&tv_data[offset]));
offset += bw_len;
info = tv_data[offset];
trace("\t\tinfo: %d\n", info);
offset++;
if (info & CH_SCAN_RESULT_BSSLOAD_PRESENT) {
trace("\t\t\tch_util: %d\n", tv_data[offset]);
offset++;
trace("\t\t\tsta_count: %d\n", tv_data[offset]);
offset += 2;
}
}
}
trace("\n");
}
return 0; return 0;
// int i, j;
// uint8_t *tlv = NULL;
//
// for (i = 0; i < cmdu->num_tlvs; i++) {
// tlv = (uint8_t *) cmdu->tlvs[i];
// trace("\nCMDU type: %s\n", map_stringify_tlv_type(*tlv));
// switch (*tlv) {
// case MAP_TLV_TIMESTAMP:
// {
// struct tlv_timestamp *p =
// (struct tlv_timestamp *)tlv;
// trace("\ttime_len: %d\n", p->time_len);
// trace("\ttime: %s\n", p->time);
// break;
// }
// case MAP_TLV_CHANNEL_SCAN_RES:
// {
// struct tlv_ch_scan_res *p1 =
// (struct tlv_ch_scan_res *)tlv;
// trace("\tradio_id: " MACFMT "\n", MAC2STR(p1->radio_id));
// trace("\top_class: %d\n", p1->op_class);
// trace("\tch: %d\n", p1->ch);
// trace("\tscan_res: 0x%02x\n", p1->scan_res);
// if (p1->scan_res == 0x00) {
// trace("\ttime_len: %d\n", p1->time_len);
// if (!p1->timestamp)
// trace("\ttimestamp: %s\n", p1->timestamp);
// trace("\tutilization: %d\n", p1->utilization);
// trace("\tnoise: %d\n", p1->noise);
// trace("\tnbr_neighbor: %d\n", p1->nbr_neighbors);
// for (j = 0; j < p1->nbr_neighbors; j++) {
// trace("\n\t\tbssid: " MACFMT "\n", MAC2STR(p1->neighbor_data[j].bssid));
// trace("\t\tssid: %s\n", p1->neighbor_data[j].ssid);
// trace("\t\tssid_len: %d\n", p1->neighbor_data[j].ssid_len);
// trace("\t\tsignal_strength: %d\n", (signed char)p1->neighbor_data[j].signal_strength);
// trace("\t\tbss_load_elm_present: %d\n", p1->neighbor_data[j].bss_load_elm_present);
// }
// }
// break;
// }
// default:
// fprintf(stdout, "unknown TLV in CMDU:|%s|", map_stringify_cmdu_type(cmdu->message_type));
// break;
// }
// trace("\n");
// }
//
// return 0;
} }
int debug_sta_disassoc_stats(void *cntlr, struct cmdu_buff *cmdu) int debug_sta_disassoc_stats(void *cntlr, struct cmdu_buff *cmdu)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment