monitor: Refactor print_ie_vendor

To support addition WFA tags
This commit is contained in:
Denis Kenzior 2015-07-09 11:58:29 -05:00
parent 0389c60066
commit a76918e15c
1 changed files with 22 additions and 14 deletions

View File

@ -816,23 +816,20 @@ end:
static void print_ie_wpa(unsigned int level, const char *label,
const void *data, uint16_t size)
{
uint8_t type, offset;
uint8_t offset;
uint16_t version, count;
if (size < 3)
if (size < 2)
return;
offset = 0;
type = *((uint8_t *)data);
offset++;
version = l_get_le16(data + offset);
offset += 2;
if (!(type == 1 && version == 1))
if (version != 1)
return;
print_attr(level, "WPA:");
print_attr(level + 1, "Type: %d", type);
print_attr(level + 1, "Version: %d(%04x)", version, version);
if (offset + 4 > size)
@ -873,13 +870,14 @@ end:
static void print_ie_vendor(unsigned int level, const char *label,
const void *data, uint16_t size)
{
static const unsigned char wfa_oui[3] = { 0x00, 0x50, 0xf2 };
const uint8_t *oui = data;
const char *str = NULL;
unsigned int i;
print_attr(level, "%s: len %u", label, size);
if (size < 3)
if (size < 4)
return;
for (i = 0; oui_table[i].str; i++) {
@ -890,17 +888,27 @@ static void print_ie_vendor(unsigned int level, const char *label,
}
if (!str) {
print_attr(level + 1, "OUI: %02x:%02x:%02x",
oui[0], oui[1], oui[2]);
print_attr(level + 1, "OUI: %02x:%02x:%02x type:%02x",
oui[0], oui[1], oui[2],
oui[3]);
return;
}
print_attr(level + 1, "%s (%02x:%02x:%02x)", str,
oui[0], oui[1], oui[2]);
print_attr(level + 1, "%s (%02x:%02x:%02x) type: %02x", str,
oui[0], oui[1], oui[2],
oui[3]);
if (!strcmp(str, "Microsoft")) {
print_ie_wpa(level + 2, label, data + 3, size - 3);
return;
data += 4;
size -= 4;
if (!memcmp(oui, wfa_oui, 3)) {
switch (oui[3]) {
case 1: /* WFA WPA IE */
print_ie_wpa(level + 2, label, data, size);
return;
default:
return;
}
}
}