Synchronize with trunk's revision r57652.
[reactos.git] / dll / win32 / iphlpapi / iphlpapi_private.h
1 #ifndef IPPRIVATE_H
2 #define IPPRIVATE_H
3
4 #define NtCurrentTeb NtXCurrentTeb
5
6 #include <stdarg.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <sys/types.h>
10 #ifdef HAVE_NETINET_IN_H
11 # include <netinet/in.h>
12 #endif
13 #ifdef HAVE_ARPA_INET_H
14 # include <arpa/inet.h>
15 #endif
16 #ifdef HAVE_ARPA_NAMESER_H
17 # include <arpa/nameser.h>
18 #endif
19 #ifdef HAVE_RESOLV_H
20 # include <resolv.h>
21 #endif
22
23 #define WIN32_NO_STATUS
24 #include <winsock2.h>
25 #include <ws2tcpip.h>
26 #include <windows.h>
27 #define NTOS_MODE_USER
28 #include <ndk/iofuncs.h>
29 #include <ndk/obfuncs.h>
30 #include <ndk/rtlfuncs.h>
31 #include <nspapi.h>
32 #include <iptypes.h>
33 #include "iphlpapi.h"
34 #include "resinfo.h"
35 #include "wine/debug.h"
36
37 #include "dhcp.h"
38 #include "dhcpcsdk.h"
39 #include "dhcpcapi.h"
40 #include <assert.h>
41
42 //#include "ntddndis.h"
43 #include "tdiinfo.h"
44 #include "tcpioctl.h"
45
46 #include "tdilib.h"
47
48 #include "ifenum.h"
49
50 #include "ipstats.h"
51 #include "route.h"
52
53 #ifndef ETH_ALEN
54 #define ETH_ALEN 6
55 #endif
56
57 #ifndef INADDR_NONE
58 #define INADDR_NONE (~0U)
59 #endif
60
61 #ifndef IFENT_SOFTWARE_LOOPBACK
62 #define IFENT_SOFTWARE_LOOPBACK 24 /* This is an SNMP constant from rfc1213 */
63 #endif/*IFENT_SOFTWARE_LOOPBACK*/
64
65 #define INDEX_IS_LOOPBACK 0x00800000
66
67 /* Type declarations */
68
69 #ifndef IFNAMSIZ
70 #define IFNAMSIZ 0x20
71 #endif/*IFNAMSIZ*/
72
73 #define TCP_REQUEST_QUERY_INFORMATION_INIT { { { 0 } } }
74 #define TCP_REQUEST_SET_INFORMATION_INIT { { 0 } }
75
76 /* FIXME: ROS headers suck */
77 #ifndef GAA_FLAG_SKIP_UNICAST
78 #define GAA_FLAG_SKIP_UNICAST 0x0001
79 #endif
80
81 #ifndef GAA_FLAG_SKIP_FRIENDLY_NAME
82 #define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
83 #endif
84
85 // As in the mib from RFC 1213
86
87 typedef struct _IPRouteEntry {
88 ULONG ire_dest;
89 ULONG ire_index; //matches if_index in IFEntry and iae_index in IPAddrEntry
90 ULONG ire_metric1;
91 ULONG ire_metric2;
92 ULONG ire_metric3;
93 ULONG ire_metric4;
94 ULONG ire_gw;
95 ULONG ire_type;
96 ULONG ire_proto;
97 ULONG ire_age;
98 ULONG ire_mask;
99 ULONG ire_metric5;
100 ULONG ire_info;
101 } IPRouteEntry;
102
103 /* No caddr_t in reactos headers */
104 typedef char *caddr_t;
105
106 typedef union _IFEntrySafelySized {
107 CHAR MaxSize[sizeof(DWORD) +
108 sizeof(IFEntry) +
109 MAX_ADAPTER_DESCRIPTION_LENGTH + 1];
110 IFEntry ent;
111 } IFEntrySafelySized;
112
113 typedef union _TCP_REQUEST_SET_INFORMATION_EX_ROUTE_ENTRY {
114 CHAR MaxSize[sizeof(TCP_REQUEST_SET_INFORMATION_EX) - 1 +
115 sizeof(IPRouteEntry)];
116 TCP_REQUEST_SET_INFORMATION_EX Req;
117 } TCP_REQUEST_SET_INFORMATION_EX_ROUTE_ENTRY,
118 *PTCP_REQUEST_SET_INFORMATION_EX_ROUTE_ENTRY;
119
120 typedef union _TCP_REQUEST_SET_INFORMATION_EX_ARP_ENTRY {
121 CHAR MaxSize[sizeof(TCP_REQUEST_SET_INFORMATION_EX) - 1 +
122 sizeof(MIB_IPNETROW)];
123 TCP_REQUEST_SET_INFORMATION_EX Req;
124 } TCP_REQUEST_SET_INFORMATION_EX_ARP_ENTRY,
125 *PTCP_REQUEST_SET_INFORMATION_EX_ARP_ENTRY;
126
127 /* Encapsulates information about an interface */
128 typedef struct _IFInfo {
129 TDIEntityID entity_id;
130 IFEntrySafelySized if_info;
131 IPAddrEntry ip_addr;
132 } IFInfo;
133
134 typedef struct _IP_SET_DATA {
135 ULONG NteContext;
136 ULONG NewAddress;
137 ULONG NewNetmask;
138 } IP_SET_DATA, *PIP_SET_DATA;
139
140 typedef enum _IPHLPAddrType {
141 IPAAddr, IPABcast, IPAMask, IFMtu, IFStatus
142 } IPHLPAddrType;
143
144 /** Prototypes **/
145 NTSTATUS getNthIpEntity( HANDLE tcpFile, DWORD index, TDIEntityID *ent );
146 NTSTATUS tdiGetIpAddrsForIpEntity( HANDLE tcpFile, TDIEntityID *ent,
147 IPAddrEntry **addrs, PDWORD numAddrs );
148 int GetLongestChildKeyName( HANDLE RegHandle );
149 LONG OpenChildKeyRead( HANDLE RegHandle,
150 PWCHAR ChildKeyName,
151 PHKEY ReturnHandle );
152 PWCHAR GetNthChildKeyName( HANDLE RegHandle, DWORD n );
153 void ConsumeChildKeyName( PWCHAR Name );
154 PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName );
155 PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName );
156 void ConsumeRegValueString( PWCHAR NameServer );
157 BOOL isInterface( TDIEntityID *if_maybe );
158 BOOL hasArp( HANDLE tcpFile, TDIEntityID *arp_maybe );
159
160 typedef VOID (*EnumNameServersFunc)( PWCHAR Interface,
161 PWCHAR NameServer,
162 PVOID Data );
163 LSTATUS EnumNameServers( HKEY RegHandle, LPWSTR Interface, PVOID Data, EnumNameServersFunc cb );
164 NTSTATUS getIPAddrEntryForIf(HANDLE tcpFile,
165 char *name,
166 DWORD index,
167 IFInfo *ifInfo);
168
169 #include <w32api.h>
170 /* This is here until we switch to version 2.5 of the mingw headers */
171 #if (__W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5)
172 BOOL WINAPI
173 GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
174 #endif
175
176 #endif/*IPPRIVATE_H*/