svn commit: r343999 - in stable/12: sbin/ifconfig sys/net80211
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Mon Feb 11 08:49:58 UTC 2019
Author: gonzo
Date: Mon Feb 11 08:49:56 2019
New Revision: 343999
URL: https://svnweb.freebsd.org/changeset/base/343999
Log:
MFC r343204:
[ifconfig] Print more WPS attributes in verbose "list scan" output
- Move WPS related defines to dedicated file
- Add handlers for more WPS attributes
PR: 217317
Submitted by: J.R. Oldroyd <fbsd at opal.com>
Added:
stable/12/sys/net80211/ieee80211_wps.h
- copied unchanged from r343204, head/sys/net80211/ieee80211_wps.h
Modified:
stable/12/sbin/ifconfig/ifieee80211.c
stable/12/sys/net80211/ieee80211.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sbin/ifconfig/ifieee80211.c
==============================================================================
--- stable/12/sbin/ifconfig/ifieee80211.c Mon Feb 11 07:42:32 2019 (r343998)
+++ stable/12/sbin/ifconfig/ifieee80211.c Mon Feb 11 08:49:56 2019 (r343999)
@@ -77,6 +77,7 @@
#include <net80211/ieee80211_superg.h>
#include <net80211/ieee80211_tdma.h>
#include <net80211/ieee80211_mesh.h>
+#include <net80211/ieee80211_wps.h>
#include <assert.h>
#include <ctype.h>
@@ -3124,13 +3125,6 @@ printrsnie(const char *tag, const u_int8_t *ie, size_t
}
}
-/* XXX move to a public include file */
-#define IEEE80211_WPS_DEV_PASS_ID 0x1012
-#define IEEE80211_WPS_SELECTED_REG 0x1041
-#define IEEE80211_WPS_SETUP_STATE 0x1044
-#define IEEE80211_WPS_UUID_E 0x1047
-#define IEEE80211_WPS_VERSION 0x104a
-
#define BE_READ_2(p) \
((u_int16_t) \
((((const u_int8_t *)(p))[1] ) | \
@@ -3152,6 +3146,7 @@ printwpsie(const char *tag, const u_int8_t *ie, size_t
"R" /* Registrar-specified */
};
int n;
+ int f;
ie +=6, len -= 4; /* NB: len is payload only */
@@ -3160,6 +3155,7 @@ printwpsie(const char *tag, const u_int8_t *ie, size_t
while (len) {
uint16_t tlv_type = BE_READ_2(ie);
uint16_t tlv_len = BE_READ_2(ie + 2);
+ uint16_t cfg_mthd;
/* some devices broadcast invalid WPS frames */
if (tlv_len > len) {
@@ -3172,30 +3168,191 @@ printwpsie(const char *tag, const u_int8_t *ie, size_t
ie += 4, len -= 4;
switch (tlv_type) {
- case IEEE80211_WPS_VERSION:
+ case IEEE80211_WPS_ATTR_VERSION:
printf("v:%d.%d", *ie >> 4, *ie & 0xf);
break;
- case IEEE80211_WPS_SETUP_STATE:
- /* Only 1 and 2 are valid */
- if (*ie == 0 || *ie >= 3)
- printf(" state:B");
+ case IEEE80211_WPS_ATTR_AP_SETUP_LOCKED:
+ printf(" ap_setup:%s", *ie ? "locked" :
+ "unlocked");
+ break;
+ case IEEE80211_WPS_ATTR_CONFIG_METHODS:
+ case IEEE80211_WPS_ATTR_SELECTED_REGISTRAR_CONFIG_METHODS:
+ if (tlv_type == IEEE80211_WPS_ATTR_SELECTED_REGISTRAR_CONFIG_METHODS)
+ printf(" sel_reg_cfg_mthd:");
else
- printf(" st:%s", *ie == 1 ? "N" : "C");
+ printf(" cfg_mthd:" );
+ cfg_mthd = BE_READ_2(ie);
+ f = 0;
+ for (n = 15; n >= 0; n--) {
+ if (f) {
+ printf(",");
+ f = 0;
+ }
+ switch (cfg_mthd & (1 << n)) {
+ case 0:
+ break;
+ case IEEE80211_WPS_CONFIG_USBA:
+ printf("usba");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_ETHERNET:
+ printf("ethernet");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_LABEL:
+ printf("label");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_DISPLAY:
+ if (!(cfg_mthd &
+ (IEEE80211_WPS_CONFIG_VIRT_DISPLAY |
+ IEEE80211_WPS_CONFIG_PHY_DISPLAY)))
+ {
+ printf("display");
+ f++;
+ }
+ break;
+ case IEEE80211_WPS_CONFIG_EXT_NFC_TOKEN:
+ printf("ext_nfc_tokenk");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_INT_NFC_TOKEN:
+ printf("int_nfc_token");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_NFC_INTERFACE:
+ printf("nfc_interface");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_PUSHBUTTON:
+ if (!(cfg_mthd &
+ (IEEE80211_WPS_CONFIG_VIRT_PUSHBUTTON |
+ IEEE80211_WPS_CONFIG_PHY_PUSHBUTTON))) {
+ printf("push_button");
+ f++;
+ }
+ break;
+ case IEEE80211_WPS_CONFIG_KEYPAD:
+ printf("keypad");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_VIRT_PUSHBUTTON:
+ printf("virtual_push_button");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_PHY_PUSHBUTTON:
+ printf("physical_push_button");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_P2PS:
+ printf("p2ps");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_VIRT_DISPLAY:
+ printf("virtual_display");
+ f++;
+ break;
+ case IEEE80211_WPS_CONFIG_PHY_DISPLAY:
+ printf("physical_display");
+ f++;
+ break;
+ default:
+ printf("unknown_wps_config<%04x>",
+ cfg_mthd & (1 << n));
+ f++;
+ break;
+ }
+ }
break;
- case IEEE80211_WPS_SELECTED_REG:
- printf(" sel:%s", *ie ? "T" : "F");
+ case IEEE80211_WPS_ATTR_DEV_NAME:
+ printf(" device_name:<%.*s>", tlv_len, ie);
break;
- case IEEE80211_WPS_DEV_PASS_ID:
+ case IEEE80211_WPS_ATTR_DEV_PASSWORD_ID:
n = LE_READ_2(ie);
if (n < nitems(dev_pass_id))
printf(" dpi:%s", dev_pass_id[n]);
break;
- case IEEE80211_WPS_UUID_E:
+ case IEEE80211_WPS_ATTR_MANUFACTURER:
+ printf(" manufacturer:<%.*s>", tlv_len, ie);
+ break;
+ case IEEE80211_WPS_ATTR_MODEL_NAME:
+ printf(" model_name:<%.*s>", tlv_len, ie);
+ break;
+ case IEEE80211_WPS_ATTR_MODEL_NUMBER:
+ printf(" model_number:<%.*s>", tlv_len, ie);
+ break;
+ case IEEE80211_WPS_ATTR_PRIMARY_DEV_TYPE:
+ printf(" prim_dev:");
+ for (n = 0; n < tlv_len; n++)
+ printf("%02x", ie[n]);
+ break;
+ case IEEE80211_WPS_ATTR_RF_BANDS:
+ printf(" rf:");
+ f = 0;
+ for (n = 7; n >= 0; n--) {
+ if (f) {
+ printf(",");
+ f = 0;
+ }
+ switch (*ie & (1 << n)) {
+ case 0:
+ break;
+ case IEEE80211_WPS_RF_BAND_24GHZ:
+ printf("2.4Ghz");
+ f++;
+ break;
+ case IEEE80211_WPS_RF_BAND_50GHZ:
+ printf("5Ghz");
+ f++;
+ break;
+ case IEEE80211_WPS_RF_BAND_600GHZ:
+ printf("60Ghz");
+ f++;
+ break;
+ default:
+ printf("unknown<%02x>",
+ *ie & (1 << n));
+ f++;
+ break;
+ }
+ }
+ break;
+ case IEEE80211_WPS_ATTR_RESPONSE_TYPE:
+ printf(" resp_type:0x%02x", *ie);
+ break;
+ case IEEE80211_WPS_ATTR_SELECTED_REGISTRAR:
+ printf(" sel:%s", *ie ? "T" : "F");
+ break;
+ case IEEE80211_WPS_ATTR_SERIAL_NUMBER:
+ printf(" serial_number:<%.*s>", tlv_len, ie);
+ break;
+ case IEEE80211_WPS_ATTR_UUID_E:
printf(" uuid-e:");
for (n = 0; n < (tlv_len - 1); n++)
printf("%02x-", ie[n]);
printf("%02x", ie[n]);
break;
+ case IEEE80211_WPS_ATTR_VENDOR_EXT:
+ printf(" vendor:");
+ for (n = 0; n < tlv_len; n++)
+ printf("%02x", ie[n]);
+ break;
+ case IEEE80211_WPS_ATTR_WPS_STATE:
+ switch (*ie) {
+ case IEEE80211_WPS_STATE_NOT_CONFIGURED:
+ printf(" state:N");
+ break;
+ case IEEE80211_WPS_STATE_CONFIGURED:
+ printf(" state:C");
+ break;
+ default:
+ printf(" state:B<%02x>", *ie);
+ break;
+ }
+ break;
+ default:
+ printf(" unknown_wps_attr:0x%x", tlv_type);
+ break;
}
ie += tlv_len, len -= tlv_len;
}
@@ -3348,6 +3505,7 @@ iswpsoui(const uint8_t *frm)
static const char *
iename(int elemid)
{
+ static char iename_buf[64];
switch (elemid) {
case IEEE80211_ELEMID_FHPARMS: return " FHPARMS";
case IEEE80211_ELEMID_CFPARMS: return " CFPARMS";
@@ -3365,10 +3523,21 @@ iename(int elemid)
case IEEE80211_ELEMID_MEASREP: return " MEASREP";
case IEEE80211_ELEMID_QUIET: return " QUIET";
case IEEE80211_ELEMID_IBSSDFS: return " IBSSDFS";
+ case IEEE80211_ELEMID_RESERVED_47:
+ return " RESERVED_47";
+ case IEEE80211_ELEMID_MOBILITY_DOMAIN:
+ return " MOBILITY_DOMAIN";
+ case IEEE80211_ELEMID_RRM_ENACAPS:
+ return " RRM_ENCAPS";
+ case IEEE80211_ELEMID_OVERLAP_BSS_SCAN_PARAM:
+ return " OVERLAP_BSS";
case IEEE80211_ELEMID_TPC: return " TPC";
case IEEE80211_ELEMID_CCKM: return " CCKM";
+ case IEEE80211_ELEMID_EXTCAP: return " EXTCAP";
}
- return " ???";
+ snprintf(iename_buf, sizeof(iename_buf), " UNKNOWN_ELEMID_%d",
+ elemid);
+ return (const char *) iename_buf;
}
static void
Modified: stable/12/sys/net80211/ieee80211.h
==============================================================================
--- stable/12/sys/net80211/ieee80211.h Mon Feb 11 07:42:32 2019 (r343998)
+++ stable/12/sys/net80211/ieee80211.h Mon Feb 11 08:49:56 2019 (r343999)
@@ -951,9 +951,11 @@ enum {
IEEE80211_ELEMID_ERP = 42,
IEEE80211_ELEMID_HTCAP = 45,
IEEE80211_ELEMID_QOS = 46,
+ IEEE80211_ELEMID_RESERVED_47 = 47,
IEEE80211_ELEMID_RSN = 48,
IEEE80211_ELEMID_XRATES = 50,
IEEE80211_ELEMID_APCHANREP = 51,
+ IEEE80211_ELEMID_MOBILITY_DOMAIN = 54,
IEEE80211_ELEMID_HTINFO = 61,
IEEE80211_ELEMID_SECCHAN_OFFSET = 62,
IEEE80211_ELEMID_RRM_ENACAPS = 70,
Copied: stable/12/sys/net80211/ieee80211_wps.h (from r343204, head/sys/net80211/ieee80211_wps.h)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/12/sys/net80211/ieee80211_wps.h Mon Feb 11 08:49:56 2019 (r343999, copy of r343204, head/sys/net80211/ieee80211_wps.h)
@@ -0,0 +1,149 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2017 J.R. Oldroyd, Open Advisors Limited
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+#ifndef _NET80211_IEEE80211_WPS_H_
+#define _NET80211_IEEE80211_WPS_H_
+
+/*
+ * 802.11 WPS implementation definitions.
+ */
+
+#define IEEE80211_WPS_ATTR_AP_CHANNEL 0x1001
+#define IEEE80211_WPS_ATTR_ASSOC_STATE 0x1002
+#define IEEE80211_WPS_ATTR_AUTH_TYPE 0x1003
+#define IEEE80211_WPS_ATTR_AUTH_TYPE_FLAGS 0x1004
+#define IEEE80211_WPS_ATTR_AUTHENTICATOR 0x1005
+#define IEEE80211_WPS_ATTR_CONFIG_METHODS 0x1008
+#define IEEE80211_WPS_ATTR_CONFIG_ERROR 0x1009
+#define IEEE80211_WPS_ATTR_CONFIRM_URL4 0x100a
+#define IEEE80211_WPS_ATTR_CONFIRM_URL6 0x100b
+#define IEEE80211_WPS_ATTR_CONN_TYPE 0x100c
+#define IEEE80211_WPS_ATTR_CONN_TYPE_FLAGS 0x100d
+#define IEEE80211_WPS_ATTR_CRED 0x100e
+#define IEEE80211_WPS_ATTR_ENCR_TYPE 0x100f
+#define IEEE80211_WPS_ATTR_ENCR_TYPE_FLAGS 0x1010
+#define IEEE80211_WPS_ATTR_DEV_NAME 0x1011
+#define IEEE80211_WPS_ATTR_DEV_PASSWORD_ID 0x1012
+#define IEEE80211_WPS_ATTR_E_HASH1 0x1014
+#define IEEE80211_WPS_ATTR_E_HASH2 0x1015
+#define IEEE80211_WPS_ATTR_E_SNONCE1 0x1016
+#define IEEE80211_WPS_ATTR_E_SNONCE2 0x1017
+#define IEEE80211_WPS_ATTR_ENCR_SETTINGS 0x1018
+#define IEEE80211_WPS_ATTR_ENROLLEE_NONCE 0x101a
+#define IEEE80211_WPS_ATTR_FEATURE_ID 0x101b
+#define IEEE80211_WPS_ATTR_IDENTITY 0x101c
+#define IEEE80211_WPS_ATTR_IDENTITY_PROOF 0x101d
+#define IEEE80211_WPS_ATTR_KEY_WRAP_AUTH 0x101e
+#define IEEE80211_WPS_ATTR_KEY_ID 0x101f
+#define IEEE80211_WPS_ATTR_MAC_ADDR 0x1020
+#define IEEE80211_WPS_ATTR_MANUFACTURER 0x1021
+#define IEEE80211_WPS_ATTR_MSG_TYPE 0x1022
+#define IEEE80211_WPS_ATTR_MODEL_NAME 0x1023
+#define IEEE80211_WPS_ATTR_MODEL_NUMBER 0x1024
+#define IEEE80211_WPS_ATTR_NETWORK_INDEX 0x1026
+#define IEEE80211_WPS_ATTR_NETWORK_KEY 0x1027
+#define IEEE80211_WPS_ATTR_NETWORK_KEY_INDEX 0x1028
+#define IEEE80211_WPS_ATTR_NEW_DEVICE_NAME 0x1029
+#define IEEE80211_WPS_ATTR_NEW_PASSWORD 0x102a
+#define IEEE80211_WPS_ATTR_OOB_DEVICE_PASSWORD 0x102c
+#define IEEE80211_WPS_ATTR_OS_VERSION 0x102d
+#define IEEE80211_WPS_ATTR_POWER_LEVEL 0x102f
+#define IEEE80211_WPS_ATTR_PSK_CURRENT 0x1030
+#define IEEE80211_WPS_ATTR_PSK_MAX 0x1031
+#define IEEE80211_WPS_ATTR_PUBLIC_KEY 0x1032
+#define IEEE80211_WPS_ATTR_RADIO_ENABLE 0x1033
+#define IEEE80211_WPS_ATTR_REBOOT 0x1034
+#define IEEE80211_WPS_ATTR_REGISTRAR_CURRENT 0x1035
+#define IEEE80211_WPS_ATTR_REGISTRAR_ESTBLSHD 0x1036
+#define IEEE80211_WPS_ATTR_REGISTRAR_LIST 0x1037
+#define IEEE80211_WPS_ATTR_REGISTRAR_MAX 0x1038
+#define IEEE80211_WPS_ATTR_REGISTRAR_NONCE 0x1039
+#define IEEE80211_WPS_ATTR_REQUEST_TYPE 0x103a
+#define IEEE80211_WPS_ATTR_RESPONSE_TYPE 0x103b
+#define IEEE80211_WPS_ATTR_RF_BANDS 0x103c
+#define IEEE80211_WPS_ATTR_R_HASH1 0x103d
+#define IEEE80211_WPS_ATTR_R_HASH2 0x103e
+#define IEEE80211_WPS_ATTR_R_SNONCE1 0x103f
+#define IEEE80211_WPS_ATTR_R_SNONCE2 0x1040
+#define IEEE80211_WPS_ATTR_SELECTED_REGISTRAR 0x1041
+#define IEEE80211_WPS_ATTR_SERIAL_NUMBER 0x1042
+#define IEEE80211_WPS_ATTR_WPS_STATE 0x1044
+#define IEEE80211_WPS_ATTR_SSID 0x1045
+#define IEEE80211_WPS_ATTR_TOTAL_NETWORKS 0x1046
+#define IEEE80211_WPS_ATTR_UUID_E 0x1047
+#define IEEE80211_WPS_ATTR_UUID_R 0x1048
+#define IEEE80211_WPS_ATTR_VENDOR_EXT 0x1049
+#define IEEE80211_WPS_ATTR_VERSION 0x104a
+#define IEEE80211_WPS_ATTR_X509_CERT_REQ 0x104b
+#define IEEE80211_WPS_ATTR_X509_CERT 0x104c
+#define IEEE80211_WPS_ATTR_EAP_IDENTITY 0x104d
+#define IEEE80211_WPS_ATTR_MSG_COUNTER 0x104e
+#define IEEE80211_WPS_ATTR_PUBKEY_HASH 0x104f
+#define IEEE80211_WPS_ATTR_REKEY_KEY 0x1050
+#define IEEE80211_WPS_ATTR_KEY_LIFETIME 0x1051
+#define IEEE80211_WPS_ATTR_PERMITTED_CONFIG_METHODS 0x1052
+#define IEEE80211_WPS_ATTR_SELECTED_REGISTRAR_CONFIG_METHODS 0x1053
+#define IEEE80211_WPS_ATTR_PRIMARY_DEV_TYPE 0x1054
+#define IEEE80211_WPS_ATTR_SECONDARY_DEV_TYPE_LIST 0x1055
+#define IEEE80211_WPS_ATTR_PORTABLE_DEV 0x1056
+#define IEEE80211_WPS_ATTR_AP_SETUP_LOCKED 0x1057
+#define IEEE80211_WPS_ATTR_APPLICATION_EXT 0x1058
+#define IEEE80211_WPS_ATTR_EAP_TYPE 0x1059
+#define IEEE80211_WPS_ATTR_IV 0x1060
+#define IEEE80211_WPS_ATTR_KEY_PROVIDED_AUTO 0x1061
+#define IEEE80211_WPS_ATTR_802_1X_ENABLED 0x1062
+#define IEEE80211_WPS_ATTR_AP_SESSION_KEY 0x1063
+#define IEEE80211_WPS_ATTR_WEP_TRANSMIT_KEY 0x1064
+#define IEEE80211_WPS_ATTR_REQUESTED_DEV_TYPE 0x106a
+#define IEEE80211_WPS_ATTR_EXTENSIBILITY_TEST 0x10fa /* _NOT_ defined in the spec */
+
+/* RF bands bitmask */
+#define IEEE80211_WPS_RF_BAND_24GHZ 0x01
+#define IEEE80211_WPS_RF_BAND_50GHZ 0x02
+#define IEEE80211_WPS_RF_BAND_600GHZ 0x04
+
+/* Config methods bitmask */
+#define IEEE80211_WPS_CONFIG_USBA 0x0001
+#define IEEE80211_WPS_CONFIG_ETHERNET 0x0002
+#define IEEE80211_WPS_CONFIG_LABEL 0x0004
+#define IEEE80211_WPS_CONFIG_DISPLAY 0x0008
+#define IEEE80211_WPS_CONFIG_EXT_NFC_TOKEN 0x0010
+#define IEEE80211_WPS_CONFIG_INT_NFC_TOKEN 0x0020
+#define IEEE80211_WPS_CONFIG_NFC_INTERFACE 0x0040
+#define IEEE80211_WPS_CONFIG_PUSHBUTTON 0x0080
+#define IEEE80211_WPS_CONFIG_KEYPAD 0x0100
+#define IEEE80211_WPS_CONFIG_VIRT_PUSHBUTTON 0x0200
+#define IEEE80211_WPS_CONFIG_PHY_PUSHBUTTON 0x0400
+#define IEEE80211_WPS_CONFIG_P2PS 0x1000
+#define IEEE80211_WPS_CONFIG_VIRT_DISPLAY 0x2000
+#define IEEE80211_WPS_CONFIG_PHY_DISPLAY 0x4000
+
+/* Wi-Fi Protected Setup state */
+#define IEEE80211_WPS_STATE_NOT_CONFIGURED 0x01
+#define IEEE80211_WPS_STATE_CONFIGURED 0x02
+#endif /* _NET80211_IEEE80211_WPS_H_ */
More information about the svn-src-stable-12
mailing list