1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_IFDEF
7 #define _INC_IFDEF
8 
9 #include <ipifcons.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #define IF_MAX_STRING_SIZE 256
16 #define IF_MAX_PHYS_ADDRESS_LENGTH 32
17 
18 typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;
19 
20 typedef ULONG NET_IFINDEX, *PNET_IFINDEX;
21 typedef UINT16 NET_IFTYPE, *PNET_IFTYPE;
22 typedef NET_IFINDEX IF_INDEX, *PIF_INDEX;
23 
24 typedef GUID NET_IF_NETWORK_GUID;
25 
26 typedef enum _IF_OPER_STATUS {
27   IfOperStatusUp               = 1,
28   IfOperStatusDown,
29   IfOperStatusTesting,
30   IfOperStatusUnknown,
31   IfOperStatusDormant,
32   IfOperStatusNotPresent,
33   IfOperStatusLowerLayerDown
34 } IF_OPER_STATUS;
35 
36 typedef enum _NET_IF_OPER_STATUS {
37   NET_IF_OPER_STATUS_UP                = 1,
38   NET_IF_OPER_STATUS_DOWN,
39   NET_IF_OPER_STATUS_TESTING,
40   NET_IF_OPER_STATUS_UNKNOWN,
41   NET_IF_OPER_STATUS_DORMANT,
42   NET_IF_OPER_STATUS_NOT_PRESENT,
43   NET_IF_OPER_STATUS_LOWER_LAYER_DOWN
44 } NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;
45 
46 typedef enum _NET_IF_ADMIN_STATUS {
47   NET_IF_ADMIN_STATUS_UP        = 1,
48   NET_IF_ADMIN_STATUS_DOWN,
49   NET_IF_ADMIN_STATUS_TESTING
50 } NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
51 
52 typedef enum _NET_IF_MEDIA_CONNECT_STATE {
53   MediaConnectStateUnknown,
54   MediaConnectStateConnected,
55   MediaConnectStateDisconnected
56 } NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
57 
58 typedef enum _NET_IF_ACCESS_TYPE {
59   NET_IF_ACCESS_LOOPBACK               = 1,
60   NET_IF_ACCESS_BROADCAST,
61   NET_IF_ACCESS_POINT_TO_POINT,
62   NET_IF_ACCESS_POINT_TO_MULTI_POINT,
63   NET_IF_ACCESS_MAXIMUM
64 } NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
65 
66 typedef enum _NET_IF_CONNECTION_TYPE {
67   NET_IF_CONNECTION_DEDICATED   = 1,
68   NET_IF_CONNECTION_PASSIVE,
69   NET_IF_CONNECTION_DEMAND,
70   NET_IF_CONNECTION_MAXIMUM
71 } NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
72 
73 typedef enum _NET_IF_DIRECTION_TYPE {
74   NET_IF_DIRECTION_SENDRECEIVE,
75   NET_IF_DIRECTION_SENDONLY,
76   NET_IF_DIRECTION_RECEIVEONLY,
77   NET_IF_DIRECTION_MAXIMUM
78 } NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
79 
80 typedef enum _NET_IF_MEDIA_DUPLEX_STATE {
81   MediaDuplexStateUnknown,
82   MediaDuplexStateHalf,
83   MediaDuplexStateFull
84 } NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
85 
86 typedef enum _TUNNEL_TYPE {
87   TUNNEL_TYPE_NONE      = 0,
88   TUNNEL_TYPE_OTHER     = 1,
89   TUNNEL_TYPE_DIRECT    = 2,
90   TUNNEL_TYPE_6TO4      = 11,
91   TUNNEL_TYPE_ISATAP    = 13,
92   TUNNEL_TYPE_TEREDO    = 14,
93   TUNNEL_TYPE_IPHTTPS   = 15
94 } TUNNEL_TYPE, *PTUNNEL_TYPE;
95 
96 typedef union _NET_LUID {
97   ULONG64 Value;
98   __C89_NAMELESS struct { /* bitfield with 64 bit types. */
99     ULONG64 Reserved  :24;
100     ULONG64 NetLuidIndex  :24;
101     ULONG64 IfType  :16;
102   } Info;
103 } NET_LUID, *PNET_LUID;
104 
105 typedef NET_LUID IF_LUID, *PIF_LUID;
106 
107 typedef struct _IF_COUNTED_STRING_LH {
108     USHORT Length;
109     WCHAR  String[IF_MAX_STRING_SIZE + 1];
110 } IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;
111 typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;
112 typedef IF_COUNTED_STRING *PIF_COUNTED_STRING;
113 
114 typedef struct _IF_PHYSICAL_ADDRESS_LH {
115     USHORT Length;
116     UCHAR  Address[IF_MAX_PHYS_ADDRESS_LENGTH];
117 } IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;
118 typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;
119 typedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS;
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif /* _INC_IFDEF */
126 
127