From patchwork Tue Aug 27 16:07:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 2850245 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 6D853BF546 for ; Tue, 27 Aug 2013 16:07:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3019A20483 for ; Tue, 27 Aug 2013 16:07:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0F8212047D for ; Tue, 27 Aug 2013 16:07:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753389Ab3H0QH0 (ORCPT ); Tue, 27 Aug 2013 12:07:26 -0400 Received: from mail.candelatech.com ([208.74.158.172]:56795 "EHLO ns3.lanforge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753313Ab3H0QHZ (ORCPT ); Tue, 27 Aug 2013 12:07:25 -0400 Received: from localhost.localdomain (firewall.candelatech.com [70.89.124.249]) by ns3.lanforge.com (8.14.2/8.14.2) with ESMTP id r7RG7HoD031648 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 27 Aug 2013 09:07:17 -0700 From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH] iw: Print Interworking IE details in scan results. Date: Tue, 27 Aug 2013 09:07:11 -0700 Message-Id: <1377619631-14699-1-git-send-email-greearb@candelatech.com> X-Mailer: git-send-email 1.7.3.4 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Ben Greear 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 --- :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)