Reactos
1#ifndef IPPRIVATE_H
2#define IPPRIVATE_H
3
4#define NtCurrentTeb NtXCurrentTeb
5
6#include <stdio.h>
7#include <stdlib.h>
8//#include <sys/types.h>
9#ifdef HAVE_NETINET_IN_H
10# include <netinet/in.h>
11#endif
12#ifdef HAVE_ARPA_INET_H
13# include <arpa/inet.h>
14#endif
15#ifdef HAVE_ARPA_NAMESER_H
16# include <arpa/nameser.h>
17#endif
18#ifdef HAVE_RESOLV_H
19# include <resolv.h>
20#endif
21
22#define WIN32_NO_STATUS
23#define _INC_WINDOWS
24#define COM_NO_WINDOWS_H
25
26#include <windef.h>
27#include <winbase.h>
28#include <winreg.h>
29#include <winnls.h>
30#include <ws2tcpip.h>
31#define NTOS_MODE_USER
32#include <ndk/iofuncs.h>
33#include <ndk/obfuncs.h>
34#include <ndk/rtlfuncs.h>
35#include <iphlpapi.h>
36#include <iphlpapi_undoc.h>
37#include "resinfo.h"
38#include <wine/debug.h>
39
40#include "dhcp.h"
41#include <dhcpcsdk.h>
42#include <dhcpcapi.h>
43
44#include <tdiinfo.h>
45#include <tcpioctl.h>
46
47#include <tdilib.h>
48
49#include "ifenum.h"
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
87typedef 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 */
104typedef char *caddr_t;
105
106typedef union _IFEntrySafelySized {
107 CHAR MaxSize[sizeof(DWORD) +
108 sizeof(IFEntry) +
109 MAX_ADAPTER_DESCRIPTION_LENGTH + 1];
110 IFEntry ent;
111} IFEntrySafelySized;
112
113typedef 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
120typedef 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 */
128typedef struct _IFInfo {
129 TDIEntityID entity_id;
130 IFEntrySafelySized if_info;
131 IPAddrEntry ip_addr;
132} IFInfo;
133
134typedef struct _IP_SET_DATA {
135 ULONG NteContext;
136 ULONG NewAddress;
137 ULONG NewNetmask;
138} IP_SET_DATA, *PIP_SET_DATA;
139
140typedef enum _IPHLPAddrType {
141 IPAAddr, IPABcast, IPAMask, IFMtu, IFStatus
142} IPHLPAddrType;
143
144/** Prototypes **/
145NTSTATUS getNthIpEntity( HANDLE tcpFile, DWORD index, TDIEntityID *ent );
146NTSTATUS tdiGetIpAddrsForIpEntity( HANDLE tcpFile, TDIEntityID *ent,
147 IPAddrEntry **addrs, PDWORD numAddrs );
148int GetLongestChildKeyName( HANDLE RegHandle );
149LONG OpenChildKeyRead( HANDLE RegHandle,
150 PWCHAR ChildKeyName,
151 PHKEY ReturnHandle );
152PWCHAR GetNthChildKeyName( HANDLE RegHandle, DWORD n );
153void ConsumeChildKeyName( PWCHAR Name );
154PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName );
155PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName );
156void ConsumeRegValueString( PWCHAR NameServer );
157BOOL isInterface( TDIEntityID *if_maybe );
158BOOL hasArp( HANDLE tcpFile, TDIEntityID *arp_maybe );
159
160typedef VOID (*EnumNameServersFunc)( PWCHAR Interface,
161 PWCHAR NameServer,
162 PVOID Data );
163LSTATUS EnumNameServers( HKEY RegHandle, LPWSTR Interface, PVOID Data, EnumNameServersFunc cb );
164NTSTATUS getIPAddrEntryForIf(HANDLE tcpFile,
165 char *name,
166 DWORD index,
167 IFInfo *ifInfo);
168DWORD TCPSendIoctl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, PULONG pInBufferSize, LPVOID lpOutBuffer, PULONG pOutBufferSize);
169
170#include <w32api.h>
171/* This is here until we switch to version 2.5 of the mingw headers */
172#if (__W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5)
173BOOL WINAPI
174GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
175#endif
176
177#endif /* IPPRIVATE_H */