Skip to content

Instantly share code, notes, and snippets.

@gvanem
Last active September 10, 2018 13:51
Show Gist options
  • Save gvanem/d0f6a5965f89145da9fc1035e04f0e09 to your computer and use it in GitHub Desktop.
Save gvanem/d0f6a5965f89145da9fc1035e04f0e09 to your computer and use it in GitHub Desktop.
Win32-only functions to return extended information for network adapters. Used with "windump -Dv"
/*
* Winpcap stuff for Win32 only:
*
* 1) Simple trace function used by WINDUMP_TRACE() macro in netdissect.h.
* 2) Colourised 'ndo_printer'.
* 3) Low-level NDIS/Packet32 stuff that doesn't fit anywhere else.
*
* Written by G. Vanem <[email protected]> 2014.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define __WINDOT11_H__ /* Do not pull in <windot11.h> */
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>
#include <winsock2.h>
#if defined(__MINGW64_VERSION_MAJOR) && (_WIN32_WINNT >= 0x0601) && !defined(__DPAPI_H__)
/*
* This seems to be missing and required for >= _WIN32_WINNT >= 0x0601 on MinGW64 and TDM-gcc
*/
#include <dpapi.h>
#endif
#include <iphlpapi.h>
#include <pcap.h>
#include <Packet32.h>
#include <Packet32-Int.h>
#include <netdissect-stdinc.h>
#include "netdissect.h"
#include "addrtoname.h"
#include "addrtostr.h"
#include "interface.h"
#ifdef HAVE_AIRPCAP_API
#include <airpcap.h>
#include <airpcap-int.h> /* For 'AirpcapHandle::OsHandle' */
#define AirpcapHandle struct _AirpcapHandle
#endif
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0601)
#define ON_WIN_VISTA
#endif
#define DIM(x) ( sizeof(x) / sizeof((x)[0]) )
#define NONE_STR "<None>"
typedef char address_buf [INET6_ADDRSTRLEN+1];
static char work_buf [500];
PCAP_API_DEF ADAPTER *pcap_get_adapter (pcap_t *p);
static void show_link_details (netdissect_options *ndo, const char *device, const char *guid);
static void show_description (netdissect_options *ndo, const IP_ADAPTER_ADDRESSES *iface, pcap_if_t *dev);
static void supported_OID_list (ADAPTER *adapter, HANDLE air_hnd);
#if defined(__MINGW64_VERSION_MAJOR)
/*
* The MinGW/MinGW64 .h-file layout doesn't agree.
*/
#include <ntddndis.h>
#elif defined(__MINGW32__)
#include <ddk/ntddndis.h>
#else
#include <NtddNdis.h>
#endif
/*
* The below 'OID_' hex-values are written in upper case in the Windows-SDK.
* In MinGW it's lower-case. Hence turn off the "redefine" warning to shut-up
* a compilation.
*/
#ifdef DIAG_OFF
DIAG_OFF (macro-redefined)
#endif
#if defined(_MSC_VER)
#pragma warning (disable:4005)
#endif
#define OID_GEN_PHYSICAL_MEDIUM 0x00010202
#define OID_FDDI_LONG_PERMANENT_ADDRESS 0x03010101
#define OID_802_5_PERMANENT_ADDRESS 0x02010101
#define OID_WAN_PERMANENT_ADDRESS 0x04010101
#define OID_WAN_CURRENT_ADDRESS 0x04010102
#define OID_WW_GEN_PERMANENT_ADDRESS 0x0901010B
#define OID_WW_GEN_CURRENT_ADDRESS 0x0901010C
#define OID_ARCNET_PERMANENT_ADDRESS 0x06010101
/*
* 802.3 OIDs
*/
#define OID_802_3_PERMANENT_ADDRESS 0x01010101
#define OID_802_3_CURRENT_ADDRESS 0x01010102
#define OID_802_3_MULTICAST_LIST 0x01010103
#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
#define OID_802_3_MAC_OPTIONS 0x01010105
#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
#define OID_802_3_XMIT_DEFERRED 0x01020201
#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
#define OID_802_3_RCV_OVERRUN 0x01020203
#define OID_802_3_XMIT_UNDERRUN 0x01020204
#define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
#define OID_802_3_ADD_MULTICAST_ADDRESS 0x01010208
#define OID_802_3_DELETE_MULTICAST_ADDRESS 0x01010209
/*
* 802.11 OIDs
*/
#define OID_802_11_BSSID 0x0d010101
#define OID_802_11_SSID 0x0d010102
#define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0d010203
#define OID_802_11_NETWORK_TYPE_IN_USE 0x0d010204
#define OID_802_11_TX_POWER_LEVEL 0x0d010205
#define OID_802_11_RSSI 0x0d010206
#define OID_802_11_RSSI_TRIGGER 0x0d010207
#define OID_802_11_INFRASTRUCTURE_MODE 0x0d010108
#define OID_802_11_FRAGMENTATION_THRESHOLD 0x0d010209
#define OID_802_11_RTS_THRESHOLD 0x0d01020a
#define OID_802_11_NUMBER_OF_ANTENNAS 0x0d01020b
#define OID_802_11_RX_ANTENNA_SELECTED 0x0d01020c
#define OID_802_11_TX_ANTENNA_SELECTED 0x0d01020d
#define OID_802_11_SUPPORTED_RATES 0x0d01020e
#define OID_802_11_DESIRED_RATES 0x0d010210
#define OID_802_11_CONFIGURATION 0x0d010211
#define OID_802_11_STATISTICS 0x0d020212
#define OID_802_11_ADD_WEP 0x0d010113
#define OID_802_11_REMOVE_WEP 0x0d010114
#define OID_802_11_DISASSOCIATE 0x0d010115
#define OID_802_11_POWER_MODE 0x0d010216
#define OID_802_11_BSSID_LIST 0x0d010217
#define OID_802_11_AUTHENTICATION_MODE 0x0d010118
#define OID_802_11_PRIVACY_FILTER 0x0d010119
#define OID_802_11_BSSID_LIST_SCAN 0x0d01011a
#define OID_802_11_WEP_STATUS 0x0d01011b
#define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
#define OID_802_11_RELOAD_DEFAULTS 0x0d01011c
#define OID_802_11_ADD_KEY 0x0d01011d
#define OID_802_11_REMOVE_KEY 0x0d01011e
#define OID_802_11_ASSOCIATION_INFORMATION 0x0d01011f
#define OID_802_11_TEST 0x0d010120
#define OID_802_11_CAPABILITY 0x0d010122
#define OID_802_11_PMKID 0x0d010123
/*
* PnP and power management OIDs
*/
#define OID_PNP_CAPABILITIES 0xfd010100
#define OID_PNP_SET_POWER 0xfd010101
#define OID_PNP_QUERY_POWER 0xfd010102
#define OID_PNP_ADD_WAKE_UP_PATTERN 0xfd010103
#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xfd010104
#define OID_PNP_WAKE_UP_PATTERN_LIST 0xfd010105
#define OID_PNP_ENABLE_WAKE_UP 0xfd010106
/*
* Connection oriented OIDs
*/
#define OID_CO_ADD_PVC 0xfe000001
#define OID_CO_DELETE_PVC 0xfe000002
#define OID_CO_GET_CALL_INFORMATION 0xfe000003
#define OID_CO_ADD_ADDRESS 0xfe000004
#define OID_CO_DELETE_ADDRESS 0xfe000005
#define OID_CO_GET_ADDRESSES 0xfe000006
#define OID_CO_ADDRESS_CHANGE 0xfe000007
#define OID_CO_SIGNALING_ENABLED 0xfe000008
#define OID_CO_SIGNALING_DISABLED 0xfe000009
#define OID_CO_AF_CLOSE 0xfe00000a
#define OID_CO_TAPI_CM_CAPS 0xfe001001
#define OID_CO_TAPI_LINE_CAPS 0xfe001002
#define OID_CO_TAPI_ADDRESS_CAPS 0xfe001003
#define OID_CO_TAPI_TRANSLATE_TAPI_CALLPARAMS 0xfe001004
#define OID_CO_TAPI_TRANSLATE_NDIS_CALLPARAMS 0xfe001005
#define OID_CO_TAPI_TRANSLATE_TAPI_SAP 0xfe001006
#define OID_CO_TAPI_GET_CALL_DIAGNOSTICS 0xfe001007
#define OID_CO_TAPI_REPORT_DIGITS 0xfe001008
#define OID_CO_TAPI_DONT_REPORT_DIGITS 0xfe001009
/*
* 802.5 Objects (Token-Ring)
*/
#define OID_802_5_PERMANENT_ADDRESS 0x02010101
#define OID_802_5_CURRENT_ADDRESS 0x02010102
#define OID_802_5_CURRENT_FUNCTIONAL 0x02010103
#define OID_802_5_CURRENT_GROUP 0x02010104
#define OID_802_5_LAST_OPEN_STATUS 0x02010105
#define OID_802_5_CURRENT_RING_STATUS 0x02010106
#define OID_802_5_CURRENT_RING_STATE 0x02010107
#define OID_802_5_LINE_ERRORS 0x02020101
#define OID_802_5_LOST_FRAMES 0x02020102
#define OID_802_5_BURST_ERRORS 0x02020201
#define OID_802_5_AC_ERRORS 0x02020202
#define OID_802_5_ABORT_DELIMETERS 0x02020203
#define OID_802_5_FRAME_COPIED_ERRORS 0x02020204
#define OID_802_5_FREQUENCY_ERRORS 0x02020205
#define OID_802_5_TOKEN_ERRORS 0x02020206
#define OID_802_5_INTERNAL_ERRORS 0x02020207
/*
* FDDI Objects
*/
#define OID_FDDI_LONG_PERMANENT_ADDR 0x03010101
#define OID_FDDI_LONG_CURRENT_ADDR 0x03010102
#define OID_FDDI_LONG_MULTICAST_LIST 0x03010103
#define OID_FDDI_LONG_MAX_LIST_SIZE 0x03010104
#define OID_FDDI_SHORT_PERMANENT_ADDR 0x03010105
#define OID_FDDI_SHORT_CURRENT_ADDR 0x03010106
#define OID_FDDI_SHORT_MULTICAST_LIST 0x03010107
#define OID_FDDI_SHORT_MAX_LIST_SIZE 0x03010108
#define OID_FDDI_ATTACHMENT_TYPE 0x03020101
#define OID_FDDI_UPSTREAM_NODE_LONG 0x03020102
#define OID_FDDI_DOWNSTREAM_NODE_LONG 0x03020103
#define OID_FDDI_FRAME_ERRORS 0x03020104
#define OID_FDDI_FRAMES_LOST 0x03020105
#define OID_FDDI_RING_MGT_STATE 0x03020106
#define OID_FDDI_LCT_FAILURES 0x03020107
#define OID_FDDI_LEM_REJECTS 0x03020108
#define OID_FDDI_LCONNECTION_STATE 0x03020109
#define OID_FDDI_SMT_STATION_ID 0x03030201
#define OID_FDDI_SMT_OP_VERSION_ID 0x03030202
#define OID_FDDI_SMT_HI_VERSION_ID 0x03030203
#define OID_FDDI_SMT_LO_VERSION_ID 0x03030204
#define OID_FDDI_SMT_MANUFACTURER_DATA 0x03030205
#define OID_FDDI_SMT_USER_DATA 0x03030206
#define OID_FDDI_SMT_MIB_VERSION_ID 0x03030207
#define OID_FDDI_SMT_MAC_CT 0x03030208
#define OID_FDDI_SMT_NON_MASTER_CT 0x03030209
#define OID_FDDI_SMT_MASTER_CT 0x0303020a
#define OID_FDDI_SMT_AVAILABLE_PATHS 0x0303020b
#define OID_FDDI_SMT_CONFIG_CAPABILITIES 0x0303020c
#define OID_FDDI_SMT_CONFIG_POLICY 0x0303020d
#define OID_FDDI_SMT_CONNECTION_POLICY 0x0303020e
#define OID_FDDI_SMT_T_NOTIFY 0x0303020f
#define OID_FDDI_SMT_STAT_RPT_POLICY 0x03030210
#define OID_FDDI_SMT_TRACE_MAX_EXPIRATION 0x03030211
#define OID_FDDI_SMT_PORT_INDEXES 0x03030212
#define OID_FDDI_SMT_MAC_INDEXES 0x03030213
#define OID_FDDI_SMT_BYPASS_PRESENT 0x03030214
#define OID_FDDI_SMT_ECM_STATE 0x03030215
#define OID_FDDI_SMT_CF_STATE 0x03030216
#define OID_FDDI_SMT_HOLD_STATE 0x03030217
#define OID_FDDI_SMT_REMOTE_DISCONNECT_FLAG 0x03030218
#define OID_FDDI_SMT_STATION_STATUS 0x03030219
#define OID_FDDI_SMT_PEER_WRAP_FLAG 0x0303021a
/*
* LocalTalk objects
*/
#define OID_LTALK_CURRENT_NODE_ID 0x05010102
#define OID_LTALK_IN_BROADCASTS 0x05020101
#define OID_LTALK_IN_LENGTH_ERRORS 0x05020102
#define OID_LTALK_OUT_NO_HANDLERS 0x05020201
#define OID_LTALK_COLLISIONS 0x05020202
#define OID_LTALK_DEFERS 0x05020203
#define OID_LTALK_NO_DATA_ERRORS 0x05020204
#define OID_LTALK_RANDOM_CTS_ERRORS 0x05020205
#define OID_LTALK_FCS_ERRORS 0x05020206
/*
* Arcnet objects
*/
#define OID_ARCNET_PERMANENT_ADDRESS 0x06010101
#define OID_ARCNET_CURRENT_ADDRESS 0x06010102
#define OID_ARCNET_RECONFIGURATIONS 0x06020201
/*
* TAPI objects
*/
#define OID_TAPI_ACCEPT 0x07030101
#define OID_TAPI_ANSWER 0x07030102
#define OID_TAPI_CLOSE 0x07030103
#define OID_TAPI_CLOSE_CALL 0x07030104
#define OID_TAPI_CONDITIONAL_MEDIA_DETECTION 0x07030105
#define OID_TAPI_CONFIG_DIALOG 0x07030106
#define OID_TAPI_DEV_SPECIFIC 0x07030107
#define OID_TAPI_DIAL 0x07030108
#define OID_TAPI_DROP 0x07030109
#define OID_TAPI_GET_ADDRESS_CAPS 0x0703010a
#define OID_TAPI_GET_ADDRESS_ID 0x0703010b
#define OID_TAPI_GET_ADDRESS_STATUS 0x0703010c
#define OID_TAPI_GET_CALL_ADDRESS_ID 0x0703010d
#define OID_TAPI_GET_CALL_INFO 0x0703010e
#define OID_TAPI_GET_CALL_STATUS 0x0703010f
#define OID_TAPI_GET_DEV_CAPS 0x07030110
#define OID_TAPI_GET_DEV_CONFIG 0x07030111
#define OID_TAPI_GET_EXTENSION_ID 0x07030112
#define OID_TAPI_GET_ID 0x07030113
#define OID_TAPI_GET_LINE_DEV_STATUS 0x07030114
#define OID_TAPI_MAKE_CALL 0x07030115
#define OID_TAPI_NEGOTIATE_EXT_VERSION 0x07030116
#define OID_TAPI_OPEN 0x07030117
#define OID_TAPI_PROVIDER_INITIALIZE 0x07030118
#define OID_TAPI_PROVIDER_SHUTDOWN 0x07030119
#define OID_TAPI_SECURE_CALL 0x0703011a
#define OID_TAPI_SELECT_EXT_VERSION 0x0703011b
#define OID_TAPI_SEND_USER_USER_INFO 0x0703011c
#define OID_TAPI_SET_APP_SPECIFIC 0x0703011d
#define OID_TAPI_SET_CALL_PARAMS 0x0703011e
#define OID_TAPI_SET_DEFAULT_MEDIA_DETECTION 0x0703011f
#define OID_TAPI_SET_DEV_CONFIG 0x07030120
#define OID_TAPI_SET_MEDIA_MODE 0x07030121
#define OID_TAPI_SET_STATUS_MESSAGES 0x07030122
#define OID_TAPI_GATHER_DIGITS 0x07030123
#define OID_TAPI_MONITOR_DIGITS 0x07030124
/*
* TCP/IP OIDs
*/
#define OID_TCP_TASK_OFFLOAD 0xfc010201
#define OID_TCP_TASK_IPSEC_ADD_SA 0xfc010202
#define OID_TCP_TASK_IPSEC_DELETE_SA 0xfc010203
#define OID_TCP_SAN_SUPPORT 0xfc010204
#define OID_TCP_TASK_IPSEC_ADD_UDPESP_SA 0xfc010205
#define OID_TCP_TASK_IPSEC_DELETE_UDPESP_SA 0xfc010206
#define OID_TCP4_OFFLOAD_STATS 0xfc010207
#define OID_TCP6_OFFLOAD_STATS 0xfc010208
#define OID_IP4_OFFLOAD_STATS 0xfc010209
#define OID_IP6_OFFLOAD_STATS 0xfc01020a
/*
* New offload OIDs for NDIS 6
*/
#define OID_TCP_OFFLOAD_CURRENT_CONFIG 0xfc01020b
#define OID_TCP_OFFLOAD_PARAMETERS 0xfc01020c
#define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xfc01020d
#define OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG 0xfc01020e
#define OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0xfc01020f
#define OID_OFFLOAD_ENCAPSULATION 0x0101010a
/*
* Exported by NDIS itself and are only queryable.
*/
#define OID_GEN_INIT_TIME_MS 0x00020213
#define OID_GEN_RESET_COUNTS 0x00020214
#define OID_GEN_MEDIA_SENSE_COUNTS 0x00020215
#define OID_GEN_FRIENDLY_NAME 0x00020216
#define OID_GEN_NDIS_RESERVED_1 0x00020217
#define OID_GEN_NDIS_RESERVED_2 0x00020218
/*
* New power management OIDs for NDIS 6.20 drivers
*/
#define OID_PM_CURRENT_CAPABILITIES 0xfd010107
#define OID_PM_HARDWARE_CAPABILITIES 0xfd010108
#define OID_PM_PARAMETERS 0xfd010109
#define OID_PM_ADD_WOL_PATTERN 0xfd01010a
#define OID_PM_REMOVE_WOL_PATTERN 0xfd01010b
#define OID_PM_WOL_PATTERN_LIST 0xfd01010c
#define OID_PM_ADD_PROTOCOL_OFFLOAD 0xfd01010d
#define OID_PM_GET_PROTOCOL_OFFLOAD 0xfd01010e
#define OID_PM_REMOVE_PROTOCOL_OFFLOAD 0xfd01010f
#define OID_PM_PROTOCOL_OFFLOAD_LIST 0xfd010110
#define OID_PM_RESERVED_1 0xfd010111
/*
* New NDIS 6.20 OIDs for generic packet filtering
*/
#define OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES 0x00010221
#define OID_RECEIVE_FILTER_GLOBAL_PARAMETERS 0x00010222
#define OID_RECEIVE_FILTER_ALLOCATE_QUEUE 0x00010223
#define OID_RECEIVE_FILTER_FREE_QUEUE 0x00010224
#define OID_RECEIVE_FILTER_ENUM_QUEUES 0x00010225
#define OID_RECEIVE_FILTER_QUEUE_PARAMETERS 0x00010226
#define OID_RECEIVE_FILTER_SET_FILTER 0x00010227
#define OID_RECEIVE_FILTER_CLEAR_FILTER 0x00010228
#define OID_RECEIVE_FILTER_ENUM_FILTERS 0x00010229
#define OID_RECEIVE_FILTER_PARAMETERS 0x0001022a
#define OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 0x0001022b
#define OID_RECEIVE_FILTER_CURRENT_CAPABILITIES 0x0001022d
#define OID_NIC_SWITCH_HARDWARE_CAPABILITIES 0x0001022e
#define OID_NIC_SWITCH_CURRENT_CAPABILITIES 0x0001022f
#define OID_RECEIVE_FILTER_MOVE_FILTER 0x00010230
#define OID_VLAN_RESERVED1 0x00010231
#define OID_VLAN_RESERVED2 0x00010232
#define OID_VLAN_RESERVED3 0x00010233
#define OID_VLAN_RESERVED4 0x00010234
#define OID_PACKET_COALESCING_FILTER_MATCH_COUNT 0x00010235
/*
* OIDs used for SRIOV and NIC switch
*/
#define OID_NIC_SWITCH_CREATE_SWITCH 0x00010237
#define OID_NIC_SWITCH_PARAMETERS 0x00010238
#define OID_NIC_SWITCH_DELETE_SWITCH 0x00010239
#define OID_NIC_SWITCH_ENUM_SWITCHES 0x00010240
#define OID_NIC_SWITCH_CREATE_VPORT 0x00010241
#define OID_NIC_SWITCH_VPORT_PARAMETERS 0x00010242
#define OID_NIC_SWITCH_ENUM_VPORTS 0x00010243
#define OID_NIC_SWITCH_DELETE_VPORT 0x00010244
#define OID_NIC_SWITCH_ALLOCATE_VF 0x00010245
#define OID_NIC_SWITCH_FREE_VF 0x00010246
#define OID_NIC_SWITCH_VF_PARAMETERS 0x00010247
#define OID_NIC_SWITCH_ENUM_VFS 0x00010248
#define OID_SRIOV_HARDWARE_CAPABILITIES 0x00010249
#define OID_SRIOV_CURRENT_CAPABILITIES 0x00010250
#define OID_SRIOV_READ_VF_CONFIG_SPACE 0x00010251
#define OID_SRIOV_WRITE_VF_CONFIG_SPACE 0x00010252
#define OID_SRIOV_READ_VF_CONFIG_BLOCK 0x00010253
#define OID_SRIOV_WRITE_VF_CONFIG_BLOCK 0x00010254
#define OID_SRIOV_RESET_VF 0x00010255
#define OID_SRIOV_SET_VF_POWER_STATE 0x00010256
#define OID_SRIOV_VF_VENDOR_DEVICE_ID 0x00010257
#define OID_SRIOV_PROBED_BARS 0x00010258
#define OID_SRIOV_BAR_RESOURCES 0x00010259
#define OID_SRIOV_PF_LUID 0x00010260
/*
* These OIDs are applicable to the VF only
*/
#define OID_SRIOV_CONFIG_STATE 0x00010261
#define OID_SRIOV_VF_SERIAL_NUMBER 0x00010262
#define OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 0x00010269
/*
* OID's used for Hyper-V extensible switch
*/
#define OID_SWITCH_PROPERTY_ADD 0x00010263
#define OID_SWITCH_PROPERTY_UPDATE 0x00010264
#define OID_SWITCH_PROPERTY_DELETE 0x00010265
#define OID_SWITCH_PROPERTY_ENUM 0x00010266
#define OID_SWITCH_FEATURE_STATUS_QUERY 0x00010267
#define OID_SWITCH_NIC_REQUEST 0x00010270
#define OID_SWITCH_PORT_PROPERTY_ADD 0x00010271
#define OID_SWITCH_PORT_PROPERTY_UPDATE 0x00010272
#define OID_SWITCH_PORT_PROPERTY_DELETE 0x00010273
#define OID_SWITCH_PORT_PROPERTY_ENUM 0x00010274
#define OID_SWITCH_PARAMETERS 0x00010275
#define OID_SWITCH_PORT_ARRAY 0x00010276
#define OID_SWITCH_NIC_ARRAY 0x00010277
#define OID_SWITCH_PORT_CREATE 0x00010278
#define OID_SWITCH_PORT_DELETE 0x00010279
#define OID_SWITCH_NIC_CREATE 0x0001027a
#define OID_SWITCH_NIC_CONNECT 0x0001027b
#define OID_SWITCH_NIC_DISCONNECT 0x0001027c
#define OID_SWITCH_NIC_DELETE 0x0001027d
#define OID_SWITCH_PORT_FEATURE_STATUS_QUERY 0x0001027e
#define OID_SWITCH_PORT_TEARDOWN 0x0001027f
#define OID_SWITCH_NIC_SAVE 0x00010290
#define OID_SWITCH_NIC_SAVE_COMPLETE 0x00010291
#define OID_SWITCH_NIC_RESTORE 0x00010292
#define OID_SWITCH_NIC_RESTORE_COMPLETE 0x00010293
#define OID_SWITCH_NIC_UPDATED 0x00010294
#define OID_SWITCH_PORT_UPDATED 0x00010295
#define OID_GEN_ISOLATION_PARAMETERS 0x00010300
#define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
#define OID_GEN_SUPPORTED_GUIDS 0x00010117
#define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118
#define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119
#define OID_GEN_MEDIA_CAPABILITIES 0x00010201
#define OID_GEN_PHYSICAL_MEDIUM 0x00010202
/*
* New optional for NDIS 6.0
*/
#define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203
#define OID_GEN_RECEIVE_SCALE_PARAMETERS 0x00010204
/*
* New for NDIS 6.0. NDIS will handle on behalf of the miniports
*/
#define OID_GEN_MAC_ADDRESS 0x00010205
#define OID_GEN_MAX_LINK_SPEED 0x00010206
#define OID_GEN_LINK_STATE 0x00010207
/*
* New and required for NDIS 6 miniports
*/
#define OID_GEN_LINK_PARAMETERS 0x00010208
#define OID_GEN_INTERRUPT_MODERATION 0x00010209
#define OID_GEN_NDIS_RESERVED_3 0x0001020a
#define OID_GEN_NDIS_RESERVED_4 0x0001020b
#define OID_GEN_NDIS_RESERVED_5 0x0001020c
/*
* Port related OIDs
*/
#define OID_GEN_ENUMERATE_PORTS 0x0001020d
#define OID_GEN_PORT_STATE 0x0001020e
#define OID_GEN_PORT_AUTHENTICATION_PARAMETERS 0x0001020f
/*
* Optional OID for NDIS 6 miniports
*/
#define OID_GEN_TIMEOUT_DPC_REQUEST_CAPABILITIES 0x00010210
/*
* These OID is handled by NDIS for PCI devices
*/
#define OID_GEN_PCI_DEVICE_CUSTOM_PROPERTIES 0x00010211
#define OID_GEN_NDIS_RESERVED_6 0x00010212
#define OID_GEN_PHYSICAL_MEDIUM_EX 0x00010213
#define OID_GEN_MACHINE_NAME 0x0001021a
#define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021b
#define OID_GEN_VLAN_ID 0x0001021c
#define OID_GEN_RECEIVE_HASH 0x0001021f
#define OID_GEN_MINIPORT_RESTART_ATTRIBUTES 0x0001021d
/*
* Optional OID for header data/split
*/
#define OID_GEN_HD_SPLIT_PARAMETERS 0x0001021e
#define OID_GEN_HD_SPLIT_CURRENT_CONFIG 0x00010220
/*
* The following OIDs are used in querying interfaces
*/
#define OID_GEN_PROMISCUOUS_MODE 0x00010280
#define OID_GEN_LAST_CHANGE 0x00010281
#define OID_GEN_DISCONTINUITY_TIME 0x00010282
#define OID_GEN_OPERATIONAL_STATUS 0x00010283
#define OID_GEN_XMIT_LINK_SPEED 0x00010284
#define OID_GEN_RCV_LINK_SPEED 0x00010285
#define OID_GEN_UNKNOWN_PROTOS 0x00010286
#define OID_GEN_INTERFACE_INFO 0x00010287
#define OID_GEN_ADMIN_STATUS 0x00010288
#define OID_GEN_ALIAS 0x00010289
#define OID_GEN_MEDIA_CONNECT_STATUS_EX 0x0001028a
#define OID_GEN_LINK_SPEED_EX 0x0001028b
#define OID_GEN_MEDIA_DUPLEX_STATE 0x0001028c
#define OID_GEN_IP_OPER_STATUS 0x0001028d
#define OID_GEN_STATISTICS 0x00020106
#define OID_GEN_BYTES_RCV 0x00020219
#define OID_GEN_BYTES_XMIT 0x0002021a
#define OID_GEN_RCV_DISCARDS 0x0002021b
#define OID_GEN_XMIT_DISCARDS 0x0002021c
#define OID_TCP_RSC_STATISTICS 0x0002021d
#define OID_GEN_NDIS_RESERVED_7 0x0002021e
/*
* WWAN specific oids
*/
#define OID_WWAN_DRIVER_CAPS 0x0e010100
#define OID_WWAN_DEVICE_CAPS 0x0e010101
#define OID_WWAN_READY_INFO 0x0e010102
#define OID_WWAN_RADIO_STATE 0x0e010103
#define OID_WWAN_PIN 0x0e010104
#define OID_WWAN_PIN_LIST 0x0e010105
#define OID_WWAN_HOME_PROVIDER 0x0e010106
#define OID_WWAN_PREFERRED_PROVIDERS 0x0e010107
#define OID_WWAN_VISIBLE_PROVIDERS 0x0e010108
#define OID_WWAN_REGISTER_STATE 0x0e010109
#define OID_WWAN_PACKET_SERVICE 0x0e01010a
#define OID_WWAN_SIGNAL_STATE 0x0e01010b
#define OID_WWAN_CONNECT 0x0e01010c
#define OID_WWAN_PROVISIONED_CONTEXTS 0x0e01010d
#define OID_WWAN_SERVICE_ACTIVATION 0x0e01010e
#define OID_WWAN_SMS_CONFIGURATION 0x0e01010f
#define OID_WWAN_SMS_READ 0x0e010110
#define OID_WWAN_SMS_SEND 0x0e010111
#define OID_WWAN_SMS_DELETE 0x0e010112
#define OID_WWAN_SMS_STATUS 0x0e010113
#define OID_WWAN_VENDOR_SPECIFIC 0x0e010114
#define OID_WWAN_AUTH_CHALLENGE 0x0e010115
#define OID_WWAN_ENUMERATE_DEVICE_SERVICES 0x0e010116
#define OID_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS 0x0e010117
#define OID_WWAN_DEVICE_SERVICE_COMMAND 0x0e010118
#define OID_WWAN_USSD 0x0e010119
#define OID_WWAN_PIN_EX 0x0e010121
#define OID_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS 0x0e010122
#define OID_WWAN_DEVICE_SERVICE_SESSION 0x0e010123
#define OID_WWAN_DEVICE_SERVICE_SESSION_WRITE 0x0e010124
#define OID_WWAN_PREFERRED_MULTICARRIER_PROVIDERS 0x0e010125
#define OID_WWAN_CREATE_MAC 0x0e010126
#define OID_WWAN_DELETE_MAC 0x0e010127
/*
* IPsec Task offload V2 OIDs
*/
#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA 0xfc030202
#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA 0xfc030203
#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA 0xfc030204
#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA_EX 0xfc030205
/*
* Defines for FFP, obsolete
*/
#define OID_FFP_SUPPORT 0xfc010210
#define OID_FFP_FLUSH 0xfc010211
#define OID_FFP_CONTROL 0xfc010212
#define OID_FFP_PARAMS 0xfc010213
#define OID_FFP_DATA 0xfc010214
#define OID_FFP_DRIVER_STATS 0xfc020210
#define OID_FFP_ADAPTER_STATS 0xfc020211
/*
* TCP Connection offload OID
*/
#define OID_TCP_CONNECTION_OFFLOAD_PARAMETERS 0xfc030201
/*
* New Tunnel driver direct OIDs for NDIS 6.20
*/
#define OID_TUNNEL_INTERFACE_SET_OID 0x0f010106
#define OID_TUNNEL_INTERFACE_RELEASE_OID 0x0f010107
/*
* Defines for QOS
*/
#define OID_QOS_RESERVED1 0xfb010100
#define OID_QOS_RESERVED2 0xfb010101
#define OID_QOS_RESERVED3 0xfb010102
#define OID_QOS_RESERVED4 0xfb010103
#define OID_QOS_RESERVED5 0xfb010104
#define OID_QOS_RESERVED6 0xfb010105
#define OID_QOS_RESERVED7 0xfb010106
#define OID_QOS_RESERVED8 0xfb010107
#define OID_QOS_RESERVED9 0xfb010108
#define OID_QOS_RESERVED10 0xfb010109
#define OID_QOS_RESERVED11 0xfb01010a
#define OID_QOS_RESERVED12 0xfb01010b
#define OID_QOS_RESERVED13 0xfb01010c
#define OID_QOS_RESERVED14 0xfb01010d
#define OID_QOS_RESERVED15 0xfb01010e
#define OID_QOS_RESERVED16 0xfb01010f
#define OID_QOS_RESERVED17 0xfb010110
#define OID_QOS_RESERVED18 0xfb010111
#define OID_QOS_RESERVED19 0xfb010112
#define OID_QOS_RESERVED20 0xfb010113
#define OID_QOS_HARDWARE_CAPABILITIES 0xfc050001
#define OID_QOS_CURRENT_CAPABILITIES 0xfc050002
#define OID_QOS_PARAMETERS 0xfc050003
#define OID_QOS_OPERATIONAL_PARAMETERS 0xfc050004
#define OID_QOS_REMOTE_PARAMETERS 0xfc050005
/*
* 802.11 vendor specific Atheros 5XXX chipset OIDs.
* Ref: https://social.msdn.microsoft.com/Forums/en-US/3af4044a-d242-40dc-9e00-cded1f3130df/get-noise-floor-using-native-wifi-api?forum=mediafoundationdevelopment
*/
#define OID_ATH_XMIT_FILTERED 0xff000000
#define OID_ATH_XMIT_RETRIES 0xff000001
#define OID_ATH_XMIT_EXCESSIVE_RETRIES 0xff000002
#define OID_ATH_XMIT_ACK_RSSI 0xff000003
#define OID_ATH_XMIT_HW_ACKS_MISSING 0xff000004
#define OID_ATH_XMIT_RTS_ERRORS 0xff000005
#define OID_ATH_XMIT_REQUESTS 0xff000006
#define OID_ATH_XMIT_REQUESTS_DENIED 0xff000007
#define OID_ATH_XMIT_FIFO_UNDERRUNS 0xff000008
#define OID_ATH_XMIT_DATA_RATE 0xff000009
#define OID_ATH_RCV_RSSI 0xff00000a
#define OID_ATH_RCV_SW_FCS_ERRORS 0xff00000b
#define OID_ATH_RCV_HW_FCS_ERRORS 0xff00000c
#define OID_ATH_RCV_DECRYPT_ERRORS 0xff00000d
#define OID_ATH_RCV_DUPLICATES 0xff00000e
#define OID_ATH_RCV_MULTIPLE_DUPLICATES 0xff00000f
#define OID_ATH_RCV_FIFO_OVERRUNS 0xff000010
#define OID_ATH_RCV_DATA_RATE 0xff000011
#define OID_ATH_RCV_MULTICAST_FRAMES 0xff000012
#define OID_ATH_CURRENT_CHANNEL 0xff000013
#define OID_ATH_TURBO_MODE 0xff000014
#define OID_ATH_NOISE_FLOOR 0xff000020
/*
* Dot 11 specific OIDs from <windot11.h>
*/
#define NWF_DEFINE_OID(Seq,o,m) ((0x0E000000U) | ((o) << 16) | ((m) << 8) | (Seq))
#define NWF_OPERATIONAL_OID 1
#define NWF_MANDATORY_OID 1
#define NWF_OPTIONAL_OID 2
#define NWF_STATISTICS_OID 2
#define NWF_EXTAP_OID 3
#define NWF_VWIFI_OID 4
#define NWF_WFD_DEVICE_OID 5
#define NWF_WFD_ROLE_OID 6
#define NWF_POWER_SAVE_OID 7
#define NWF_MANUFACTURING_OID 8
#define OID_DOT11_NDIS_START 0x0D010300
#define OID_DOT11_OFFLOAD_CAPABILITY (OID_DOT11_NDIS_START + 0)
#define OID_DOT11_CURRENT_OFFLOAD_CAPABILITY (OID_DOT11_NDIS_START + 1)
#define OID_DOT11_WEP_OFFLOAD (OID_DOT11_NDIS_START + 2)
#define OID_DOT11_WEP_UPLOAD (OID_DOT11_NDIS_START + 3)
#define OID_DOT11_DEFAULT_WEP_OFFLOAD (OID_DOT11_NDIS_START + 4)
#define OID_DOT11_DEFAULT_WEP_UPLOAD (OID_DOT11_NDIS_START + 5)
#define OID_DOT11_MPDU_MAX_LENGTH (OID_DOT11_NDIS_START + 6)
#define OID_DOT11_OPERATION_MODE_CAPABILITY (OID_DOT11_NDIS_START + 7)
#define OID_DOT11_CURRENT_OPERATION_MODE (OID_DOT11_NDIS_START + 8)
#define OID_DOT11_CURRENT_PACKET_FILTER (OID_DOT11_NDIS_START + 9)
#define OID_DOT11_ATIM_WINDOW (OID_DOT11_NDIS_START + 10)
#define OID_DOT11_SCAN_REQUEST (OID_DOT11_NDIS_START + 11)
#define OID_DOT11_CURRENT_PHY_TYPE (OID_DOT11_NDIS_START + 12)
#define OID_DOT11_JOIN_REQUEST (OID_DOT11_NDIS_START + 13)
#define OID_DOT11_START_REQUEST (OID_DOT11_NDIS_START + 14)
#define OID_DOT11_UPDATE_IE (OID_DOT11_NDIS_START + 15)
#define OID_DOT11_RESET_REQUEST (OID_DOT11_NDIS_START + 16)
#define OID_DOT11_NIC_POWER_STATE (OID_DOT11_NDIS_START + 17)
#define OID_DOT11_OPTIONAL_CAPABILITY (OID_DOT11_NDIS_START + 18)
#define OID_DOT11_CURRENT_OPTIONAL_CAPABILITY (OID_DOT11_NDIS_START + 19)
#define OID_DOT11_STATION_ID (OID_DOT11_NDIS_START + 20)
#define OID_DOT11_MEDIUM_OCCUPANCY_LIMIT (OID_DOT11_NDIS_START + 21)
#define OID_DOT11_CF_POLLABLE (OID_DOT11_NDIS_START + 22)
#define OID_DOT11_CFP_PERIOD (OID_DOT11_NDIS_START + 23)
#define OID_DOT11_CFP_MAX_DURATION (OID_DOT11_NDIS_START + 24)
#define OID_DOT11_POWER_MGMT_MODE (OID_DOT11_NDIS_START + 25)
#define OID_DOT11_OPERATIONAL_RATE_SET (OID_DOT11_NDIS_START + 26)
#define OID_DOT11_BEACON_PERIOD (OID_DOT11_NDIS_START + 27)
#define OID_DOT11_DTIM_PERIOD (OID_DOT11_NDIS_START + 28)
#define OID_DOT11_WEP_ICV_ERROR_COUNT (OID_DOT11_NDIS_START + 29)
#define OID_DOT11_MAC_ADDRESS (OID_DOT11_NDIS_START + 30)
#define OID_DOT11_RTS_THRESHOLD (OID_DOT11_NDIS_START + 31)
#define OID_DOT11_SHORT_RETRY_LIMIT (OID_DOT11_NDIS_START + 32)
#define OID_DOT11_LONG_RETRY_LIMIT (OID_DOT11_NDIS_START + 33)
#define OID_DOT11_FRAGMENTATION_THRESHOLD (OID_DOT11_NDIS_START + 34)
#define OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME (OID_DOT11_NDIS_START + 35)
#define OID_DOT11_MAX_RECEIVE_LIFETIME (OID_DOT11_NDIS_START + 36)
#define OID_DOT11_COUNTERS_ENTRY (OID_DOT11_NDIS_START + 37)
#define OID_DOT11_SUPPORTED_PHY_TYPES (OID_DOT11_NDIS_START + 38)
#define OID_DOT11_CURRENT_REG_DOMAIN (OID_DOT11_NDIS_START + 39)
#define OID_DOT11_TEMP_TYPE (OID_DOT11_NDIS_START + 40)
#define OID_DOT11_CURRENT_TX_ANTENNA (OID_DOT11_NDIS_START + 41)
#define OID_DOT11_DIVERSITY_SUPPORT (OID_DOT11_NDIS_START + 42)
#define OID_DOT11_CURRENT_RX_ANTENNA (OID_DOT11_NDIS_START + 43)
#define OID_DOT11_SUPPORTED_POWER_LEVELS (OID_DOT11_NDIS_START + 44)
#define OID_DOT11_CURRENT_TX_POWER_LEVEL (OID_DOT11_NDIS_START + 45)
#define OID_DOT11_HOP_TIME (OID_DOT11_NDIS_START + 46)
#define OID_DOT11_CURRENT_CHANNEL_NUMBER (OID_DOT11_NDIS_START + 47)
#define OID_DOT11_MAX_DWELL_TIME (OID_DOT11_NDIS_START + 48)
#define OID_DOT11_CURRENT_DWELL_TIME (OID_DOT11_NDIS_START + 49)
#define OID_DOT11_CURRENT_SET (OID_DOT11_NDIS_START + 50)
#define OID_DOT11_CURRENT_PATTERN (OID_DOT11_NDIS_START + 51)
#define OID_DOT11_CURRENT_INDEX (OID_DOT11_NDIS_START + 52)
#define OID_DOT11_CURRENT_CHANNEL (OID_DOT11_NDIS_START + 53)
#define OID_DOT11_CCA_MODE_SUPPORTED (OID_DOT11_NDIS_START + 54)
#define OID_DOT11_CURRENT_CCA_MODE (OID_DOT11_NDIS_START + 55)
#define OID_DOT11_ED_THRESHOLD (OID_DOT11_NDIS_START + 56)
#define OID_DOT11_CCA_WATCHDOG_TIMER_MAX (OID_DOT11_NDIS_START + 57)
#define OID_DOT11_CCA_WATCHDOG_COUNT_MAX (OID_DOT11_NDIS_START + 58)
#define OID_DOT11_CCA_WATCHDOG_TIMER_MIN (OID_DOT11_NDIS_START + 59)
#define OID_DOT11_CCA_WATCHDOG_COUNT_MIN (OID_DOT11_NDIS_START + 60)
#define OID_DOT11_REG_DOMAINS_SUPPORT_VALUE (OID_DOT11_NDIS_START + 61)
#define OID_DOT11_SUPPORTED_TX_ANTENNA (OID_DOT11_NDIS_START + 62)
#define OID_DOT11_SUPPORTED_RX_ANTENNA (OID_DOT11_NDIS_START + 63)
#define OID_DOT11_DIVERSITY_SELECTION_RX (OID_DOT11_NDIS_START + 64)
#define OID_DOT11_SUPPORTED_DATA_RATES_VALUE (OID_DOT11_NDIS_START + 65)
#define OID_DOT11_CURRENT_FREQUENCY (OID_DOT11_NDIS_START + 66)
#define OID_DOT11_TI_THRESHOLD (OID_DOT11_NDIS_START + 67)
#define OID_DOT11_FREQUENCY_BANDS_SUPPORTED (OID_DOT11_NDIS_START + 68)
#define OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 69)
#define OID_DOT11_PBCC_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 70)
#define OID_DOT11_CHANNEL_AGILITY_PRESENT (OID_DOT11_NDIS_START + 71)
#define OID_DOT11_CHANNEL_AGILITY_ENABLED (OID_DOT11_NDIS_START + 72)
#define OID_DOT11_HR_CCA_MODE_SUPPORTED (OID_DOT11_NDIS_START + 73)
#define OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED (OID_DOT11_NDIS_START + 74)
#define OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED (OID_DOT11_NDIS_START + 75)
#define OID_DOT11_COUNTRY_STRING (OID_DOT11_NDIS_START + 76)
#define OID_DOT11_MULTI_DOMAIN_CAPABILITY (OID_DOT11_NDIS_START + 77)
#define OID_DOT11_EHCC_PRIME_RADIX (OID_DOT11_NDIS_START + 78)
#define OID_DOT11_EHCC_NUMBER_OF_CHANNELS_FAMILY_INDEX (OID_DOT11_NDIS_START + 79)
#define OID_DOT11_EHCC_CAPABILITY_IMPLEMENTED (OID_DOT11_NDIS_START + 80)
#define OID_DOT11_EHCC_CAPABILITY_ENABLED (OID_DOT11_NDIS_START + 81)
#define OID_DOT11_HOP_ALGORITHM_ADOPTED (OID_DOT11_NDIS_START + 82)
#define OID_DOT11_RANDOM_TABLE_FLAG (OID_DOT11_NDIS_START + 83)
#define OID_DOT11_NUMBER_OF_HOPPING_SETS (OID_DOT11_NDIS_START + 84)
#define OID_DOT11_HOP_MODULUS (OID_DOT11_NDIS_START + 85)
#define OID_DOT11_HOP_OFFSET (OID_DOT11_NDIS_START + 86)
#define OID_DOT11_HOPPING_PATTERN (OID_DOT11_NDIS_START + 87)
#define OID_DOT11_RANDOM_TABLE_FIELD_NUMBER (OID_DOT11_NDIS_START + 88)
#define OID_DOT11_WPA_TSC (OID_DOT11_NDIS_START + 89)
#define OID_DOT11_RSSI_RANGE (OID_DOT11_NDIS_START + 90)
#define OID_DOT11_RF_USAGE (OID_DOT11_NDIS_START + 91)
#define OID_DOT11_NIC_SPECIFIC_EXTENSION (OID_DOT11_NDIS_START + 92)
#define OID_DOT11_AP_JOIN_REQUEST (OID_DOT11_NDIS_START + 93)
#define OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 94)
#define OID_DOT11_ERP_PBCC_OPTION_ENABLED (OID_DOT11_NDIS_START + 95)
#define OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 96)
#define OID_DOT11_DSSS_OFDM_OPTION_ENABLED (OID_DOT11_NDIS_START + 97)
#define OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 98)
#define OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED (OID_DOT11_NDIS_START + 99)
#define OID_DOT11_MAX_MAC_ADDRESS_STATES (OID_DOT11_NDIS_START + 100)
#define OID_DOT11_RECV_SENSITIVITY_LIST (OID_DOT11_NDIS_START + 101)
#define OID_DOT11_WME_IMPLEMENTED (OID_DOT11_NDIS_START + 102)
#define OID_DOT11_WME_ENABLED (OID_DOT11_NDIS_START + 103)
#define OID_DOT11_WME_AC_PARAMETERS (OID_DOT11_NDIS_START + 104)
#define OID_DOT11_WME_UPDATE_IE (OID_DOT11_NDIS_START + 105)
#define OID_DOT11_QOS_TX_QUEUES_SUPPORTED (OID_DOT11_NDIS_START + 106)
#define OID_DOT11_QOS_TX_DURATION (OID_DOT11_NDIS_START + 107)
#define OID_DOT11_QOS_TX_MEDIUM_TIME (OID_DOT11_NDIS_START + 108)
#define OID_DOT11_SUPPORTED_OFDM_FREQUENCY_LIST (OID_DOT11_NDIS_START + 109)
#define OID_DOT11_SUPPORTED_DSSS_CHANNEL_LIST (OID_DOT11_NDIS_START + 110)
#define OID_DOT11_AUTO_CONFIG_ENABLED NWF_DEFINE_OID (120, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENUM_BSS_LIST NWF_DEFINE_OID (121, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_FLUSH_BSS_LIST NWF_DEFINE_OID (122, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_POWER_MGMT_REQUEST NWF_DEFINE_OID (123, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DESIRED_SSID_LIST NWF_DEFINE_OID (124, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST NWF_DEFINE_OID (125, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DESIRED_BSSID_LIST NWF_DEFINE_OID (126, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DESIRED_BSS_TYPE NWF_DEFINE_OID (127, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_PMKID_LIST NWF_DEFINE_OID (128, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID)
#define OID_DOT11_CONNECT_REQUEST NWF_DEFINE_OID (129, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_EXCLUDE_UNENCRYPTED NWF_DEFINE_OID (130, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_STATISTICS NWF_DEFINE_OID (131, NWF_STATISTICS_OID, NWF_MANDATORY_OID)
#define OID_DOT11_PRIVACY_EXEMPTION_LIST NWF_DEFINE_OID (132, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM NWF_DEFINE_OID (133, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR NWF_DEFINE_OID (134, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM NWF_DEFINE_OID (135, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR NWF_DEFINE_OID (136, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM NWF_DEFINE_OID (137, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_CIPHER_DEFAULT_KEY_ID NWF_DEFINE_OID (138, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_CIPHER_DEFAULT_KEY NWF_DEFINE_OID (139, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_CIPHER_KEY_MAPPING_KEY NWF_DEFINE_OID (140, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENUM_ASSOCIATION_INFO NWF_DEFINE_OID (141, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DISCONNECT_REQUEST NWF_DEFINE_OID (142, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_UNICAST_USE_GROUP_ENABLED NWF_DEFINE_OID (143, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_HARDWARE_PHY_STATE NWF_DEFINE_OID (144, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DESIRED_PHY_LIST NWF_DEFINE_OID (145, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_CURRENT_PHY_ID NWF_DEFINE_OID (146, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_MEDIA_STREAMING_ENABLED NWF_DEFINE_OID (147, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD NWF_DEFINE_OID (148, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ACTIVE_PHY_LIST NWF_DEFINE_OID (149, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_EXTSTA_CAPABILITY NWF_DEFINE_OID (150, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DATA_RATE_MAPPING_TABLE NWF_DEFINE_OID (151, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_SUPPORTED_COUNTRY_OR_REGION_STRING NWF_DEFINE_OID (152, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DESIRED_COUNTRY_OR_REGION_STRING NWF_DEFINE_OID (153, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_PORT_STATE_NOTIFICATION NWF_DEFINE_OID (154, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID)
#define OID_DOT11_IBSS_PARAMS NWF_DEFINE_OID (155, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_QOS_PARAMS NWF_DEFINE_OID (156, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID)
#define OID_DOT11_SAFE_MODE_ENABLED NWF_DEFINE_OID (157, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_HIDDEN_NETWORK_ENABLED NWF_DEFINE_OID (158, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ASSOCIATION_PARAMS NWF_DEFINE_OID (159, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_SAFE_MODE_HT_ENABLED NWF_DEFINE_OID (160, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID)
#define OID_DOT11_PRIVATE_OIDS_START (OID_DOT11_NDIS_START + 1024)
#define OID_DOT11_CURRENT_ADDRESS (OID_DOT11_PRIVATE_OIDS_START + 2)
#define OID_DOT11_PERMANENT_ADDRESS (OID_DOT11_PRIVATE_OIDS_START + 3)
#define OID_DOT11_MULTICAST_LIST (OID_DOT11_PRIVATE_OIDS_START + 4)
#define OID_DOT11_MAXIMUM_LIST_SIZE (OID_DOT11_PRIVATE_OIDS_START + 5)
#define OID_DOT11_WPS_ENABLED NWF_DEFINE_OID (0x01, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_START_AP_REQUEST NWF_DEFINE_OID (0x02, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_AVAILABLE_CHANNEL_LIST NWF_DEFINE_OID (0x03, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_AVAILABLE_FREQUENCY_LIST NWF_DEFINE_OID (0x04, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DISASSOCIATE_PEER_REQUEST NWF_DEFINE_OID (0x05, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_INCOMING_ASSOCIATION_DECISION NWF_DEFINE_OID (0x06, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ADDITIONAL_IE NWF_DEFINE_OID (0x07, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_ENUM_PEER_INFO NWF_DEFINE_OID (0x08, NWF_EXTAP_OID, NWF_MANDATORY_OID)
#define OID_DOT11_CREATE_MAC NWF_DEFINE_OID (0x01, NWF_VWIFI_OID, NWF_MANDATORY_OID)
#define OID_DOT11_DELETE_MAC NWF_DEFINE_OID (0x02, NWF_VWIFI_OID, NWF_MANDATORY_OID)
#define OID_DOT11_PREFERRED_MAC NWF_DEFINE_OID (0x03, NWF_VWIFI_OID, NWF_MANDATORY_OID)
#define OID_DOT11_VIRTUAL_STATION_CAPABILITY NWF_DEFINE_OID (0x04, NWF_VWIFI_OID, NWF_OPTIONAL_OID)
#define OID_DOT11_WFD_DEVICE_CAPABILITY NWF_DEFINE_OID (0x01, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_GROUP_OWNER_CAPABILITY NWF_DEFINE_OID (0x02, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_DEVICE_INFO NWF_DEFINE_OID (0x03, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST NWF_DEFINE_OID (0x04, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_DISCOVER_REQUEST NWF_DEFINE_OID (0x05, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_ENUM_DEVICE_LIST NWF_DEFINE_OID (0x06, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY NWF_DEFINE_OID (0x07, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_ADDITIONAL_IE NWF_DEFINE_OID (0x08, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_FLUSH_DEVICE_LIST NWF_DEFINE_OID (0x09, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST NWF_DEFINE_OID (0x0A, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE NWF_DEFINE_OID (0x0B, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION NWF_DEFINE_OID (0x0C, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_INVITATION_REQUEST NWF_DEFINE_OID (0x0D, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_INVITATION_RESPONSE NWF_DEFINE_OID (0x0E, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST NWF_DEFINE_OID (0x0F, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE NWF_DEFINE_OID (0x10, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_GET_DIALOG_TOKEN NWF_DEFINE_OID (0x11, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_STOP_DISCOVERY NWF_DEFINE_OID (0x12, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL NWF_DEFINE_OID (0x13, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_DESIRED_GROUP_ID NWF_DEFINE_OID (0x01, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_START_GO_REQUEST NWF_DEFINE_OID (0x02, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_GROUP_START_PARAMETERS NWF_DEFINE_OID (0x03, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST NWF_DEFINE_OID (0x04, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST NWF_DEFINE_OID (0x05, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_WFD_GROUP_JOIN_PARAMETERS NWF_DEFINE_OID (0x06, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED NWF_DEFINE_OID (0x01, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_POWER_MGMT_MODE_STATUS NWF_DEFINE_OID (0x02, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_OFFLOAD_NETWORK_LIST NWF_DEFINE_OID (0x03, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID)
#define OID_DOT11_MANUFACTURING_TEST NWF_DEFINE_OID (0x01, NWF_MANUFACTURING_OID, NWF_OPTIONAL_OID)
#ifndef INFO_FLAG_DONT_EXPORT
#define INFO_FLAG_DONT_EXPORT 8
#endif
#ifndef INFO_FLAG_AIRPCAP_CARD
#define INFO_FLAG_AIRPCAP_CARD 16
#endif
#ifndef INFO_FLAG_NPFIM_DEVICE
#define INFO_FLAG_NPFIM_DEVICE 32
#endif
#ifndef IF_TYPE_IEEE80216_WMAN
#define IF_TYPE_IEEE80216_WMAN 237
#endif
#ifndef IF_TYPE_WWANPP
#define IF_TYPE_WWANPP 243
#endif
#ifndef IF_TYPE_WWANPP2
#define IF_TYPE_WWANPP2 244
#endif
/* Rewritten from <NtDDNdis.h> and 'enum _NDIS_PHYSICAL_MEDIUM':
*/
#define ND_PHY_Unspecified 0
#define ND_PHY_WirelessLan 1
#define ND_PHY_CableModem 2
#define ND_PHY_PhoneLine 3
#define ND_PHY_PowerLine 4
#define ND_PHY_DSL 5
#define ND_PHY_FibreChannel 6
#define ND_PHY_1394 7
#define ND_PHY_WirelessWan 8
#define ND_PHY_Native802_11 9
#define ND_PHY_Bluetooth 10
#define ND_PHY_Infiniband 11
#define ND_PHY_WiMax 12
#define ND_PHY_UWB 13
#define ND_PHY_802_3 14
#define ND_PHY_802_5 15
#define ND_PHY_Irda 16
#define ND_PHY_WiredWAN 17
#define ND_PHY_WiredCoWan 18
static BOOL get_real_media (ADAPTER *adapter, int *media)
{
struct {
PACKET_OID_DATA oidData;
DWORD media;
} oid;
memset (&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_PHYSICAL_MEDIUM;
oid.oidData.Length = sizeof(oid);
if (!PacketRequest(adapter, FALSE, &oid.oidData))
return (FALSE);
*media = *(int*) &oid.oidData.Data;
return (TRUE);
}
/*
* Ref: https://docs.microsoft.com/en-us/windows-hardware/drivers/network/oid-gen-media-connect-status
*/
static BOOL get_link_state (ADAPTER *adapter, int *state)
{
struct {
PACKET_OID_DATA oidData;
DWORD state;
} oid;
memset (&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_MEDIA_CONNECT_STATUS;
oid.oidData.Length = sizeof(oid);
if (!PacketRequest(adapter, FALSE, &oid.oidData))
return (FALSE);
*state = *(int*) &oid.oidData.Data;
return (TRUE);
}
/**
* Function for getting the driver version since the 'OID_GEN_VENDOR_DRIVER_VERSION' is
* very flaky. Not many driver-vendors return reliable data for this OID.
*
* Instead enumerate all keys under:
* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\00xx
*
* This is the "System-Defined Device Setup Classes Available to Vendors".
* Ref:
* https://docs.microsoft.com/en-us/windows-hardware/drivers/install/system-defined-device-setup-classes-available-to-vendors
*
* Get all 'DriverVersion' keys and values.
*/
#define KEY_NAME "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"
struct setup_info_st {
char *NetCfgInstanceId;
char *DriverDate; /* stored in Registry as DD-MM-YYYY */
char *DriverVersion;
char *NetworkInterfaceInstallTimestamp;
struct setup_info_st *next;
};
/* 50 elements should be plenty
*/
static struct setup_info_st setup_info [50];
static char *ULONGLONG_to_ctime (ULONGLONG ts)
{
time_t t;
ULONGLONG usec;
const struct tm *tm;
char buf[30];
static BOOL tz_set = FALSE;
if (!tz_set)
tzset();
tz_set = TRUE;
usec = ts / 10; /* from 100 nano-sec periods to usec */
usec -= 11644473600000000ULL; /* to Unix epoch (usec) */
t = usec / 1000000ULL; /* to Unix epoc (sec) */
tm = localtime (&t);
if (tm)
strftime (buf, sizeof(buf), "%d-%m-%Y, %H:%M:%S", tm); /* use DD-MM-YYYY as for 'DriverDate' */
else strcpy (buf, "?");
return strdup (buf);
}
static int setup_info_populate (const char *key_name, struct setup_info_st *info)
{
HKEY key = NULL;
DWORD num, rc = RegOpenKeyEx (HKEY_LOCAL_MACHINE, key_name, 0, KEY_READ, &key);
int added = 0;
if (rc != ERROR_SUCCESS)
return (0);
for (num = 0; rc == ERROR_SUCCESS; num++)
{
char value [50] = "\0";
char data [200] = "\0";
DWORD value_size = sizeof(value);
DWORD data_size = sizeof(data);
DWORD type = REG_NONE;
rc = RegEnumValue (key, num, value, &value_size, NULL, &type, (LPBYTE)&data, &data_size);
if (rc == ERROR_NO_MORE_ITEMS)
break;
switch (type)
{
case REG_SZ:
if (!strcmp(value,"NetCfgInstanceId"))
{
info->NetCfgInstanceId = strdup (data);
added++;
}
else if (!strcmp(value,"DriverDate"))
{
info->DriverDate = strdup (data);
added++;
}
else if (!strcmp(value,"DriverVersion"))
{
info->DriverVersion = strdup (data);
added++;
}
break;
case REG_QWORD:
if (!strcmp(value,"NetworkInterfaceInstallTimestamp"))
{
info->NetworkInterfaceInstallTimestamp = ULONGLONG_to_ctime (*(ULONGLONG*)&data[0]);
added++;
}
break;
default:
break;
}
}
if (key)
RegCloseKey (key);
return (added);
}
static void setup_info_get (void)
{
struct setup_info_st *inf, *prev = NULL;
HKEY key = NULL;
int num;
DWORD rc = RegOpenKeyEx (HKEY_LOCAL_MACHINE, KEY_NAME, 0, KEY_READ, &key);
memset (&setup_info, '\0', sizeof(setup_info));
inf = setup_info + 0;
for (num = 0; rc == ERROR_SUCCESS; num++)
{
char sub_key [512]; /* Full key name for this leaf */
char new_key [512]; /* The current leaf we're at now */
DWORD size = sizeof(new_key);
rc = RegEnumKeyEx (key, num, new_key, &size, NULL, NULL, NULL, NULL);
if (rc == ERROR_NO_MORE_ITEMS)
break;
snprintf (sub_key, sizeof(sub_key), "%s\\%s", KEY_NAME, new_key);
if (new_key[0] != '0')
break;
if (num >= DIM(setup_info)-1)
break;
if (setup_info_populate(sub_key, inf) > 0)
{
inf->next = inf + 1;
prev = inf;
inf++;
}
}
if (prev)
prev->next = NULL;
if (key)
RegCloseKey (key);
}
static void setup_info_free (void)
{
struct setup_info_st *inf;
for (inf = setup_info + 0 ; inf; inf = inf->next)
{
if (inf->NetCfgInstanceId)
free (inf->NetCfgInstanceId);
if (inf->DriverDate)
free (inf->DriverDate);
if (inf->DriverVersion)
free (inf->DriverVersion);
if (inf->NetworkInterfaceInstallTimestamp)
free (inf->NetworkInterfaceInstallTimestamp);
}
setup_info[0].next = NULL;
}
static void setup_info_print (const char *indent, const char *guid)
{
const struct setup_info_st *inf;
const char *DriverVersion = "<unknown>";
const char *DriverDate = "<unknown>";
const char *InstallTimestamp = "<unknown>";
for (inf = setup_info + 0; inf; inf = inf->next)
{
if (strcmp(inf->NetCfgInstanceId,guid))
continue;
if (inf->DriverVersion)
DriverVersion = inf->DriverVersion;
if (inf->DriverDate)
DriverDate = inf->DriverDate;
if (inf->NetworkInterfaceInstallTimestamp)
InstallTimestamp = inf->NetworkInterfaceInstallTimestamp;
}
printf("%sDrvr version: %s\n", indent, DriverVersion);
printf("%sDrvr date: %s\n", indent, DriverDate);
printf("%sDrvr installed: %s\n", indent, InstallTimestamp);
}
static BOOL get_NDIS_driver_version (ADAPTER *adapter, const char **ver_info)
{
struct {
PACKET_OID_DATA oidData;
BYTE ver_buf[2];
} oid;
const BYTE *p;
BYTE lo_ver, hi_ver;
static char ver_buff[30];
memset (&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_DRIVER_VERSION;
oid.oidData.Length = sizeof(oid);
*ver_info = NULL;
if (!PacketRequest(adapter, FALSE, &oid.oidData))
return (FALSE);
p = (const BYTE*)&oid.oidData.Data;
lo_ver = *p++;
hi_ver = *p;
if (hi_ver == 0xFF || lo_ver == 0xFF)
strcpy (ver_buff, "unknown");
else snprintf (ver_buff, sizeof(ver_buff), "%d.%d", hi_ver, lo_ver);
*ver_info = ver_buff;
return (TRUE);
}
#if defined(HAVE_AIRPCAP_API)
/* If the adapter can transmit. Not tested since I don't have one.
*/
static BOOL can_tx;
static void print_airpcap_capab (AirpcapHandle *ap_hnd)
{
static const struct tok bus_types[] = {
{ AIRPCAP_BUS_USB, "USB" },
{ AIRPCAP_BUS_PCI, "PCI" },
{ AIRPCAP_BUS_PCI_EXPRESS, "PCI-Express" },
{ AIRPCAP_BUS_MINI_PCI, "Mini-PCI" },
{ AIRPCAP_BUS_MINI_PCI_EXPRESS, "Mini-PCI-Express" },
{ AIRPCAP_BUS_CARDBUS, "Cardbus" },
{ AIRPCAP_BUS_EXPRESSCARD, "ExpressCard" }
};
struct _AirpcapDeviceCapabilities *caps;
if (!AirpcapGetDeviceCapabilities(ap_hnd,&caps))
return;
can_tx = caps->CanTransmit;
printf(", name \"%s\"", caps->AdapterModelName);
printf(", %s bus", tok2str(bus_types, "%d?", caps->AdapterBus));
printf(", %s", can_tx ? "TX" : "RX only");
printf(", %sext-ant ", caps->ExternalAntennaPlug ? "" : "No ");
if (ap_hnd->AdapterType == ADAPTER_TYPE_AR5416_DRIVER)
puts (", Atheros AR5416 chip");
else puts ("");
printf(" Media: 802.11");
if (caps->SupportedMedia & AIRPCAP_MEDIUM_802_11_A)
printf("/a");
if (caps->SupportedMedia & AIRPCAP_MEDIUM_802_11_B)
printf("/b");
if (caps->SupportedMedia & AIRPCAP_MEDIUM_802_11_G)
printf("/g");
if (caps->SupportedMedia & AIRPCAP_MEDIUM_802_11_N)
printf("/n");
printf(", band: ");
if (caps->SupportedBands & AIRPCAP_BAND_2GHZ)
printf("2GHz ");
if (caps->SupportedBands & AIRPCAP_BAND_5GHZ)
printf("5GHz");
}
static void print_airpcap_mode (AirpcapHandle *ap_hnd)
{
UINT mode = 0;
printf(" Mode: ");
if (!AirpcapGetDeviceMacFlags(ap_hnd, &mode))
printf("?");
else
printf ("monitor %s, ACK: %s",
(mode & AIRPCAP_MF_MONITOR_MODE_ON) ? "ON" : "OFF",
(mode & AIRPCAP_MF_ACK_FRAMES_ON) ? "ON" : "OFF");
}
static void print_airpcap_validation (AirpcapHandle *ap_hnd)
{
AirpcapValidationType type = 0;
static const struct tok validation_types[] = {
{ AIRPCAP_VT_ACCEPT_EVERYTHING, "Accept all" },
{ AIRPCAP_VT_ACCEPT_CORRECT_FRAMES, "Correct frames only" },
{ AIRPCAP_VT_ACCEPT_CORRUPT_FRAMES, "Corrupt frames only" },
{ 0, NULL }
};
printf(" Validation: ");
if (!AirpcapGetFcsValidation(ap_hnd, &type))
printf ("?");
else printf ("%s", tok2str(validation_types, "%d", type));
}
static const char *get_channel (UINT freq)
{
AirpcapChannelBand band;
static char buf[10];
UINT chann;
if (!AirpcapConvertFrequencyToChannel (freq, &chann, &band))
return ("?");
return _ultoa (chann, buf, 10);
}
static void print_airpcap_channel_info (AirpcapHandle *ap_hnd)
{
UINT i, num_chan = 0;
AirpcapChannelInfo *chan_info = NULL;
AirpcapChannelInfo channel;
#define CAN_TX(flag) (can_tx && (flag & AIRPCAP_CIF_TX_ENABLED) ? "(Tx)" : "")
printf(" Supported CH: ");
if (!AirpcapGetDeviceSupportedChannels(ap_hnd, &chan_info, &num_chan))
puts("<failed>");
else
for (i = 0; i < num_chan; i++, chan_info++) {
printf("%s%u MHz. Ch: %2s, Ext: %d %s\n",
(i == 0) ? "" : " ",
chan_info->Frequency, get_channel(chan_info->Frequency),
chan_info->ExtChannel, CAN_TX(chan_info->Flags));
}
printf(" Current CH: ");
if (AirpcapGetDeviceChannelEx(ap_hnd, &channel))
printf("%u MHz. Ch: %2s, Ext: %d %s\n",
channel.Frequency, get_channel(channel.Frequency),
channel.ExtChannel, CAN_TX(channel.Flags));
else
puts("<failed>");
}
static AirpcapHandle *get_air_handle (pcap_t *pcap, char *ebuf)
{
ADAPTER *adapter = pcap_get_adapter (pcap);
AirpcapHandle *air_hnd = NULL;
if (adapter) {
air_hnd = PacketGetAirPcapHandle (adapter);
if (air_hnd)
return (air_hnd);
/* fall through */
}
strlcpy (ebuf, "pcap-handle is not for a AirPcap device", PCAP_ERRBUF_SIZE);
return (NULL);
}
int airpcap_channel_set (pcap_t *pcap, int new_ch, int *old_ch, char *ebuf)
{
AirpcapHandle *hnd = get_air_handle (pcap, ebuf);
static UINT chan = 0;
if (!hnd)
return (0);
if (old_ch && AirpcapGetDeviceChannel(hnd, &chan))
*old_ch = (int)chan;
if (new_ch != -1 && new_ch != (int)chan && !AirpcapSetDeviceChannel(hnd,(UINT)new_ch))
{
if (ebuf)
snprintf (ebuf, PCAP_ERRBUF_SIZE, "Error setting channel: %u: %s",
new_ch, AirpcapGetLastError(hnd));
return (0);
}
return (1);
}
int airpcap_capture_all (pcap_t *pcap, int all, char *ebuf)
{
AirpcapHandle *hnd = get_air_handle (pcap, ebuf);
AirpcapValidationType type;
const char *err_str;
if (!hnd)
return (0);
type = all ? AIRPCAP_VT_ACCEPT_EVERYTHING :
AIRPCAP_VT_ACCEPT_CORRECT_FRAMES;
err_str = all ? "AIRPCAP_VT_ACCEPT_EVERYTHING" :
"AIRPCAP_VT_ACCEPT_CORRECT_FRAMES";
if (!AirpcapSetFcsValidation(hnd,type))
{
snprintf (ebuf, PCAP_ERRBUF_SIZE, "Error in FCS validation (%s): %s",
err_str, AirpcapGetLastError(hnd));
return (0);
}
return (1);
}
#endif /* HAVE_AIRPCAP_API */
void get_version_extras (void)
{
const char *ver = PacketGetDriverVersion();
UINT air_major, air_minor, air_rev, air_build;
/* Figure out the version hell in WinPcap. If the NPF.SYS version was not found
* or because WinPcap was not initialised, the above returns ''
*/
if (!ver || *ver == '\0') {
char buf[100];
const char *r_paren, *r_space;
ver = pcap_lib_version();
r_paren = strrchr (ver, ')');
r_space = strrchr (ver, ' ');
if (r_paren && r_space)
snprintf (buf, sizeof(buf), "not found, assuming %.*s", (int)(r_paren-r_space-1), r_space+1);
else
strlcpy (buf, ver, sizeof(buf));
ver = buf;
}
fprintf(stderr, "NPF.SYS version %s.\n", ver);
#ifdef HAVE_AIRPCAP_API
AirpcapGetVersion (&air_major, &air_minor, &air_rev, &air_build);
fprintf (stderr, "AirPcap version %u.%u.%u.%u\n", air_major, air_minor, air_rev, air_build);
#else
(void) air_major;
(void) air_minor;
(void) air_rev;
(void) air_build;
#endif
}
static ADAPTER *open_adapter (const char *device, pcap_t **pcap_p)
{
char ebuf [PCAP_ERRBUF_SIZE];
pcap_t *pcap = pcap_open_live (device, 100, 0, 500, ebuf);
*pcap_p = NULL;
if (!pcap)
return (NULL);
*pcap_p = pcap;
return pcap_get_adapter (pcap);
}
#define NDIS_PACKET_TYPE_802_11_RAW_DATA (0x00010000U)
#define NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT (0x00020000U)
#define NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT (0x00040000U)
#define NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT (0x00080000U)
#define NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT (0x00100000U)
#define NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT (0x00200000U)
#define NDIS_PACKET_TYPE_802_11_RAW_MGMT (0x00400000U)
#define NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL (0x00800000U)
#define NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL (0x01000000U)
#define NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL (0x02000000U)
#ifndef NDIS_PACKET_TYPE_ALL_802_11_FILTERS
#define NDIS_PACKET_TYPE_ALL_802_11_FILTERS \
(NDIS_PACKET_TYPE_DIRECTED | \
NDIS_PACKET_TYPE_MULTICAST | \
NDIS_PACKET_TYPE_ALL_MULTICAST | \
NDIS_PACKET_TYPE_BROADCAST | \
NDIS_PACKET_TYPE_PROMISCUOUS | \
NDIS_PACKET_TYPE_802_11_RAW_DATA | \
NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT | \
NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT | \
NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT | \
NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT | \
NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT | \
NDIS_PACKET_TYPE_802_11_RAW_MGMT | \
NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL | \
NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL | \
NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL)
#endif
static BOOL _set_monitor_mode (ADAPTER *adapter)
{
BOOL rc;
struct {
PACKET_OID_DATA oidData;
DWORD filter;
} oid;
if (!adapter || adapter->Flags != INFO_FLAG_NDIS_ADAPTER)
return (FALSE);
memset(&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_CURRENT_PACKET_FILTER;
oid.oidData.Length = sizeof(oid);
oid.filter = NDIS_PACKET_TYPE_PROMISCUOUS | NDIS_PACKET_TYPE_ALL_802_11_FILTERS;
*(DWORD*) &oid.oidData.Data = oid.filter;
rc = PacketRequest(adapter, TRUE, &oid.oidData);
WINDUMP_TRACE (1, "_set_monitor_mode(): filter: 0x%08lX, rc: %d\n", oid.filter, rc);
return (rc);
}
BOOL set_monitor_mode (pcap_t *pcap)
{
return _set_monitor_mode (pcap_get_adapter(pcap));
}
/*
* Avoid linking with 'iphlpapi.lib'.
*/
typedef ULONG (WINAPI *GetAdaptersAddresses_t) (
ULONG Family,
ULONG Flags,
VOID *Reserved,
IP_ADAPTER_ADDRESSES *AdapterAddresses,
ULONG *outBufLen);
static GetAdaptersAddresses_t p_GetAdaptersAddresses = NULL;
static IP_ADAPTER_ADDRESSES *addresses = NULL;
static IP_ADAPTER_ADDRESSES *get_adapter_addresses (void)
{
ULONG sz_needed = 0;
ULONG flags = GAA_FLAG_INCLUDE_PREFIX |
GAA_FLAG_INCLUDE_ALL_INTERFACES;
HINSTANCE mod = LoadLibrary ("iphlpapi.dll");
if (!mod || mod == INVALID_HANDLE_VALUE)
return (NULL);
p_GetAdaptersAddresses = (GetAdaptersAddresses_t) GetProcAddress (mod, "GetAdaptersAddresses");
/* Make an initial call to GetAdaptersAddresses() to get the size needed.
*/
if ((*p_GetAdaptersAddresses)(AF_UNSPEC, flags, NULL, NULL, &sz_needed) == ERROR_BUFFER_OVERFLOW)
addresses = malloc (sz_needed);
if ((*p_GetAdaptersAddresses)(AF_UNSPEC, flags, NULL, addresses, &sz_needed) == NO_ERROR)
{
IP_ADAPTER_ADDRESSES *save = addresses;
unsigned num;
for (num = 0; addresses; addresses = addresses->Next)
num++;
WINDUMP_TRACE (2, "GetAdaptersAddresses() returned %lu bytes of info for %u adapters.\n", sz_needed, num);
addresses = save;
}
else
addresses = NULL;
FreeLibrary (mod);
return (addresses);
}
static void free_adapter_addresses (void)
{
if (addresses)
free (addresses);
addresses = NULL;
}
static const char *get_addr_common (int num, const address_buf *abuf)
{
char *p = work_buf;
int i;
*p = '\0';
if (num == 0)
return (NONE_STR);
for (i = 0; i < num; i++)
{
strncat (p, abuf[i], sizeof(abuf[0])-1);
p += strlen (p);
if (i < num - 1)
{
strcat (p, ", ");
p += 2;
}
else
break;
}
return (work_buf);
}
static const char *get_address (int family, const void *addr, char *buf)
{
if (family == AF_INET)
return addrtostr(addr,buf,INET6_ADDRSTRLEN);
if (family == AF_INET6)
return addrtostr6(addr,buf,INET6_ADDRSTRLEN);
return strcpy(buf,"??");
}
#if 1
#define GET_ONE_ADDR(addr, i) do { \
const struct sockaddr_in *sa4 = (const struct sockaddr_in*) addr.lpSockaddr; \
const struct sockaddr_in6 *sa6 = (const struct sockaddr_in6*) addr.lpSockaddr; \
const struct in_addr *in4 = &sa4->sin_addr; \
const struct in6_addr *in6 = &sa6->sin6_addr; \
get_address (sa4->sin_family, sa4->sin_family == AF_INET ? \
(const void*)in4 : (const void*)in6, abuf[i]); \
} while (0)
#else
static DWORD dummy;
#define GET_ONE_ADDR(addr,i) do { \
dummy = sizeof(abuf[i]), \
WSAAddressToStringA (addr->lpSockaddr, \
addr->iSockaddrLength, \
NULL, abuf[i], &dummy); \
} while (0)
#endif
#define GET_ADDRESSES(func, type, var) \
static const char * func (type * var) \
{ \
address_buf abuf[10]; \
unsigned i; \
\
for (i = 0; var && i < DIM(abuf); i++) { \
GET_ONE_ADDR (var->Address, i); \
var = var->Next; \
} \
return get_addr_common (i, (const address_buf*)&abuf); \
}
GET_ADDRESSES (get_unicast_addrs, const IP_ADAPTER_UNICAST_ADDRESS, uca)
GET_ADDRESSES (get_anycast_addrs, const IP_ADAPTER_ANYCAST_ADDRESS, aca)
GET_ADDRESSES (get_multicast_addrs, const IP_ADAPTER_MULTICAST_ADDRESS, mca)
GET_ADDRESSES (get_dns_server_addrs, const IP_ADAPTER_DNS_SERVER_ADDRESS, dns)
#if defined(ON_WIN_VISTA)
#pragma message ("Compiling code for WinVista SP1+ SDK")
GET_ADDRESSES (get_gateway_addrs, const IP_ADAPTER_GATEWAY_ADDRESS, gw)
GET_ADDRESSES (get_wins_addrs, const IP_ADAPTER_WINS_SERVER_ADDRESS, wins)
#else
#pragma message ("NOT compiling code for WinVista SP1+ SDK")
#endif
static const char *wide_string (const wchar_t *in_str, UINT cp)
{
if (WideCharToMultiByte(cp, 0, in_str, -1, work_buf, sizeof(work_buf), NULL, NULL) == 0)
{
work_buf[0] = '?';
work_buf[1] = '\0';
}
return (work_buf);
}
static const char *wstring_utf8 (const wchar_t *in_str)
{
return wide_string (in_str, CP_UTF8);
}
/**
* Return a number with suffix for a link-speed 32-bit value.
*/
static const char *speed_string (DWORD val)
{
char suffix = '\0';
double fl_val;
if (val == 0UL)
return strcpy (work_buf, "0 B/s");
fl_val = (double) (val+1);
if (fl_val >= 1E9)
{
suffix = 'G';
fl_val /= 1E9;
}
else if (fl_val >= 1E6)
{
suffix = 'M';
fl_val /= 1E6;
}
else if (fl_val >= 1E3)
{
suffix = 'k';
fl_val /= 1E3;
}
sprintf (work_buf, "%.0f %cB/s", fl_val, suffix);
return (work_buf);
}
/**
* Return a number with suffix for a link-speed of a 64-bit value.
*/
static const char *speed64_string (ULONG64 val)
{
char suffix = '\0';
double fl_val;
if (val <= 1000000000ULL)
return speed_string ((DWORD)val);
fl_val = (double) (val+1);
if (fl_val >= 1E12)
{
suffix = 'T';
fl_val /= 1E12;
}
else if (fl_val >= 1E9)
{
suffix = 'G';
fl_val /= 1E9;
}
sprintf (work_buf, "%.0f %cB/s", fl_val, suffix);
return (work_buf);
}
static const struct tok if_types[] = {
{ IF_TYPE_OTHER, "Other type" },
{ IF_TYPE_ETHERNET_CSMACD, "Ethernet" },
{ IF_TYPE_ISO88025_TOKENRING, "Token Ring" },
{ IF_TYPE_FDDI, "FDDI" },
{ IF_TYPE_PPP, "Point-to-Point" },
{ IF_TYPE_SOFTWARE_LOOPBACK, "Loopback" },
{ IF_TYPE_ATM, "ATM" },
{ IF_TYPE_IEEE80211, "IEEE 802.11 wireless" },
{ IF_TYPE_TUNNEL, "Tunnel" },
{ IF_TYPE_IEEE1394, "IEEE 1394 (Firewire)" },
{ IF_TYPE_IEEE80216_WMAN, "WiMax broadband" },
{ IF_TYPE_WWANPP, "GSM mobile" },
{ IF_TYPE_WWANPP2, "CDMA mobile" },
{ 0, NULL }
};
static const struct tok oper_status[] = {
{ IfOperStatusUp, "Up" },
{ IfOperStatusDown, "Down" },
{ IfOperStatusTesting, "Testing" },
{ IfOperStatusUnknown, "Unknown" },
{ IfOperStatusDormant, "Dormant" },
{ IfOperStatusNotPresent, "Not present" },
{ IfOperStatusLowerLayerDown, "Lower layer down" },
{ 0, NULL }
};
static const char *get_mac_addr (netdissect_options *ndo, const void *mac, size_t size)
{
static char buf [100];
const char *str = NULL;
const char *a = (const char*) mac;
str = linkaddr_string (ndo, (const u_char*)mac, LINKADDR_ETHER, size);
if (str && strlen(str) == 3*6-1 && str[2] == ':')
return (str);
snprintf (buf, sizeof(buf), "%s (%02X:%02X:%02X:%02X:%02X:%02X)",
str, a[0] & 255, a[1] & 255, a[2] & 255, a[3] & 255, a[4] & 255, a[5] & 255);
return (buf);
}
void
static show_iphlapi_details (netdissect_options *ndo, const IP_ADAPTER_ADDRESSES *iface, const char *pcap_name)
{
address_buf abuf[1];
char err_buf[PCAP_ERRBUF_SIZE+1];
pcap_t *p;
printf (" Unicast Addr: %s\n", get_unicast_addrs(iface->FirstUnicastAddress));
printf (" Anycast Addr: %s\n", get_anycast_addrs(iface->FirstAnycastAddress));
printf (" Multicast Addr: %s\n", get_multicast_addrs(iface->FirstMulticastAddress));
printf (" DNS Servers: %s\n", get_dns_server_addrs(iface->FirstDnsServerAddress));
printf (" IfType: %s (%lu)\n",
tok2str(if_types, "%lu?", iface->IfType), (u_long)iface->IfType);
printf (" OperStatus: %s (%u)\n",
tok2str(oper_status, "%lu?", iface->OperStatus), iface->OperStatus);
#if 0
if (!strncmp(pcap_name, "\\Device\\NPF_", sizeof("\\Device\\NPF_")-1) &&
(p = pcap_open_live (pcap_name, 1500, PCAP_OPENFLAG_PROMISCUOUS, 1, err_buf)) != NULL)
{
NET_IF_OPER_STATUS oper_status = (NET_IF_OPER_STATUS) -1;
wchar_t friendly_name [100] = { L'\0' };
size_t size = sizeof(oper_status);
int status;
/* Does not work since WinPcap uses NDIS 5 and OID_GEN_OPERATIONAL_STATUS is a
* NDIS 6+ function
*/
status = pcap_oid_get_request (p, OID_GEN_OPERATIONAL_STATUS, &oper_status, &size);
if (status == 0 || size != sizeof(oper_status))
printf (" oper_status: %d\n", oper_status);
else printf (" Error: %s\n", pcap_geterr(p));
size = DIM(friendly_name);
status = pcap_oid_get_request (p, OID_GEN_FRIENDLY_NAME, friendly_name, &size);
if (status == 0)
printf (" friendly_name: %S\n", friendly_name);
else printf (" Error: %s\n", pcap_geterr(p));
pcap_close (p);
}
#endif
printf (" MAC address: %s\n",
get_mac_addr(ndo, &iface->PhysicalAddress, iface->PhysicalAddressLength));
printf (" MTU: %lu\n", iface->Mtu);
#if defined(ON_WIN_VISTA)
printf (" Tx speed: %s\n", speed64_string(iface->TransmitLinkSpeed));
printf (" Rx speed: %s\n", speed64_string(iface->ReceiveLinkSpeed));
printf (" WINS servers: %s\n", get_wins_addrs(iface->FirstWinsServerAddress));
printf (" Gateways: %s\n", get_gateway_addrs(iface->FirstGatewayAddress));
if (iface->Flags & IP_ADAPTER_IPV4_ENABLED)
{
printf (" IPv4 metric: %lu\n", iface->Ipv4Metric);
if (iface->Flags & IP_ADAPTER_DHCP_ENABLED) {
if (iface->Dhcpv4Server.iSockaddrLength == 0)
strcpy (abuf[0], NONE_STR);
else
GET_ONE_ADDR (&iface->Dhcpv4Server, 0);
printf (" DHCP v4 addr: %s\n", abuf[0]);
}
}
if (iface->Flags & IP_ADAPTER_IPV6_ENABLED)
{
printf (" IPv6 metric: %lu\n", iface->Ipv6Metric);
if (iface->Flags & IP_ADAPTER_DHCP_ENABLED) {
if (iface->Dhcpv6Server.iSockaddrLength == 0)
strcpy (abuf[0], NONE_STR);
else
GET_ONE_ADDR (&iface->Dhcpv6Server, 0);
printf (" DHCP v6 addr: %s\n", abuf[0]);
}
}
#endif
}
extern const struct tok status_flags[]; /* in tcpdump.c */
void show_iface_details (netdissect_options *ndo, pcap_if_t *dev)
{
const IP_ADAPTER_ADDRESSES *iface;
const char *device = dev->name;
const char *lpar = strchr (device, '{');
const char *guid;
bpf_u_int32 pcap_flags = dev->flags;
static BOOL done = FALSE;
if (!done)
{
addresses = get_adapter_addresses();
atexit (free_adapter_addresses);
setup_info_get();
atexit (setup_info_free);
done = TRUE;
}
if (!lpar)
{
WINDUMP_TRACE (2, "device: '%s' doesn't have a GUID.\n", device);
show_description (ndo, NULL, dev);
show_link_details (ndo, device, NULL);
return;
}
for (iface = addresses; iface; iface = iface->Next)
{
guid = iface->AdapterName;
if (!strcmp(lpar,guid))
{
show_description (ndo, iface, NULL);
show_iphlapi_details (ndo, iface, dev->name);
show_link_details (ndo, device, guid);
break; /* since only 1 'dev' can match only 1 'iface' */
}
}
}
#if defined(HAVE_AIRPCAP_API)
static void
show_airpcap_details (netdissect_options *ndo, AirpcapHandle *ap_hnd)
{
static const struct tok crypt_state[] = {
{ AIRPCAP_DECRYPTION_ON, "ON" },
{ AIRPCAP_DECRYPTION_OFF, "OFF" },
{ 0, NULL }
};
static const struct tok link_type[] = {
{ AIRPCAP_LT_802_11, "AIRPCAP_LT_802_11" },
{ AIRPCAP_LT_802_11_PLUS_RADIO, "AIRPCAP_LT_802_11_PLUS_RADIO" },
{ AIRPCAP_LT_802_11_PLUS_PPI, "AIRPCAP_LT_802_11_PLUS_PPI" },
{ 0, NULL }
};
AirpcapDecryptionState crypt;
AirpcapLinkType linkType;
AirpcapMacAddress macAddr;
printf(" MAC address: ");
if (AirpcapGetMacAddress(ap_hnd, &macAddr))
printf("%s\n", get_mac_addr(ndo, &macAddr, sizeof(macAddr)));
else
printf("<failed>\n");
printf(" Link type: ");
if (AirpcapGetLinkType(ap_hnd, &linkType))
printf ("%s\n", tok2str(link_type,"%d?",linkType));
else
printf ("<failed>\n");
printf(" Encryption: ");
if (AirpcapGetDriverDecryptionState(ap_hnd,&crypt))
printf ("%s", tok2str(crypt_state,"%d?",crypt));
else
printf ("<failed>");
print_airpcap_capab(ap_hnd);
puts("");
print_airpcap_mode(ap_hnd);
puts("");
print_airpcap_validation(ap_hnd);
puts("");
print_airpcap_channel_info(ap_hnd);
}
#endif /* HAVE_AIRPCAP_API */
static void
show_link_details (netdissect_options *ndo, const char *device, const char *guid)
{
static const struct tok phys_media[] = {
{ ND_PHY_Unspecified, "Unspecified" },
{ ND_PHY_WirelessLan, "Wireless LAN" },
{ ND_PHY_CableModem, "Cable" },
{ ND_PHY_PhoneLine, "Phone" },
{ ND_PHY_PowerLine, "PowerLine" },
{ ND_PHY_DSL, "DSL" },
{ ND_PHY_FibreChannel, "Fibre" },
{ ND_PHY_1394, "IEEE1394" },
{ ND_PHY_WirelessWan, "Wireless WAN" },
{ ND_PHY_Native802_11, "Native802_11" },
{ ND_PHY_Bluetooth, "Bluetooth" },
{ ND_PHY_Infiniband, "Infiniband" },
{ ND_PHY_WiMax, "WiMax" },
{ ND_PHY_UWB, "UWB" },
{ ND_PHY_802_3, "802_3" },
{ ND_PHY_802_5, "802_5" },
{ ND_PHY_Irda, "Irda" },
{ ND_PHY_WiredWAN, "WiredWAN" },
{ ND_PHY_WiredCoWan, "WiredCoWan" },
{ 0, NULL }
};
static const struct tok adapter_flg[] = {
{ INFO_FLAG_NDIS_ADAPTER, "NDIS" },
{ INFO_FLAG_NDISWAN_ADAPTER, "NDIS-Wan" },
{ INFO_FLAG_DAG_CARD, "DAG adapter" },
{ INFO_FLAG_DAG_FILE, "DAG adapter" },
{ INFO_FLAG_DONT_EXPORT, "No export" },
{ INFO_FLAG_AIRPCAP_CARD, "AirPcap" },
{ INFO_FLAG_NPFIM_DEVICE, "NpfIm" },
{ 0, NULL }
};
pcap_t *pcap;
ADAPTER *adapter = open_adapter (device, &pcap);
int verbose = ndo->ndo_vflag;
if (!adapter || !pcap)
return;
printf(" Adapter Flag: %s\n", tok2str(adapter_flg, "%d?", adapter->Flags));
#if defined(HAVE_AIRPCAP_API)
if (adapter->Flags == INFO_FLAG_AIRPCAP_CARD)
{
AirpcapHandle *ap_hnd = PacketGetAirPcapHandle(adapter);
if (ap_hnd)
{
show_airpcap_details (ndo, ap_hnd);
if (verbose > 1)
supported_OID_list (NULL, ap_hnd->OsHandle);
}
}
else
#endif
{
int link_state = -1;
int media = -1;
const char *ver_info;
printf(" Phys media: ");
if (get_real_media(adapter,&media))
printf("%s\n", tok2str(phys_media, "%d?", media));
else
printf("<failed>\n");
printf(" Link state: ");
if (get_link_state(adapter,&link_state))
printf("%s\n", link_state == 0 ? "Up" : link_state == 1 ? "Down" : "Unknown");
else
printf("<failed>\n");
printf(" NDIS ver: ");
if (get_NDIS_driver_version(adapter,&ver_info))
printf("%s\n", ver_info);
else
printf("<failed>\n");
if (media == ND_PHY_Native802_11)
printf(" Monitor mode: %s\n", _set_monitor_mode(adapter) ? "Yes" : "No");
if (guid)
setup_info_print (" ", guid);
if (verbose > 1)
supported_OID_list (adapter, NULL);
}
pcap_close (pcap);
}
#define ADD_VAL(x) { x, #x }
static const struct tok oid_vals[] = {
ADD_VAL (OID_GEN_SUPPORTED_LIST),
ADD_VAL (OID_GEN_HARDWARE_STATUS),
ADD_VAL (OID_GEN_MEDIA_SUPPORTED),
ADD_VAL (OID_GEN_MEDIA_IN_USE),
ADD_VAL (OID_GEN_MAXIMUM_LOOKAHEAD),
ADD_VAL (OID_GEN_MAXIMUM_FRAME_SIZE),
ADD_VAL (OID_GEN_LINK_SPEED),
ADD_VAL (OID_GEN_TRANSMIT_BUFFER_SPACE),
ADD_VAL (OID_GEN_RECEIVE_BUFFER_SPACE),
ADD_VAL (OID_GEN_TRANSMIT_BLOCK_SIZE),
ADD_VAL (OID_GEN_RECEIVE_BLOCK_SIZE),
ADD_VAL (OID_GEN_VENDOR_ID),
ADD_VAL (OID_GEN_VENDOR_DESCRIPTION),
ADD_VAL (OID_GEN_CURRENT_PACKET_FILTER),
ADD_VAL (OID_GEN_CURRENT_LOOKAHEAD),
ADD_VAL (OID_GEN_DRIVER_VERSION),
ADD_VAL (OID_GEN_MAXIMUM_TOTAL_SIZE),
ADD_VAL (OID_GEN_PROTOCOL_OPTIONS),
ADD_VAL (OID_GEN_MAC_OPTIONS),
ADD_VAL (OID_GEN_MEDIA_CONNECT_STATUS),
ADD_VAL (OID_GEN_MAXIMUM_SEND_PACKETS),
ADD_VAL (OID_GEN_VENDOR_DRIVER_VERSION),
ADD_VAL (OID_GEN_XMIT_OK),
ADD_VAL (OID_GEN_RCV_OK),
ADD_VAL (OID_GEN_XMIT_ERROR),
ADD_VAL (OID_GEN_RCV_ERROR),
ADD_VAL (OID_GEN_RCV_NO_BUFFER),
ADD_VAL (OID_GEN_DIRECTED_BYTES_XMIT),
ADD_VAL (OID_GEN_DIRECTED_FRAMES_XMIT),
ADD_VAL (OID_GEN_MULTICAST_BYTES_XMIT),
ADD_VAL (OID_GEN_MULTICAST_FRAMES_XMIT),
ADD_VAL (OID_GEN_BROADCAST_BYTES_XMIT),
ADD_VAL (OID_GEN_BROADCAST_FRAMES_XMIT),
ADD_VAL (OID_GEN_DIRECTED_BYTES_RCV),
ADD_VAL (OID_GEN_DIRECTED_FRAMES_RCV),
ADD_VAL (OID_GEN_MULTICAST_BYTES_RCV),
ADD_VAL (OID_GEN_MULTICAST_FRAMES_RCV),
ADD_VAL (OID_GEN_BROADCAST_BYTES_RCV),
ADD_VAL (OID_GEN_BROADCAST_FRAMES_RCV),
ADD_VAL (OID_GEN_RCV_CRC_ERROR),
ADD_VAL (OID_GEN_TRANSMIT_QUEUE_LENGTH),
ADD_VAL (OID_GEN_GET_TIME_CAPS),
ADD_VAL (OID_GEN_GET_NETCARD_TIME),
ADD_VAL (OID_GEN_PHYSICAL_MEDIUM),
ADD_VAL (OID_GEN_VLAN_ID),
ADD_VAL (OID_GEN_MEDIA_CAPABILITIES),
ADD_VAL (OID_GEN_NETWORK_LAYER_ADDRESSES),
ADD_VAL (OID_GEN_TRANSPORT_HEADER_OFFSET),
ADD_VAL (OID_GEN_ISOLATION_PARAMETERS),
ADD_VAL (OID_GEN_SUPPORTED_GUIDS),
ADD_VAL (OID_GEN_NETWORK_LAYER_ADDRESSES),
ADD_VAL (OID_GEN_TRANSPORT_HEADER_OFFSET),
ADD_VAL (OID_GEN_MEDIA_CAPABILITIES),
ADD_VAL (OID_GEN_PHYSICAL_MEDIUM),
ADD_VAL (OID_GEN_RECEIVE_SCALE_CAPABILITIES),
ADD_VAL (OID_GEN_RECEIVE_SCALE_PARAMETERS),
ADD_VAL (OID_GEN_MAC_ADDRESS),
ADD_VAL (OID_GEN_MAX_LINK_SPEED),
ADD_VAL (OID_GEN_LINK_STATE),
ADD_VAL (OID_GEN_LINK_PARAMETERS),
ADD_VAL (OID_GEN_INTERRUPT_MODERATION),
ADD_VAL (OID_GEN_NDIS_RESERVED_1),
ADD_VAL (OID_GEN_NDIS_RESERVED_2),
ADD_VAL (OID_GEN_NDIS_RESERVED_3),
ADD_VAL (OID_GEN_NDIS_RESERVED_4),
ADD_VAL (OID_GEN_NDIS_RESERVED_5),
ADD_VAL (OID_GEN_NDIS_RESERVED_6),
ADD_VAL (OID_GEN_NDIS_RESERVED_7),
ADD_VAL (OID_GEN_ENUMERATE_PORTS),
ADD_VAL (OID_GEN_RESET_COUNTS),
ADD_VAL (OID_GEN_MEDIA_SENSE_COUNTS),
ADD_VAL (OID_GEN_FRIENDLY_NAME),
ADD_VAL (OID_GEN_PORT_STATE),
ADD_VAL (OID_GEN_PORT_AUTHENTICATION_PARAMETERS),
ADD_VAL (OID_GEN_TIMEOUT_DPC_REQUEST_CAPABILITIES),
ADD_VAL (OID_GEN_PCI_DEVICE_CUSTOM_PROPERTIES),
ADD_VAL (OID_GEN_PHYSICAL_MEDIUM_EX),
ADD_VAL (OID_GEN_MACHINE_NAME),
ADD_VAL (OID_GEN_RNDIS_CONFIG_PARAMETER),
ADD_VAL (OID_GEN_VLAN_ID),
ADD_VAL (OID_GEN_RECEIVE_HASH),
ADD_VAL (OID_GEN_MINIPORT_RESTART_ATTRIBUTES),
ADD_VAL (OID_GEN_HD_SPLIT_PARAMETERS),
ADD_VAL (OID_GEN_HD_SPLIT_CURRENT_CONFIG),
ADD_VAL (OID_GEN_PROMISCUOUS_MODE),
ADD_VAL (OID_GEN_LAST_CHANGE),
ADD_VAL (OID_GEN_DISCONTINUITY_TIME),
ADD_VAL (OID_GEN_OPERATIONAL_STATUS),
ADD_VAL (OID_GEN_XMIT_LINK_SPEED),
ADD_VAL (OID_GEN_RCV_LINK_SPEED),
ADD_VAL (OID_GEN_UNKNOWN_PROTOS),
ADD_VAL (OID_GEN_INTERFACE_INFO),
ADD_VAL (OID_GEN_ADMIN_STATUS),
ADD_VAL (OID_GEN_ALIAS),
ADD_VAL (OID_GEN_MEDIA_CONNECT_STATUS_EX),
ADD_VAL (OID_GEN_LINK_SPEED_EX),
ADD_VAL (OID_GEN_MEDIA_DUPLEX_STATE),
ADD_VAL (OID_GEN_IP_OPER_STATUS),
ADD_VAL (OID_GEN_INIT_TIME_MS),
ADD_VAL (OID_GEN_BYTES_RCV),
ADD_VAL (OID_GEN_BYTES_XMIT),
ADD_VAL (OID_GEN_RCV_DISCARDS),
ADD_VAL (OID_GEN_XMIT_DISCARDS),
ADD_VAL (OID_GEN_STATISTICS),
ADD_VAL (OID_TCP_RSC_STATISTICS),
ADD_VAL (OID_CO_ADD_PVC),
ADD_VAL (OID_CO_DELETE_PVC),
ADD_VAL (OID_CO_GET_CALL_INFORMATION),
ADD_VAL (OID_CO_ADD_ADDRESS),
ADD_VAL (OID_CO_DELETE_ADDRESS),
ADD_VAL (OID_CO_GET_ADDRESSES),
ADD_VAL (OID_CO_ADDRESS_CHANGE),
ADD_VAL (OID_CO_SIGNALING_ENABLED),
ADD_VAL (OID_CO_SIGNALING_DISABLED),
ADD_VAL (OID_CO_AF_CLOSE),
ADD_VAL (OID_CO_TAPI_CM_CAPS),
ADD_VAL (OID_CO_TAPI_LINE_CAPS),
ADD_VAL (OID_CO_TAPI_ADDRESS_CAPS),
ADD_VAL (OID_CO_TAPI_TRANSLATE_TAPI_CALLPARAMS),
ADD_VAL (OID_CO_TAPI_TRANSLATE_NDIS_CALLPARAMS),
ADD_VAL (OID_CO_TAPI_TRANSLATE_TAPI_SAP),
ADD_VAL (OID_CO_TAPI_GET_CALL_DIAGNOSTICS),
ADD_VAL (OID_CO_TAPI_REPORT_DIGITS),
ADD_VAL (OID_CO_TAPI_DONT_REPORT_DIGITS),
ADD_VAL (OID_802_3_PERMANENT_ADDRESS),
ADD_VAL (OID_802_3_CURRENT_ADDRESS),
ADD_VAL (OID_802_3_MAXIMUM_LIST_SIZE),
ADD_VAL (OID_802_3_MULTICAST_LIST),
ADD_VAL (OID_802_3_MAC_OPTIONS),
ADD_VAL (OID_802_3_RCV_ERROR_ALIGNMENT),
ADD_VAL (OID_802_3_XMIT_ONE_COLLISION),
ADD_VAL (OID_802_3_XMIT_MORE_COLLISIONS),
ADD_VAL (OID_802_3_XMIT_DEFERRED),
ADD_VAL (OID_802_3_XMIT_MAX_COLLISIONS),
ADD_VAL (OID_802_3_RCV_OVERRUN),
ADD_VAL (OID_802_3_XMIT_UNDERRUN),
ADD_VAL (OID_802_3_XMIT_HEARTBEAT_FAILURE),
ADD_VAL (OID_802_3_XMIT_TIMES_CRS_LOST),
ADD_VAL (OID_802_3_XMIT_LATE_COLLISIONS),
ADD_VAL (OID_802_3_ADD_MULTICAST_ADDRESS),
ADD_VAL (OID_802_3_DELETE_MULTICAST_ADDRESS),
ADD_VAL (OID_802_11_BSSID),
ADD_VAL (OID_802_11_SSID),
ADD_VAL (OID_802_11_NETWORK_TYPES_SUPPORTED),
ADD_VAL (OID_802_11_NETWORK_TYPE_IN_USE),
ADD_VAL (OID_802_11_TX_POWER_LEVEL),
ADD_VAL (OID_802_11_RSSI),
ADD_VAL (OID_802_11_RSSI_TRIGGER),
ADD_VAL (OID_802_11_INFRASTRUCTURE_MODE),
ADD_VAL (OID_802_11_FRAGMENTATION_THRESHOLD),
ADD_VAL (OID_802_11_RTS_THRESHOLD),
ADD_VAL (OID_802_11_NUMBER_OF_ANTENNAS),
ADD_VAL (OID_802_11_RX_ANTENNA_SELECTED),
ADD_VAL (OID_802_11_TX_ANTENNA_SELECTED),
ADD_VAL (OID_802_11_SUPPORTED_RATES),
ADD_VAL (OID_802_11_DESIRED_RATES),
ADD_VAL (OID_802_11_CONFIGURATION),
ADD_VAL (OID_802_11_STATISTICS),
ADD_VAL (OID_802_11_ADD_WEP),
ADD_VAL (OID_802_11_REMOVE_WEP),
ADD_VAL (OID_802_11_DISASSOCIATE),
ADD_VAL (OID_802_11_POWER_MODE),
ADD_VAL (OID_802_11_BSSID_LIST),
ADD_VAL (OID_802_11_AUTHENTICATION_MODE),
ADD_VAL (OID_802_11_PRIVACY_FILTER),
ADD_VAL (OID_802_11_BSSID_LIST_SCAN),
ADD_VAL (OID_802_11_WEP_STATUS),
ADD_VAL (OID_802_11_ENCRYPTION_STATUS),
ADD_VAL (OID_802_11_RELOAD_DEFAULTS),
ADD_VAL (OID_802_11_ADD_KEY),
ADD_VAL (OID_802_11_REMOVE_KEY),
ADD_VAL (OID_802_11_ASSOCIATION_INFORMATION),
ADD_VAL (OID_802_11_TEST),
ADD_VAL (OID_802_11_CAPABILITY),
ADD_VAL (OID_802_11_PMKID),
ADD_VAL (OID_802_5_PERMANENT_ADDRESS),
ADD_VAL (OID_802_5_CURRENT_ADDRESS),
ADD_VAL (OID_802_5_CURRENT_FUNCTIONAL),
ADD_VAL (OID_802_5_CURRENT_GROUP),
ADD_VAL (OID_802_5_LAST_OPEN_STATUS),
ADD_VAL (OID_802_5_CURRENT_RING_STATUS),
ADD_VAL (OID_802_5_CURRENT_RING_STATE),
ADD_VAL (OID_802_5_LINE_ERRORS),
ADD_VAL (OID_802_5_LOST_FRAMES),
ADD_VAL (OID_FDDI_LONG_PERMANENT_ADDR),
ADD_VAL (OID_FDDI_LONG_CURRENT_ADDR),
ADD_VAL (OID_FDDI_LONG_MULTICAST_LIST),
ADD_VAL (OID_FDDI_LONG_MAX_LIST_SIZE),
ADD_VAL (OID_FDDI_SHORT_PERMANENT_ADDR),
ADD_VAL (OID_FDDI_SHORT_CURRENT_ADDR),
ADD_VAL (OID_FDDI_SHORT_MULTICAST_LIST),
ADD_VAL (OID_FDDI_SHORT_MAX_LIST_SIZE),
ADD_VAL (OID_LTALK_CURRENT_NODE_ID),
ADD_VAL (OID_ARCNET_PERMANENT_ADDRESS),
ADD_VAL (OID_ARCNET_CURRENT_ADDRESS),
ADD_VAL (OID_TCP_TASK_OFFLOAD),
ADD_VAL (OID_TCP_OFFLOAD_CURRENT_CONFIG),
ADD_VAL (OID_TCP_OFFLOAD_PARAMETERS),
ADD_VAL (OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES),
ADD_VAL (OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG),
ADD_VAL (OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES),
ADD_VAL (OID_OFFLOAD_ENCAPSULATION),
ADD_VAL (OID_PNP_CAPABILITIES),
ADD_VAL (OID_PNP_SET_POWER),
ADD_VAL (OID_PNP_QUERY_POWER),
ADD_VAL (OID_PNP_ADD_WAKE_UP_PATTERN),
ADD_VAL (OID_PNP_REMOVE_WAKE_UP_PATTERN),
ADD_VAL (OID_PNP_WAKE_UP_PATTERN_LIST),
ADD_VAL (OID_PNP_ENABLE_WAKE_UP),
ADD_VAL (OID_PM_CURRENT_CAPABILITIES),
ADD_VAL (OID_PM_HARDWARE_CAPABILITIES),
ADD_VAL (OID_PM_PARAMETERS),
ADD_VAL (OID_PM_ADD_WOL_PATTERN),
ADD_VAL (OID_PM_REMOVE_WOL_PATTERN),
ADD_VAL (OID_PM_WOL_PATTERN_LIST),
ADD_VAL (OID_PM_ADD_PROTOCOL_OFFLOAD),
ADD_VAL (OID_PM_GET_PROTOCOL_OFFLOAD),
ADD_VAL (OID_PM_REMOVE_PROTOCOL_OFFLOAD),
ADD_VAL (OID_PM_PROTOCOL_OFFLOAD_LIST),
ADD_VAL (OID_PM_RESERVED_1),
ADD_VAL (OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES),
ADD_VAL (OID_RECEIVE_FILTER_GLOBAL_PARAMETERS),
ADD_VAL (OID_RECEIVE_FILTER_ALLOCATE_QUEUE),
ADD_VAL (OID_RECEIVE_FILTER_FREE_QUEUE),
ADD_VAL (OID_RECEIVE_FILTER_ENUM_QUEUES),
ADD_VAL (OID_RECEIVE_FILTER_QUEUE_PARAMETERS),
ADD_VAL (OID_RECEIVE_FILTER_SET_FILTER),
ADD_VAL (OID_RECEIVE_FILTER_CLEAR_FILTER),
ADD_VAL (OID_RECEIVE_FILTER_ENUM_FILTERS),
ADD_VAL (OID_RECEIVE_FILTER_PARAMETERS),
ADD_VAL (OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE),
ADD_VAL (OID_RECEIVE_FILTER_CURRENT_CAPABILITIES),
ADD_VAL (OID_NIC_SWITCH_HARDWARE_CAPABILITIES),
ADD_VAL (OID_NIC_SWITCH_CURRENT_CAPABILITIES),
ADD_VAL (OID_RECEIVE_FILTER_MOVE_FILTER),
ADD_VAL (OID_VLAN_RESERVED1),
ADD_VAL (OID_VLAN_RESERVED2),
ADD_VAL (OID_VLAN_RESERVED3),
ADD_VAL (OID_VLAN_RESERVED4),
ADD_VAL (OID_PACKET_COALESCING_FILTER_MATCH_COUNT),
ADD_VAL (OID_NIC_SWITCH_CREATE_SWITCH),
ADD_VAL (OID_NIC_SWITCH_PARAMETERS),
ADD_VAL (OID_NIC_SWITCH_DELETE_SWITCH),
ADD_VAL (OID_NIC_SWITCH_ENUM_SWITCHES),
ADD_VAL (OID_NIC_SWITCH_CREATE_VPORT),
ADD_VAL (OID_NIC_SWITCH_VPORT_PARAMETERS),
ADD_VAL (OID_NIC_SWITCH_ENUM_VPORTS),
ADD_VAL (OID_NIC_SWITCH_DELETE_VPORT),
ADD_VAL (OID_NIC_SWITCH_ALLOCATE_VF),
ADD_VAL (OID_NIC_SWITCH_FREE_VF),
ADD_VAL (OID_NIC_SWITCH_VF_PARAMETERS),
ADD_VAL (OID_NIC_SWITCH_ENUM_VFS),
ADD_VAL (OID_SRIOV_HARDWARE_CAPABILITIES),
ADD_VAL (OID_SRIOV_CURRENT_CAPABILITIES),
ADD_VAL (OID_SRIOV_READ_VF_CONFIG_SPACE),
ADD_VAL (OID_SRIOV_WRITE_VF_CONFIG_SPACE),
ADD_VAL (OID_SRIOV_READ_VF_CONFIG_BLOCK),
ADD_VAL (OID_SRIOV_WRITE_VF_CONFIG_BLOCK),
ADD_VAL (OID_SRIOV_RESET_VF),
ADD_VAL (OID_SRIOV_SET_VF_POWER_STATE),
ADD_VAL (OID_SRIOV_VF_VENDOR_DEVICE_ID),
ADD_VAL (OID_SRIOV_PROBED_BARS),
ADD_VAL (OID_SRIOV_BAR_RESOURCES),
ADD_VAL (OID_SRIOV_PF_LUID),
ADD_VAL (OID_SRIOV_CONFIG_STATE),
ADD_VAL (OID_SRIOV_VF_SERIAL_NUMBER),
ADD_VAL (OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK),
ADD_VAL (OID_SWITCH_PROPERTY_ADD),
ADD_VAL (OID_SWITCH_PROPERTY_UPDATE),
ADD_VAL (OID_SWITCH_PROPERTY_DELETE),
ADD_VAL (OID_SWITCH_PROPERTY_ENUM),
ADD_VAL (OID_SWITCH_FEATURE_STATUS_QUERY),
ADD_VAL (OID_SWITCH_NIC_REQUEST),
ADD_VAL (OID_SWITCH_PORT_PROPERTY_ADD),
ADD_VAL (OID_SWITCH_PORT_PROPERTY_UPDATE),
ADD_VAL (OID_SWITCH_PORT_PROPERTY_DELETE),
ADD_VAL (OID_SWITCH_PORT_PROPERTY_ENUM),
ADD_VAL (OID_SWITCH_PARAMETERS),
ADD_VAL (OID_SWITCH_PORT_ARRAY),
ADD_VAL (OID_SWITCH_NIC_ARRAY),
ADD_VAL (OID_SWITCH_PORT_CREATE),
ADD_VAL (OID_SWITCH_PORT_DELETE),
ADD_VAL (OID_SWITCH_NIC_CREATE),
ADD_VAL (OID_SWITCH_NIC_CONNECT),
ADD_VAL (OID_SWITCH_NIC_DISCONNECT),
ADD_VAL (OID_SWITCH_NIC_DELETE),
ADD_VAL (OID_SWITCH_PORT_FEATURE_STATUS_QUERY),
ADD_VAL (OID_SWITCH_PORT_TEARDOWN),
ADD_VAL (OID_SWITCH_NIC_SAVE),
ADD_VAL (OID_SWITCH_NIC_SAVE_COMPLETE),
ADD_VAL (OID_SWITCH_NIC_RESTORE),
ADD_VAL (OID_SWITCH_NIC_RESTORE_COMPLETE),
ADD_VAL (OID_SWITCH_NIC_UPDATED),
ADD_VAL (OID_SWITCH_PORT_UPDATED),
ADD_VAL (OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA),
ADD_VAL (OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA),
ADD_VAL (OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA),
ADD_VAL (OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA_EX),
ADD_VAL (OID_FFP_SUPPORT),
ADD_VAL (OID_FFP_FLUSH),
ADD_VAL (OID_FFP_CONTROL),
ADD_VAL (OID_FFP_PARAMS),
ADD_VAL (OID_FFP_DATA),
ADD_VAL (OID_FFP_DRIVER_STATS),
ADD_VAL (OID_FFP_ADAPTER_STATS),
ADD_VAL (OID_TCP_CONNECTION_OFFLOAD_PARAMETERS),
ADD_VAL (OID_TUNNEL_INTERFACE_SET_OID),
ADD_VAL (OID_TUNNEL_INTERFACE_RELEASE_OID),
ADD_VAL (OID_QOS_RESERVED1),
ADD_VAL (OID_QOS_RESERVED2),
ADD_VAL (OID_QOS_RESERVED3),
ADD_VAL (OID_QOS_RESERVED4),
ADD_VAL (OID_QOS_RESERVED5),
ADD_VAL (OID_QOS_RESERVED6),
ADD_VAL (OID_QOS_RESERVED7),
ADD_VAL (OID_QOS_RESERVED8),
ADD_VAL (OID_QOS_RESERVED9),
ADD_VAL (OID_QOS_RESERVED10),
ADD_VAL (OID_QOS_RESERVED11),
ADD_VAL (OID_QOS_RESERVED12),
ADD_VAL (OID_QOS_RESERVED13),
ADD_VAL (OID_QOS_RESERVED14),
ADD_VAL (OID_QOS_RESERVED15),
ADD_VAL (OID_QOS_RESERVED16),
ADD_VAL (OID_QOS_RESERVED17),
ADD_VAL (OID_QOS_RESERVED18),
ADD_VAL (OID_QOS_RESERVED19),
ADD_VAL (OID_QOS_RESERVED20),
ADD_VAL (OID_QOS_HARDWARE_CAPABILITIES),
ADD_VAL (OID_QOS_CURRENT_CAPABILITIES),
ADD_VAL (OID_QOS_PARAMETERS),
ADD_VAL (OID_QOS_OPERATIONAL_PARAMETERS),
ADD_VAL (OID_QOS_REMOTE_PARAMETERS),
ADD_VAL (OID_WWAN_DRIVER_CAPS),
ADD_VAL (OID_WWAN_DEVICE_CAPS),
ADD_VAL (OID_WWAN_READY_INFO),
ADD_VAL (OID_WWAN_RADIO_STATE),
ADD_VAL (OID_WWAN_PIN),
ADD_VAL (OID_WWAN_PIN_LIST),
ADD_VAL (OID_WWAN_HOME_PROVIDER),
ADD_VAL (OID_WWAN_PREFERRED_PROVIDERS),
ADD_VAL (OID_WWAN_VISIBLE_PROVIDERS),
ADD_VAL (OID_WWAN_REGISTER_STATE),
ADD_VAL (OID_WWAN_PACKET_SERVICE),
ADD_VAL (OID_WWAN_SIGNAL_STATE),
ADD_VAL (OID_WWAN_CONNECT),
ADD_VAL (OID_WWAN_PROVISIONED_CONTEXTS),
ADD_VAL (OID_WWAN_SERVICE_ACTIVATION),
ADD_VAL (OID_WWAN_SMS_CONFIGURATION),
ADD_VAL (OID_WWAN_SMS_READ),
ADD_VAL (OID_WWAN_SMS_SEND),
ADD_VAL (OID_WWAN_SMS_DELETE),
ADD_VAL (OID_WWAN_SMS_STATUS),
ADD_VAL (OID_WWAN_VENDOR_SPECIFIC),
ADD_VAL (OID_WWAN_AUTH_CHALLENGE),
ADD_VAL (OID_WWAN_ENUMERATE_DEVICE_SERVICES),
ADD_VAL (OID_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS),
ADD_VAL (OID_WWAN_DEVICE_SERVICE_COMMAND),
ADD_VAL (OID_WWAN_USSD),
ADD_VAL (OID_WWAN_PIN_EX),
ADD_VAL (OID_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS),
ADD_VAL (OID_WWAN_DEVICE_SERVICE_SESSION),
ADD_VAL (OID_WWAN_DEVICE_SERVICE_SESSION_WRITE),
ADD_VAL (OID_WWAN_PREFERRED_MULTICARRIER_PROVIDERS),
ADD_VAL (OID_WWAN_CREATE_MAC),
ADD_VAL (OID_WWAN_DELETE_MAC),
ADD_VAL (OID_DOT11_OFFLOAD_CAPABILITY),
ADD_VAL (OID_DOT11_CURRENT_OFFLOAD_CAPABILITY),
ADD_VAL (OID_DOT11_WEP_OFFLOAD),
ADD_VAL (OID_DOT11_WEP_UPLOAD),
ADD_VAL (OID_DOT11_DEFAULT_WEP_OFFLOAD),
ADD_VAL (OID_DOT11_DEFAULT_WEP_UPLOAD),
ADD_VAL (OID_DOT11_MPDU_MAX_LENGTH),
ADD_VAL (OID_DOT11_OPERATION_MODE_CAPABILITY),
ADD_VAL (OID_DOT11_CURRENT_OPERATION_MODE),
ADD_VAL (OID_DOT11_CURRENT_PACKET_FILTER),
ADD_VAL (OID_DOT11_ATIM_WINDOW),
ADD_VAL (OID_DOT11_SCAN_REQUEST),
ADD_VAL (OID_DOT11_CURRENT_PHY_TYPE),
ADD_VAL (OID_DOT11_JOIN_REQUEST),
ADD_VAL (OID_DOT11_START_REQUEST),
ADD_VAL (OID_DOT11_UPDATE_IE),
ADD_VAL (OID_DOT11_RESET_REQUEST),
ADD_VAL (OID_DOT11_NIC_POWER_STATE),
ADD_VAL (OID_DOT11_OPTIONAL_CAPABILITY),
ADD_VAL (OID_DOT11_CURRENT_OPTIONAL_CAPABILITY),
ADD_VAL (OID_DOT11_STATION_ID),
ADD_VAL (OID_DOT11_MEDIUM_OCCUPANCY_LIMIT),
ADD_VAL (OID_DOT11_CF_POLLABLE),
ADD_VAL (OID_DOT11_CFP_PERIOD),
ADD_VAL (OID_DOT11_CFP_MAX_DURATION),
ADD_VAL (OID_DOT11_POWER_MGMT_MODE),
ADD_VAL (OID_DOT11_OPERATIONAL_RATE_SET),
ADD_VAL (OID_DOT11_BEACON_PERIOD),
ADD_VAL (OID_DOT11_DTIM_PERIOD),
ADD_VAL (OID_DOT11_WEP_ICV_ERROR_COUNT),
ADD_VAL (OID_DOT11_MAC_ADDRESS),
ADD_VAL (OID_DOT11_RTS_THRESHOLD),
ADD_VAL (OID_DOT11_SHORT_RETRY_LIMIT),
ADD_VAL (OID_DOT11_LONG_RETRY_LIMIT),
ADD_VAL (OID_DOT11_FRAGMENTATION_THRESHOLD),
ADD_VAL (OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME),
ADD_VAL (OID_DOT11_MAX_RECEIVE_LIFETIME),
ADD_VAL (OID_DOT11_COUNTERS_ENTRY),
ADD_VAL (OID_DOT11_SUPPORTED_PHY_TYPES),
ADD_VAL (OID_DOT11_CURRENT_REG_DOMAIN),
ADD_VAL (OID_DOT11_TEMP_TYPE),
ADD_VAL (OID_DOT11_CURRENT_TX_ANTENNA),
ADD_VAL (OID_DOT11_DIVERSITY_SUPPORT),
ADD_VAL (OID_DOT11_CURRENT_RX_ANTENNA),
ADD_VAL (OID_DOT11_SUPPORTED_POWER_LEVELS),
ADD_VAL (OID_DOT11_CURRENT_TX_POWER_LEVEL),
ADD_VAL (OID_DOT11_HOP_TIME),
ADD_VAL (OID_DOT11_CURRENT_CHANNEL_NUMBER),
ADD_VAL (OID_DOT11_MAX_DWELL_TIME),
ADD_VAL (OID_DOT11_CURRENT_DWELL_TIME),
ADD_VAL (OID_DOT11_CURRENT_SET),
ADD_VAL (OID_DOT11_CURRENT_PATTERN),
ADD_VAL (OID_DOT11_CURRENT_INDEX),
ADD_VAL (OID_DOT11_CURRENT_CHANNEL),
ADD_VAL (OID_DOT11_CCA_MODE_SUPPORTED),
ADD_VAL (OID_DOT11_CURRENT_CCA_MODE),
ADD_VAL (OID_DOT11_ED_THRESHOLD),
ADD_VAL (OID_DOT11_CCA_WATCHDOG_TIMER_MAX),
ADD_VAL (OID_DOT11_CCA_WATCHDOG_COUNT_MAX),
ADD_VAL (OID_DOT11_CCA_WATCHDOG_TIMER_MIN),
ADD_VAL (OID_DOT11_CCA_WATCHDOG_COUNT_MIN),
ADD_VAL (OID_DOT11_REG_DOMAINS_SUPPORT_VALUE),
ADD_VAL (OID_DOT11_SUPPORTED_TX_ANTENNA),
ADD_VAL (OID_DOT11_SUPPORTED_RX_ANTENNA),
ADD_VAL (OID_DOT11_DIVERSITY_SELECTION_RX),
ADD_VAL (OID_DOT11_SUPPORTED_DATA_RATES_VALUE),
ADD_VAL (OID_DOT11_CURRENT_FREQUENCY),
ADD_VAL (OID_DOT11_TI_THRESHOLD),
ADD_VAL (OID_DOT11_FREQUENCY_BANDS_SUPPORTED),
ADD_VAL (OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED),
ADD_VAL (OID_DOT11_PBCC_OPTION_IMPLEMENTED),
ADD_VAL (OID_DOT11_CHANNEL_AGILITY_PRESENT),
ADD_VAL (OID_DOT11_CHANNEL_AGILITY_ENABLED),
ADD_VAL (OID_DOT11_HR_CCA_MODE_SUPPORTED),
ADD_VAL (OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED),
ADD_VAL (OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED),
ADD_VAL (OID_DOT11_COUNTRY_STRING),
ADD_VAL (OID_DOT11_MULTI_DOMAIN_CAPABILITY),
ADD_VAL (OID_DOT11_EHCC_PRIME_RADIX),
ADD_VAL (OID_DOT11_EHCC_NUMBER_OF_CHANNELS_FAMILY_INDEX),
ADD_VAL (OID_DOT11_EHCC_CAPABILITY_IMPLEMENTED),
ADD_VAL (OID_DOT11_EHCC_CAPABILITY_ENABLED),
ADD_VAL (OID_DOT11_HOP_ALGORITHM_ADOPTED),
ADD_VAL (OID_DOT11_RANDOM_TABLE_FLAG),
ADD_VAL (OID_DOT11_NUMBER_OF_HOPPING_SETS),
ADD_VAL (OID_DOT11_HOP_MODULUS),
ADD_VAL (OID_DOT11_HOP_OFFSET),
ADD_VAL (OID_DOT11_HOPPING_PATTERN),
ADD_VAL (OID_DOT11_RANDOM_TABLE_FIELD_NUMBER),
ADD_VAL (OID_DOT11_WPA_TSC),
ADD_VAL (OID_DOT11_RSSI_RANGE),
ADD_VAL (OID_DOT11_RF_USAGE),
ADD_VAL (OID_DOT11_NIC_SPECIFIC_EXTENSION),
ADD_VAL (OID_DOT11_AP_JOIN_REQUEST),
ADD_VAL (OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED),
ADD_VAL (OID_DOT11_ERP_PBCC_OPTION_ENABLED),
ADD_VAL (OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED),
ADD_VAL (OID_DOT11_DSSS_OFDM_OPTION_ENABLED),
ADD_VAL (OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED),
ADD_VAL (OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED),
ADD_VAL (OID_DOT11_MAX_MAC_ADDRESS_STATES),
ADD_VAL (OID_DOT11_RECV_SENSITIVITY_LIST),
ADD_VAL (OID_DOT11_WME_IMPLEMENTED),
ADD_VAL (OID_DOT11_WME_ENABLED),
ADD_VAL (OID_DOT11_WME_AC_PARAMETERS),
ADD_VAL (OID_DOT11_WME_UPDATE_IE),
ADD_VAL (OID_DOT11_QOS_TX_QUEUES_SUPPORTED),
ADD_VAL (OID_DOT11_QOS_TX_DURATION),
ADD_VAL (OID_DOT11_QOS_TX_MEDIUM_TIME),
ADD_VAL (OID_DOT11_SUPPORTED_OFDM_FREQUENCY_LIST),
ADD_VAL (OID_DOT11_SUPPORTED_DSSS_CHANNEL_LIST),
ADD_VAL (OID_DOT11_AUTO_CONFIG_ENABLED),
ADD_VAL (OID_DOT11_ENUM_BSS_LIST),
ADD_VAL (OID_DOT11_FLUSH_BSS_LIST),
ADD_VAL (OID_DOT11_POWER_MGMT_REQUEST),
ADD_VAL (OID_DOT11_DESIRED_SSID_LIST),
ADD_VAL (OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST),
ADD_VAL (OID_DOT11_DESIRED_BSSID_LIST),
ADD_VAL (OID_DOT11_DESIRED_BSS_TYPE),
ADD_VAL (OID_DOT11_PMKID_LIST),
ADD_VAL (OID_DOT11_CONNECT_REQUEST),
ADD_VAL (OID_DOT11_EXCLUDE_UNENCRYPTED),
ADD_VAL (OID_DOT11_STATISTICS),
ADD_VAL (OID_DOT11_PRIVACY_EXEMPTION_LIST),
ADD_VAL (OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM),
ADD_VAL (OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR),
ADD_VAL (OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM),
ADD_VAL (OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR),
ADD_VAL (OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM),
ADD_VAL (OID_DOT11_CIPHER_DEFAULT_KEY_ID),
ADD_VAL (OID_DOT11_CIPHER_DEFAULT_KEY),
ADD_VAL (OID_DOT11_CIPHER_KEY_MAPPING_KEY),
ADD_VAL (OID_DOT11_ENUM_ASSOCIATION_INFO),
ADD_VAL (OID_DOT11_DISCONNECT_REQUEST),
ADD_VAL (OID_DOT11_UNICAST_USE_GROUP_ENABLED),
ADD_VAL (OID_DOT11_HARDWARE_PHY_STATE),
ADD_VAL (OID_DOT11_DESIRED_PHY_LIST),
ADD_VAL (OID_DOT11_CURRENT_PHY_ID),
ADD_VAL (OID_DOT11_MEDIA_STREAMING_ENABLED),
ADD_VAL (OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD),
ADD_VAL (OID_DOT11_ACTIVE_PHY_LIST),
ADD_VAL (OID_DOT11_EXTSTA_CAPABILITY),
ADD_VAL (OID_DOT11_DATA_RATE_MAPPING_TABLE),
ADD_VAL (OID_DOT11_SUPPORTED_COUNTRY_OR_REGION_STRING),
ADD_VAL (OID_DOT11_DESIRED_COUNTRY_OR_REGION_STRING),
ADD_VAL (OID_DOT11_PORT_STATE_NOTIFICATION),
ADD_VAL (OID_DOT11_IBSS_PARAMS),
ADD_VAL (OID_DOT11_QOS_PARAMS),
ADD_VAL (OID_DOT11_SAFE_MODE_ENABLED),
ADD_VAL (OID_DOT11_HIDDEN_NETWORK_ENABLED),
ADD_VAL (OID_DOT11_ASSOCIATION_PARAMS),
ADD_VAL (OID_DOT11_SAFE_MODE_HT_ENABLED),
ADD_VAL (OID_DOT11_PRIVATE_OIDS_START),
ADD_VAL (OID_DOT11_CURRENT_ADDRESS),
ADD_VAL (OID_DOT11_PERMANENT_ADDRESS),
ADD_VAL (OID_DOT11_MULTICAST_LIST),
ADD_VAL (OID_DOT11_MAXIMUM_LIST_SIZE),
ADD_VAL (OID_DOT11_WPS_ENABLED),
ADD_VAL (OID_DOT11_START_AP_REQUEST),
ADD_VAL (OID_DOT11_AVAILABLE_CHANNEL_LIST),
ADD_VAL (OID_DOT11_AVAILABLE_FREQUENCY_LIST),
ADD_VAL (OID_DOT11_DISASSOCIATE_PEER_REQUEST),
ADD_VAL (OID_DOT11_INCOMING_ASSOCIATION_DECISION),
ADD_VAL (OID_DOT11_ADDITIONAL_IE),
ADD_VAL (OID_DOT11_ENUM_PEER_INFO),
ADD_VAL (OID_DOT11_CREATE_MAC),
ADD_VAL (OID_DOT11_DELETE_MAC),
ADD_VAL (OID_DOT11_PREFERRED_MAC),
ADD_VAL (OID_DOT11_VIRTUAL_STATION_CAPABILITY),
ADD_VAL (OID_DOT11_WFD_DEVICE_CAPABILITY),
ADD_VAL (OID_DOT11_WFD_GROUP_OWNER_CAPABILITY),
ADD_VAL (OID_DOT11_WFD_DEVICE_INFO),
ADD_VAL (OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST),
ADD_VAL (OID_DOT11_WFD_DISCOVER_REQUEST),
ADD_VAL (OID_DOT11_WFD_ENUM_DEVICE_LIST),
ADD_VAL (OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY),
ADD_VAL (OID_DOT11_WFD_ADDITIONAL_IE),
ADD_VAL (OID_DOT11_WFD_FLUSH_DEVICE_LIST),
ADD_VAL (OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST),
ADD_VAL (OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE),
ADD_VAL (OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION),
ADD_VAL (OID_DOT11_WFD_SEND_INVITATION_REQUEST),
ADD_VAL (OID_DOT11_WFD_SEND_INVITATION_RESPONSE),
ADD_VAL (OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST),
ADD_VAL (OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE),
ADD_VAL (OID_DOT11_WFD_GET_DIALOG_TOKEN),
ADD_VAL (OID_DOT11_WFD_STOP_DISCOVERY),
ADD_VAL (OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL),
ADD_VAL (OID_DOT11_WFD_DESIRED_GROUP_ID),
ADD_VAL (OID_DOT11_WFD_START_GO_REQUEST),
ADD_VAL (OID_DOT11_WFD_GROUP_START_PARAMETERS),
ADD_VAL (OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST),
ADD_VAL (OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST),
ADD_VAL (OID_DOT11_WFD_GROUP_JOIN_PARAMETERS),
ADD_VAL (OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED),
ADD_VAL (OID_DOT11_POWER_MGMT_MODE_STATUS),
ADD_VAL (OID_DOT11_OFFLOAD_NETWORK_LIST),
ADD_VAL (OID_DOT11_MANUFACTURING_TEST),
ADD_VAL (OID_ATH_XMIT_FILTERED),
ADD_VAL (OID_ATH_XMIT_RETRIES),
ADD_VAL (OID_ATH_XMIT_EXCESSIVE_RETRIES),
ADD_VAL (OID_ATH_XMIT_ACK_RSSI),
ADD_VAL (OID_ATH_XMIT_HW_ACKS_MISSING),
ADD_VAL (OID_ATH_XMIT_RTS_ERRORS),
ADD_VAL (OID_ATH_XMIT_REQUESTS),
ADD_VAL (OID_ATH_XMIT_REQUESTS_DENIED),
ADD_VAL (OID_ATH_XMIT_FIFO_UNDERRUNS),
ADD_VAL (OID_ATH_XMIT_DATA_RATE),
ADD_VAL (OID_ATH_RCV_RSSI),
ADD_VAL (OID_ATH_RCV_SW_FCS_ERRORS),
ADD_VAL (OID_ATH_RCV_HW_FCS_ERRORS),
ADD_VAL (OID_ATH_RCV_DECRYPT_ERRORS),
ADD_VAL (OID_ATH_RCV_DUPLICATES),
ADD_VAL (OID_ATH_RCV_MULTIPLE_DUPLICATES),
ADD_VAL (OID_ATH_RCV_FIFO_OVERRUNS),
ADD_VAL (OID_ATH_RCV_DATA_RATE),
ADD_VAL (OID_ATH_RCV_MULTICAST_FRAMES),
ADD_VAL (OID_ATH_CURRENT_CHANNEL),
ADD_VAL (OID_ATH_TURBO_MODE),
ADD_VAL (OID_ATH_NOISE_FLOOR),
{ 0, NULL }
};
static int compare_oid (const void *a, const void *b)
{
DWORD _a = *(const DWORD*) a;
DWORD _b = *(const DWORD*) b;
if (_a < _b)
return (-1);
if (_a > _b)
return (1);
return (0);
}
static unsigned supported_OID_list_length (ADAPTER *adapter, HANDLE air_hnd)
{
struct {
PACKET_OID_DATA oidData;
DWORD values [1];
} oid;
BOOL rc;
memset(&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_SUPPORTED_LIST;
oid.oidData.Length = sizeof(oid);
if (air_hnd)
rc = DeviceIoControl(air_hnd, oid.oidData.Oid, NULL, 0, NULL, 0, &oid.oidData.Length, NULL);
else rc = PacketRequest(adapter, FALSE, &oid.oidData);
WINDUMP_TRACE (1, "rc: %d, oid.oidData.Length: %lu, GetLastError(): %lu\n", rc, oid.oidData.Length, GetLastError());
return (oid.oidData.Length);
}
static void supported_OID_list (ADAPTER *adapter, HANDLE air_hnd)
{
struct {
PACKET_OID_DATA oidData;
DWORD values [1000];
} oid;
unsigned num = 0, num_unknowns = 0, num_dups = 0;
//unsigned len = supported_OID_list_length (adapter, air_hnd);
BOOL rc;
puts(" Available OIDs for this adapter:");
memset(&oid, 0, sizeof(oid));
oid.oidData.Oid = OID_GEN_SUPPORTED_LIST;
oid.oidData.Length = sizeof(oid);
if (air_hnd)
rc = (DeviceIoControl(air_hnd, oid.oidData.Oid, NULL, 0, NULL, 0, &oid.oidData.Length, NULL) == TRUE);
else rc = (PacketRequest(adapter, FALSE, &oid.oidData) == TRUE);
if (rc) {
DWORD *values = (DWORD*)&oid.oidData.Data;
DWORD len = oid.oidData.Length;
DWORD prev = 0;
qsort (values, len/sizeof(*values), sizeof(*values), compare_oid);
while (len >= sizeof(*values))
{
DWORD val = *values++;
if (prev == val)
num_dups++;
else
{
const char *oid_str = tok2str (oid_vals, "Unknown OID", val);
if (!strncmp(oid_str,"Unknown",7))
num_unknowns++;
printf (" 0x%08lX %s\n", val, oid_str);
}
len -= sizeof(*values);
num++;
prev = val;
}
}
if (num == 0)
printf (" %s\n", NONE_STR);
else printf (" %u OIDs (%u unknown, %u duplicates).\n", num, num_unknowns, num_dups);
}
static HANDLE stdout_hnd = INVALID_HANDLE_VALUE;
static BOOL stdout_redirected = FALSE;
static BOOL start_802_11_body = FALSE;
static CONSOLE_SCREEN_BUFFER_INFO console_info;
static void windump_color_init (void)
{
stdout_hnd = GetStdHandle (STD_OUTPUT_HANDLE);
stdout_redirected = (stdout_hnd == INVALID_HANDLE_VALUE) ||
(!GetConsoleScreenBufferInfo(stdout_hnd, &console_info)) ||
(GetFileType(stdout_hnd) != FILE_TYPE_CHAR);
WINDUMP_TRACE (2, "stdout_redirected: %d.\n", stdout_redirected);
}
/*
* todo: make this into a table (configurable from a .cfg-file?)
*/
int windump_lookup_color (const char *func)
{
if (func == NULL) /* The color of the WINDUMP_TRACE() itself */
return (FOREGROUND_INTENSITY + 7); /* Bright white */
if (!strcmp(func,"ether_hdr_print"))
return (FOREGROUND_INTENSITY + 3);
if (!strcmp(func,"txtproto_print")) /* this includes http_print() */
return (FOREGROUND_INTENSITY | FOREGROUND_RED);
if (!strcmp(func,"http_print")) /* How to check if called from http_print() only? */
return (FOREGROUND_INTENSITY | FOREGROUND_RED); /* Bright red */
if (!strcmp(func,"ts_print"))
return (FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED); /* Yellow */
if (!strcmp(func,"show_devices_and_exit"))
return (FOREGROUND_INTENSITY | FOREGROUND_RED); /* Bright red */
if (!strcmp(func,"show_network_addresses"))
return (FOREGROUND_INTENSITY + 3); /* Bright cyan */
if (!strcmp(func,"ip_print"))
return (FOREGROUND_INTENSITY + 3); /* Bright cyan */
if (!strcmp(func,"ns_rprint") || !strcmp(func,"ns_qprint"))
return (FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED); /* Yellow */
if (!strcmp(func,"syslog_print"))
return (FOREGROUND_INTENSITY + 5); /* Bright magenta */
/* Handle top-level 802.11 printers (except T_DATA).
* There are lots going on in these functions. So we need to ensure not all ND_PRINT()
* macros in there use the same colours (would defeat the purpose of colours).
*/
if (!start_802_11_body &&
(!strcmp(func,"ctrl_body_print") ||
!strcmp(func,"mgmt_body_print")))
{
start_802_11_body = TRUE;
return (FOREGROUND_INTENSITY + 5); /* Bright magenta */
}
return (0);
}
int windump_set_color (int color)
{
if (color && stdout_hnd != INVALID_HANDLE_VALUE)
{
fflush (stdout);
SetConsoleTextAttribute (stdout_hnd, (console_info.wAttributes & ~7) | color);
}
return (color);
}
void windump_restore_color (int color)
{
if (color && stdout_hnd != INVALID_HANDLE_VALUE)
{
fflush (stdout);
SetConsoleTextAttribute (stdout_hnd, console_info.wAttributes);
start_802_11_body = FALSE;
}
}
int vcprintf (const struct netdissect_options *ndo, const char *fmt, va_list args)
{
int ret, color = 0;
static int init = 0;
if (!init)
{
windump_color_init();
init = 1;
}
if (!stdout_redirected && ndo)
{
color = windump_lookup_color (ndo->printf_func);
windump_set_color (color);
}
ret = vfprintf (stdout, fmt, args);
windump_restore_color (color);
return (ret);
}
int windump_trace_init (void)
{
static int trace_level = -1;
const char *env;
if (trace_level == -1)
{
env = getenv("WINDUMP_TRACE");
if (env)
trace_level = *env - '0';
else trace_level = 0;
windump_color_init();
}
return (trace_level);
}
/*
* If using the IpHlpApi information, use the more sensible description in
* 'iface->Description' (the wpcap description is often just "Microsoft").
* Otherwise print the 'dev->description'.
*
* Also strip trailing newlines and right aligned text in description;
* text separated by TABs or >= 2 spaces.
*/
static void
show_description (netdissect_options *ndo, const IP_ADAPTER_ADDRESSES *iface, pcap_if_t *dev)
{
char descr[256], *p;
if (iface)
strlcpy (descr, wstring_utf8(iface->Description), sizeof(descr));
else if (!dev->description)
strcpy (descr, "None");
else
strlcpy (descr, dev->description, sizeof(descr));
if ((p = strrchr(descr,'\r')) != NULL)
*p = '\0';
if ((p = strrchr(descr,'\n')) != NULL)
*p = '\0';
if ((p = strchr(descr,'\t')) != NULL)
*p = '\0';
if ((p = strstr(descr," ")) != NULL)
*p = '\0';
printf (" Description: %s\n", descr);
}
#ifndef win32_stuff_h
#define win32_stuff_h
#if !defined(netdissect_h) || !defined(netdissect_stdinc_h)
#error "I must be included after netdissect.h and netdissect-stdinc.h."
#endif
#if !defined(_WIN32)
#error "This file is for _WIN32 only."
#endif
typedef struct netdissect_options netdissect_options;
void show_printers (netdissect_options *ndo);
void show_iface_details (netdissect_options *ndo, pcap_if_t *dev);
BOOL set_monitor_mode (pcap_t *pcap);
void get_version_extras (void);
#if defined(HAVE_AIRPCAP_API)
int airpcap_capture_all (pcap_t *pcap, int all, char *ebuf);
int airpcap_channel_set (pcap_t *pcap, int ch, int *orig, char *ebuf);
#endif
int vcprintf (const struct netdissect_options *ndo, const char *fmt, va_list args);
int windump_set_color (int color);
void windump_restore_color (int color);
int windump_lookup_color (const char *func);
int windump_trace_init (void);
/*
* To detect wrong usage such as:
* WINDUMP_TRACE ("foo: %d, bar: %s\n", some_integer, some_string);
*
* where the compiler would without reservation interpret
* "foo: %d, bar: %s\n" as 'level' since '__VA_ARGS_' is used below.
*/
#define CHECK_LEVEL(level) do { \
if ((int)(level) < 0 || (int)(level) > 9) \
printf ("Illegal use of 'level' in " \
"'WINDUMP_TRACE()' macro at %s(%u): ", \
__FILE__, __LINE__); \
} while (0)
#define WINDUMP_TRACE(level, fmt, ...) \
do { \
CHECK_LEVEL (level); \
if (windump_trace_init() >= level) { \
int col = windump_set_color ( \
windump_lookup_color(NULL) ); \
printf ("%s(%u): ", __FILE__, __LINE__); \
printf (fmt, ##__VA_ARGS__); \
windump_restore_color (col); \
} \
} while (0)
#endif /* win32_stuff_h */
@gvanem
Copy link
Author

gvanem commented Sep 10, 2018

Late reply. You can add something like this to pcap-npf.c:

ADAPTER *pcap_get_adapter (pcap_t *p)
{
  struct pcap_win *pw;

  if (!p)
     return (NULL);

  pw = p->priv;
  return (pw ? pw->adapter : NULL);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment