mirror of https://github.com/UMSKT/xpmgr.git
386 lines
12 KiB
C
386 lines
12 KiB
C
/*++
|
|
|
|
Copyright (c) 2000-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ifdef.h
|
|
|
|
Abstract:
|
|
|
|
This module contains IF_* definitions.
|
|
|
|
Author:
|
|
|
|
|
|
Environment:
|
|
|
|
user mode or kernel mode
|
|
|
|
--*/
|
|
|
|
#ifndef _IFDEF_
|
|
#define _IFDEF_
|
|
#pragma once
|
|
|
|
|
|
typedef ULONG32 NET_IF_OBJECT_ID, *PNET_IF_OBJECT_ID;
|
|
|
|
|
|
typedef enum _NET_IF_ADMIN_STATUS // ifAdminStatus
|
|
{
|
|
NET_IF_ADMIN_STATUS_UP = 1,
|
|
NET_IF_ADMIN_STATUS_DOWN = 2,
|
|
NET_IF_ADMIN_STATUS_TESTING = 3
|
|
} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
|
|
|
|
typedef enum _NET_IF_OPER_STATUS // ifOperStatus
|
|
{
|
|
NET_IF_OPER_STATUS_UP = 1,
|
|
NET_IF_OPER_STATUS_DOWN = 2,
|
|
NET_IF_OPER_STATUS_TESTING = 3,
|
|
NET_IF_OPER_STATUS_UNKNOWN = 4,
|
|
NET_IF_OPER_STATUS_DORMANT = 5,
|
|
NET_IF_OPER_STATUS_NOT_PRESENT = 6,
|
|
NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7
|
|
} NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;
|
|
|
|
//
|
|
// Flags to extend operational status
|
|
//
|
|
#define NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED 0x00000001
|
|
#define NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED 0x00000002
|
|
#define NET_IF_OPER_STATUS_DORMANT_PAUSED 0x00000004
|
|
#define NET_IF_OPER_STATUS_DORMANT_LOW_POWER 0x00000008
|
|
|
|
|
|
typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;
|
|
|
|
//
|
|
// Define compartment ID type:
|
|
//
|
|
#define NET_IF_COMPARTMENT_ID_UNSPECIFIED (NET_IF_COMPARTMENT_ID)0
|
|
#define NET_IF_COMPARTMENT_ID_PRIMARY (NET_IF_COMPARTMENT_ID)1
|
|
|
|
#define NET_IF_OID_IF_ALIAS 0x00000001 // identifies the ifAlias string for an interface
|
|
#define NET_IF_OID_COMPARTMENT_ID 0x00000002 // identifies the compartment ID for an interface.
|
|
#define NET_IF_OID_NETWORK_GUID 0x00000003 // identifies the NetworkGuid for an interface.
|
|
#define NET_IF_OID_IF_ENTRY 0x00000004 // identifies statistics for an interface.
|
|
|
|
//
|
|
// Define NetworkGUID type:
|
|
//
|
|
typedef GUID NET_IF_NETWORK_GUID, *PNET_IF_NETWORK_GUID;
|
|
|
|
//
|
|
// Define macros for an "unspecified" NetworkGUID value to be used in structures
|
|
// that haven't had the NET_LUID field filled in yet.
|
|
//
|
|
#define NET_SET_UNSPECIFIED_NETWORK_GUID(_pNetworkGuid)
|
|
#define NET_IS_UNSPECIFIED_NETWORK_GUID(_NetworkGuidValue)
|
|
|
|
//
|
|
// To prevent collisions between user-assigned and system-assigend site-ids,
|
|
// we partition the site-id space into two:
|
|
// 1. User-Assigned: NET_SITEID_UNSPECIFIED < SiteId < NET_SITEID_MAXUSER
|
|
// 2. System-Assigned: NET_SITEID_MAXUSER < SiteId < NET_SITEID_MAXSYSTEM
|
|
//
|
|
// Note: A network's SiteId doesn't really need to be settable.
|
|
// 1. The network profile manager creates a network per network profile.
|
|
// 2. NDIS/IF assigns a unique SiteId to each network.
|
|
//
|
|
#define NET_SITEID_UNSPECIFIED (0)
|
|
#define NET_SITEID_MAXUSER (0x07ffffff)
|
|
#define NET_SITEID_MAXSYSTEM (0x0fffffff)
|
|
C_ASSERT(NET_SITEID_MAXUSER < NET_SITEID_MAXSYSTEM);
|
|
|
|
typedef enum _NET_IF_RCV_ADDRESS_TYPE // ifRcvAddressType
|
|
{
|
|
NET_IF_RCV_ADDRESS_TYPE_OTHER = 1,
|
|
NET_IF_RCV_ADDRESS_TYPE_VOLATILE = 2,
|
|
NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3
|
|
} NET_IF_RCV_ADDRESS_TYPE, *PNET_IF_RCV_ADDRESS_TYPE;
|
|
|
|
typedef struct _NET_IF_RCV_ADDRESS_LH
|
|
{
|
|
NET_IF_RCV_ADDRESS_TYPE ifRcvAddressType;
|
|
USHORT ifRcvAddressLength;
|
|
USHORT ifRcvAddressOffset; // from beginning of this struct
|
|
} NET_IF_RCV_ADDRESS_LH, *PNET_IF_RCV_ADDRESS_LH;
|
|
|
|
typedef struct _NET_IF_ALIAS_LH
|
|
{
|
|
USHORT ifAliasLength; // in bytes, of ifAlias string
|
|
USHORT ifAliasOffset; // in bytes, from beginning of this struct
|
|
} NET_IF_ALIAS_LH, *PNET_IF_ALIAS_LH;
|
|
|
|
#pragma warning(push)
|
|
#pragma warning(disable:4214) // bit field types other than int
|
|
typedef union _NET_LUID_LH
|
|
{
|
|
ULONG64 Value;
|
|
struct
|
|
{
|
|
ULONG64 Reserved:24;
|
|
ULONG64 NetLuidIndex:24;
|
|
ULONG64 IfType:16; // equal to IANA IF type
|
|
}Info;
|
|
} NET_LUID_LH, *PNET_LUID_LH;
|
|
#pragma warning(pop)
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
typedef NET_IF_RCV_ADDRESS_LH NET_IF_RCV_ADDRESS;
|
|
typedef NET_IF_RCV_ADDRESS* PNET_IF_RCV_ADDRESS;
|
|
|
|
typedef NET_IF_ALIAS_LH NET_IF_ALIAS;
|
|
typedef NET_IF_ALIAS* PNET_IF_ALIAS;
|
|
#endif //NTDDI_VISTA
|
|
|
|
//
|
|
// Need to make this visible on all platforms (for the purpose of IF_LUID).
|
|
//
|
|
typedef NET_LUID_LH NET_LUID;
|
|
typedef NET_LUID* PNET_LUID;
|
|
|
|
//
|
|
// IF_LUID
|
|
//
|
|
// Define the locally unique datalink interface identifier type.
|
|
// This type is persistable.
|
|
//
|
|
typedef NET_LUID IF_LUID, *PIF_LUID;
|
|
|
|
typedef ULONG NET_IFINDEX, *PNET_IFINDEX; // Interface Index (ifIndex)
|
|
typedef UINT16 NET_IFTYPE, *PNET_IFTYPE; // Interface Type (IANA ifType)
|
|
|
|
#define NET_IFINDEX_UNSPECIFIED (NET_IFINDEX)(0) // Not a valid ifIndex
|
|
#define NET_IFLUID_UNSPECIFIED (0) // Not a valid if Luid
|
|
|
|
//
|
|
// Definitions for NET_IF_INFORMATION.Flags
|
|
//
|
|
#define NIIF_HARDWARE_INTERFACE 0x00000001 // Set iff hardware
|
|
#define NIIF_FILTER_INTERFACE 0x00000002
|
|
#define NIIF_NDIS_RESERVED1 0x00000004
|
|
#define NIIF_NDIS_RESERVED2 0x00000008
|
|
#define NIIF_NDIS_RESERVED3 0x00000010
|
|
#define NIIF_NDIS_WDM_INTERFACE 0x00000020
|
|
#define NIIF_NDIS_ENDPOINT_INTERFACE 0x00000040
|
|
#define NIIF_NDIS_ISCSI_INTERFACE 0x00000080
|
|
|
|
#define NIIF_WAN_TUNNEL_TYPE_UNKNOWN ((ULONG)(-1))
|
|
|
|
//
|
|
// Define datalink interface access types.
|
|
//
|
|
typedef enum _NET_IF_ACCESS_TYPE
|
|
{
|
|
NET_IF_ACCESS_LOOPBACK = 1,
|
|
NET_IF_ACCESS_BROADCAST = 2,
|
|
NET_IF_ACCESS_POINT_TO_POINT = 3,
|
|
NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4,
|
|
NET_IF_ACCESS_MAXIMUM = 5
|
|
} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
|
|
|
|
|
|
//
|
|
// Define datalink interface direction types.
|
|
//
|
|
typedef enum _NET_IF_DIRECTION_TYPE
|
|
{
|
|
NET_IF_DIRECTION_SENDRECEIVE,
|
|
NET_IF_DIRECTION_SENDONLY,
|
|
NET_IF_DIRECTION_RECEIVEONLY,
|
|
NET_IF_DIRECTION_MAXIMUM
|
|
} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
|
|
|
|
|
|
typedef enum _NET_IF_CONNECTION_TYPE
|
|
{
|
|
NET_IF_CONNECTION_DEDICATED = 1,
|
|
NET_IF_CONNECTION_PASSIVE = 2,
|
|
NET_IF_CONNECTION_DEMAND = 3,
|
|
NET_IF_CONNECTION_MAXIMUM = 4
|
|
} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
|
|
|
|
|
|
typedef enum _NET_IF_MEDIA_CONNECT_STATE
|
|
{
|
|
MediaConnectStateUnknown,
|
|
MediaConnectStateConnected,
|
|
MediaConnectStateDisconnected
|
|
} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
|
|
|
|
#define NET_IF_LINK_SPEED_UNKNOWN ((ULONG64)(-1))
|
|
|
|
//
|
|
// Defines the duplex state of media
|
|
//
|
|
typedef enum _NET_IF_MEDIA_DUPLEX_STATE
|
|
{
|
|
MediaDuplexStateUnknown,
|
|
MediaDuplexStateHalf,
|
|
MediaDuplexStateFull
|
|
} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
|
|
|
|
|
|
// Special values for fields in NET_PHYSICAL_LOCATION
|
|
#define NIIF_BUS_NUMBER_UNKNOWN ((ULONG)(-1))
|
|
#define NIIF_SLOT_NUMBER_UNKNOWN ((ULONG)(-1))
|
|
#define NIIF_FUNCTION_NUMBER_UNKNOWN ((ULONG)(-1))
|
|
|
|
typedef struct _NET_PHYSICAL_LOCATION_LH
|
|
{
|
|
ULONG BusNumber; // Physical location
|
|
ULONG SlotNumber; // ... for hardware
|
|
ULONG FunctionNumber; // ... devices.
|
|
} NET_PHYSICAL_LOCATION_LH, *PNET_PHYSICAL_LOCATION_LH;
|
|
|
|
//
|
|
// maximum string size in -wchar- units
|
|
//
|
|
#define IF_MAX_STRING_SIZE 256
|
|
|
|
typedef struct _IF_COUNTED_STRING_LH
|
|
{
|
|
USHORT Length; // in -Bytes-
|
|
WCHAR String[IF_MAX_STRING_SIZE + 1];
|
|
} IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;
|
|
|
|
#define IF_MAX_PHYS_ADDRESS_LENGTH 32
|
|
|
|
typedef struct _IF_PHYSICAL_ADDRESS_LH
|
|
{
|
|
USHORT Length;
|
|
UCHAR Address[IF_MAX_PHYS_ADDRESS_LENGTH];
|
|
} IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
typedef NET_PHYSICAL_LOCATION_LH NET_PHYSICAL_LOCATION;
|
|
typedef NET_PHYSICAL_LOCATION* PNET_PHYSICAL_LOCATION;
|
|
|
|
typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;
|
|
typedef IF_COUNTED_STRING* PIF_COUNTED_STRING;
|
|
|
|
typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;
|
|
typedef IF_PHYSICAL_ADDRESS* PIF_PHYSICAL_ADDRESS;
|
|
#endif
|
|
|
|
|
|
//
|
|
// IF_INDEX
|
|
//
|
|
// Define the interface index type.
|
|
// This type is not persistable.
|
|
// This must be unsigned (not an enum) to replace previous uses of
|
|
// an index that used a DWORD type.
|
|
//
|
|
|
|
typedef NET_IFINDEX IF_INDEX, *PIF_INDEX;
|
|
#define IFI_UNSPECIFIED NET_IFINDEX_UNSPECIFIED
|
|
|
|
|
|
//
|
|
// Get definitions for IFTYPE and IF_ACCESS_TYPE.
|
|
//
|
|
#include <ipifcons.h>
|
|
|
|
|
|
//
|
|
// Types of tunnels (sub-type of IF_TYPE when IF_TYPE is IF_TYPE_TUNNEL).
|
|
// See http://www.iana.org/assignments/ianaiftype-mib.
|
|
//
|
|
typedef enum {
|
|
TUNNEL_TYPE_NONE = 0,
|
|
TUNNEL_TYPE_OTHER = 1,
|
|
TUNNEL_TYPE_DIRECT = 2,
|
|
TUNNEL_TYPE_6TO4 = 11,
|
|
TUNNEL_TYPE_ISATAP = 13,
|
|
TUNNEL_TYPE_TEREDO = 14,
|
|
TUNNEL_TYPE_IPHTTPS = 15,
|
|
} TUNNEL_TYPE, *PTUNNEL_TYPE;
|
|
|
|
//
|
|
// IF_ADMINISTRATIVE_STATE
|
|
//
|
|
// Datalink Interface Administrative State.
|
|
// Indicates whether the interface has been administratively enabled.
|
|
//
|
|
|
|
typedef enum _IF_ADMINISTRATIVE_STATE {
|
|
IF_ADMINISTRATIVE_DISABLED,
|
|
IF_ADMINISTRATIVE_ENABLED,
|
|
IF_ADMINISTRATIVE_DEMANDDIAL,
|
|
} IF_ADMINISTRATIVE_STATE, *PIF_ADMINISTRATIVE_STATE;
|
|
|
|
|
|
//
|
|
// Note: Interface is Operational iff
|
|
// ((MediaSense is Connected) and (AdministrativeState is Enabled))
|
|
// or
|
|
// ((MediaSense is Connected) and (AdministrativeState is OnDemand))
|
|
//
|
|
// !Operational iff
|
|
// ((MediaSense != Connected) or (AdministrativeState is Disabled))
|
|
//
|
|
|
|
//
|
|
// OperStatus values from RFC 2863
|
|
//
|
|
typedef enum {
|
|
IfOperStatusUp = 1,
|
|
IfOperStatusDown,
|
|
IfOperStatusTesting,
|
|
IfOperStatusUnknown,
|
|
IfOperStatusDormant,
|
|
IfOperStatusNotPresent,
|
|
IfOperStatusLowerLayerDown
|
|
} IF_OPER_STATUS;
|
|
|
|
typedef struct _NDIS_INTERFACE_INFORMATION
|
|
{
|
|
//
|
|
// rod fields
|
|
//
|
|
NET_IF_OPER_STATUS ifOperStatus;
|
|
ULONG ifOperStatusFlags;
|
|
NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
|
|
NET_IF_MEDIA_DUPLEX_STATE MediaDuplexState;
|
|
ULONG ifMtu;
|
|
BOOLEAN ifPromiscuousMode;
|
|
BOOLEAN ifDeviceWakeUpEnable;
|
|
ULONG64 XmitLinkSpeed;
|
|
ULONG64 RcvLinkSpeed;
|
|
|
|
ULONG64 ifLastChange;
|
|
ULONG64 ifCounterDiscontinuityTime;
|
|
ULONG64 ifInUnknownProtos;
|
|
|
|
//
|
|
// OID_GEN_STATISTICS
|
|
//
|
|
ULONG64 ifInDiscards; // OID_GEN_RCV_DISCARDS = OID_GEN_RCV_ERROR + OID_GEN_RCV_NO_BUFFER
|
|
ULONG64 ifInErrors; // OID_GEN_RCV_ERROR
|
|
ULONG64 ifHCInOctets; // OID_GEN_BYTES_RCV = OID_GEN_DIRECTED_BYTES_RCV + OID_GEN_MULTICAST_BYTES_RCV + OID_GEN_BROADCAST_BYTES_RCV
|
|
ULONG64 ifHCInUcastPkts; // OID_GEN_DIRECTED_FRAMES_RCV
|
|
ULONG64 ifHCInMulticastPkts; // OID_GEN_MULTICAST_FRAMES_RCV
|
|
ULONG64 ifHCInBroadcastPkts; // OID_GEN_BROADCAST_FRAMES_RCV
|
|
ULONG64 ifHCOutOctets; // OID_GEN_BYTES_XMIT = OID_GEN_DIRECTED_BYTES_XMIT + OID_GEN_MULTICAST_BYTES_XMIT + OID_GEN_BROADCAST_BYTES_XMIT
|
|
ULONG64 ifHCOutUcastPkts; // OID_GEN_DIRECTED_FRAMES_XMIT
|
|
ULONG64 ifHCOutMulticastPkts; // OID_GEN_MULTICAST_FRAMES_XMIT
|
|
ULONG64 ifHCOutBroadcastPkts; // OID_GEN_BROADCAST_FRAMES_XMIT
|
|
ULONG64 ifOutErrors; // OID_GEN_XMIT_ERROR
|
|
ULONG64 ifOutDiscards; // OID_GEN_XMIT_DISCARDS
|
|
ULONG64 ifHCInUcastOctets; // OID_GEN_DIRECTED_BYTES_RCV
|
|
ULONG64 ifHCInMulticastOctets; // OID_GEN_MULTICAST_BYTES_RCV
|
|
ULONG64 ifHCInBroadcastOctets; // OID_GEN_BROADCAST_BYTES_RCV
|
|
ULONG64 ifHCOutUcastOctets; // OID_GEN_DIRECTED_BYTES_XMIT
|
|
ULONG64 ifHCOutMulticastOctets; // OID_GEN_MULTICAST_BYTES_XMIT
|
|
ULONG64 ifHCOutBroadcastOctets; // OID_GEN_BROADCAST_BYTES_XMIT
|
|
NET_IF_COMPARTMENT_ID CompartmentId;
|
|
ULONG SupportedStatistics;
|
|
}NDIS_INTERFACE_INFORMATION, *PNDIS_INTERFACE_INFORMATION;
|
|
|
|
#endif // _IFDEF_
|
|
|