From: Ben Greear <greearb@xxxxxxxxxxxxxxx> Output looks like: 802.11u Interworking: Network Options: 0xf1 Network Type: 1 (Private with Guest) Internet ASRA ESR UESA Venu Group: 2 (Business) Venu Type: 1 HESSID: 00:00:00:00:00:01 Signed-off-by: Ben Greear <greearb@xxxxxxxxxxxxxxx> --- :100644 100644 af21cbc... 1894769... M scan.c scan.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-) diff --git a/scan.c b/scan.c index af21cbc..1894769 100644 --- a/scan.c +++ b/scan.c @@ -614,6 +614,69 @@ static void print_ht_capa(const uint8_t type, uint8_t len, const uint8_t *data) print_ht_mcs(data + 3); } +static const char* ntype_11u(uint8_t t) { + switch (t) { + case 0: return "Private"; + case 1: return "Private with Guest"; + case 2: return "Chargeable Public"; + case 3: return "Free Public"; + case 4: return "Personal Device"; + case 5: return "Emergency Services Only"; + case 14: return "Test or Experimental"; + case 15: return "Wildcard"; + default: return "Reserved"; + } +} + +static const char* vgroup_11u(uint8_t t) { + switch (t) { + case 0: return "Unspecified"; + case 1: return "Assembly"; + case 2: return "Business"; + case 3: return "Educational"; + case 4: return "Factory and Industrial"; + case 5: return "Institutional"; + case 6: return "Mercantile"; + case 7: return "Residential"; + case 8: return "Storage"; + case 9: return "Utility and Miscellaneous"; + case 10: return "Vehicular"; + case 11: return "Outdoor"; + default: return "Reserved"; + } +} + +static void print_interworking(const uint8_t type, uint8_t len, const uint8_t *data) +{ + /* See Section 7.3.2.92 in the 802.11u spec. */ + printf("\n"); + if (len >= 1) { + uint8_t ano = data[0]; + printf("\t\tNetwork Options: 0x%hx\n", (unsigned short)(ano)); + printf("\t\t\tNetwork Type: %i (%s)\n", + (int)(ano & 0xf), ntype_11u(ano & 0xf)); + if (ano & (1<<4)) + printf("\t\t\tInternet\n"); + if (ano & (1<<5)) + printf("\t\t\tASRA\n"); + if (ano & (1<<6)) + printf("\t\t\tESR\n"); + if (ano & (1<<7)) + printf("\t\t\tUESA\n"); + } + if ((len == 3) || (len == 9)) { + printf("\t\tVenue Group: %i (%s)\n", + (int)(data[1]), vgroup_11u(data[1])); + printf("\t\tVenue Type: %i\n", (int)(data[2])); + } + if (len == 9) + printf("\t\tHESSID: %02hx:%02hx:%02hx:%02hx:%02hx:%02hx\n", + data[3], data[4], data[5], data[6], data[7], data[8]); + else if (len == 7) + printf("\t\tHESSID: %02hx:%02hx:%02hx:%02hx:%02hx:%02hx\n", + data[1], data[2], data[3], data[4], data[5], data[6]); +} + static const char *ht_secondary_offset[4] = { "no secondary", "above", @@ -891,6 +954,7 @@ static const struct ie_print ieprinters[] = { [113] = { "MESH Configuration", print_mesh_conf, 7, 7, BIT(PRINT_SCAN), }, [114] = { "MESH ID", print_ssid, 0, 32, BIT(PRINT_SCAN) | BIT(PRINT_LINK), }, [127] = { "Extended capabilities", print_capabilities, 0, 255, BIT(PRINT_SCAN), }, + [107] = { "802.11u Interworking", print_interworking, 0, 255, BIT(PRINT_SCAN), }, }; static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data) -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html