Reactos
at master 177 lines 4.7 kB view raw
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 */