1 /* 2 * Defines the types and macros used by the ICMP API, see icmpapi.h. 3 * 4 * Copyright (C) 1999 Francois Gouget 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #ifndef __WINE_IPEXPORT_H 22 #define __WINE_IPEXPORT_H 23 24 #include <in6addr.h> 25 #include <inaddr.h> 26 27 typedef ULONG IPAddr; 28 typedef ULONG IPMask; 29 typedef ULONG IP_STATUS; 30 31 typedef struct ip_option_information 32 { 33 unsigned char Ttl; 34 unsigned char Tos; 35 unsigned char Flags; 36 unsigned char OptionsSize; 37 unsigned char* OptionsData; 38 } IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; 39 40 #if defined(_WIN64) 41 42 struct ip_option_information32 43 { 44 unsigned char Ttl; 45 unsigned char Tos; 46 unsigned char Flags; 47 unsigned char OptionsSize; 48 unsigned char* POINTER_32 OptionsData; 49 }; 50 51 #endif // _WIN64 52 53 #define IP_FLAG_DF 0x2 54 55 #define IP_OPT_EOL 0 56 #define IP_OPT_NOP 1 57 #define IP_OPT_SECURITY 0x82 58 #define IP_OPT_LSRR 0x83 59 #define IP_OPT_SSRR 0x89 60 #define IP_OPT_RR 0x7 61 #define IP_OPT_TS 0x44 62 #define IP_OPT_SID 0x88 63 64 #define MAX_OPT_SIZE 40 65 66 67 typedef struct icmp_echo_request 68 { 69 IPAddr Address; 70 UINT32 Timeout; 71 UINT16 DataOffset; 72 UINT16 DataSize; 73 UINT8 HasOptions; 74 UINT8 Ttl; 75 UINT8 Tos; 76 UINT8 Flags; 77 UINT16 OptionsOffset; 78 UINT8 OptionsSize; 79 UINT8 Padding; 80 } ICMP_ECHO_REQUEST, *PICMP_ECHO_REQUEST; 81 82 typedef struct icmp_echo_reply 83 { 84 IPAddr Address; 85 UINT32 Status; 86 UINT32 RoundTripTime; 87 UINT16 DataSize; 88 UINT16 Reserved; 89 PVOID Data; 90 IP_OPTION_INFORMATION Options; 91 } ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY; 92 93 #ifdef _WIN64 94 struct icmp_echo_reply32 95 { 96 IPAddr Address; 97 ULONG Status; 98 ULONG RoundTripTime; 99 unsigned short DataSize; 100 unsigned short Reserved; 101 void* POINTER_32 Data; 102 struct ip_option_information32 Options; 103 }; 104 105 typedef struct ip_option_information32 IP_OPTION_INFORMATION32, *PIP_OPTION_INFORMATION32; 106 107 typedef struct icmp_echo_reply32 ICMP_ECHO_REPLY32, *PICMP_ECHO_REPLY32; 108 #endif 109 110 111 #define IP_STATUS_BASE 11000 112 113 #define IP_SUCCESS 0 114 #define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1) 115 #define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2) 116 #define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3) 117 #define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4) 118 #define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5) 119 #define IP_NO_RESOURCES (IP_STATUS_BASE + 6) 120 #define IP_BAD_OPTION (IP_STATUS_BASE + 7) 121 #define IP_HW_ERROR (IP_STATUS_BASE + 8) 122 #define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9) 123 #define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10) 124 #define IP_BAD_REQ (IP_STATUS_BASE + 11) 125 #define IP_BAD_ROUTE (IP_STATUS_BASE + 12) 126 #define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13) 127 #define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14) 128 #define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15) 129 #define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16) 130 #define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17) 131 #define IP_BAD_DESTINATION (IP_STATUS_BASE + 18) 132 133 #define IP_ADDR_DELETED (IP_STATUS_BASE + 19) 134 #define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20) 135 #define IP_MTU_CHANGE (IP_STATUS_BASE + 21) 136 #define IP_UNLOAD (IP_STATUS_BASE + 22) 137 138 #define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50) 139 #define MAX_IP_STATUS IP_GENERAL_FAILURE 140 #define IP_PENDING (IP_STATUS_BASE + 255) 141 142 143 #define MAX_ADAPTER_NAME 128 144 145 typedef struct _IP_ADAPTER_INDEX_MAP { 146 ULONG Index; 147 WCHAR Name[MAX_ADAPTER_NAME]; 148 } IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; 149 150 typedef struct _IP_INTERFACE_INFO { 151 LONG NumAdapters; 152 IP_ADAPTER_INDEX_MAP Adapter[1]; 153 } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO; 154 155 typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { 156 ULONG NumAdapters; 157 IPAddr Address[1]; 158 } IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; 159 160 /* ReactOS */ 161 162 typedef struct _IP_ADAPTER_ORDER_MAP { 163 ULONG NumAdapters; 164 ULONG AdapterOrder[1]; 165 } IP_ADAPTER_ORDER_MAP, *PIP_ADAPTER_ORDER_MAP; 166 167 #if (NTDDI_VERSION >= NTDDI_WINXP) 168 169 #include <pshpack1.h> 170 typedef struct _IPV6_ADDRESS_EX { 171 USHORT sin6_port; 172 ULONG sin6_flowinfo; 173 USHORT sin6_addr[8]; 174 ULONG sin6_scope_id; 175 } IPV6_ADDRESS_EX, *PIPV6_ADDRESS_EX; 176 #include <poppack.h> 177 178 typedef struct _ICMPV6_ECHO_REQUEST 179 { 180 IPV6_ADDRESS_EX DestinationAddress; 181 IPV6_ADDRESS_EX SourceAddress; 182 UINT32 Timeout; 183 UINT16 Unknown1; 184 UINT16 Ttl; // XXX: These seem unnecessarily large. 185 UINT32 Flags; // Is something else in the struct? 186 } ICMPV6_ECHO_REQUEST, *PICMPV6_ECHO_REQUEST; 187 188 typedef struct icmpv6_echo_reply_lh { 189 IPV6_ADDRESS_EX Address; 190 ULONG Status; 191 unsigned int RoundTripTime; 192 } ICMPV6_ECHO_REPLY_LH, *PICMPV6_ECHO_REPLY_LH; 193 194 typedef ICMPV6_ECHO_REPLY_LH ICMPV6_ECHO_REPLY; 195 typedef ICMPV6_ECHO_REPLY_LH *PICMPV6_ECHO_REPLY; 196 197 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 198 199 #endif /* __WINE_IPEXPORT_H */ 200