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 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 }; 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 struct icmp_echo_reply 68 { 69 IPAddr Address; 70 ULONG Status; 71 ULONG RoundTripTime; 72 unsigned short DataSize; 73 unsigned short Reserved; 74 void* Data; 75 struct ip_option_information Options; 76 }; 77 78 typedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; 79 80 typedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY; 81 82 #ifdef _WIN64 83 struct icmp_echo_reply32 84 { 85 IPAddr Address; 86 ULONG Status; 87 ULONG RoundTripTime; 88 unsigned short DataSize; 89 unsigned short Reserved; 90 void* POINTER_32 Data; 91 struct ip_option_information32 Options; 92 }; 93 94 typedef struct ip_option_information32 IP_OPTION_INFORMATION32, *PIP_OPTION_INFORMATION32; 95 96 typedef struct icmp_echo_reply32 ICMP_ECHO_REPLY32, *PICMP_ECHO_REPLY32; 97 #endif 98 99 100 #define IP_STATUS_BASE 11000 101 102 #define IP_SUCCESS 0 103 #define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1) 104 #define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2) 105 #define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3) 106 #define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4) 107 #define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5) 108 #define IP_NO_RESOURCES (IP_STATUS_BASE + 6) 109 #define IP_BAD_OPTION (IP_STATUS_BASE + 7) 110 #define IP_HW_ERROR (IP_STATUS_BASE + 8) 111 #define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9) 112 #define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10) 113 #define IP_BAD_REQ (IP_STATUS_BASE + 11) 114 #define IP_BAD_ROUTE (IP_STATUS_BASE + 12) 115 #define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13) 116 #define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14) 117 #define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15) 118 #define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16) 119 #define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17) 120 #define IP_BAD_DESTINATION (IP_STATUS_BASE + 18) 121 122 #define IP_ADDR_DELETED (IP_STATUS_BASE + 19) 123 #define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20) 124 #define IP_MTU_CHANGE (IP_STATUS_BASE + 21) 125 #define IP_UNLOAD (IP_STATUS_BASE + 22) 126 127 #define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50) 128 #define MAX_IP_STATUS IP_GENERAL_FAILURE 129 #define IP_PENDING (IP_STATUS_BASE + 255) 130 131 132 #define MAX_ADAPTER_NAME 128 133 134 typedef struct _IP_ADAPTER_INDEX_MAP { 135 ULONG Index; 136 WCHAR Name[MAX_ADAPTER_NAME]; 137 } IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; 138 139 typedef struct _IP_INTERFACE_INFO { 140 LONG NumAdapters; 141 IP_ADAPTER_INDEX_MAP Adapter[1]; 142 } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO; 143 144 typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { 145 ULONG NumAdapters; 146 IPAddr Address[1]; 147 } IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; 148 149 /* ReactOS */ 150 151 typedef struct _IP_ADAPTER_ORDER_MAP { 152 ULONG NumAdapters; 153 ULONG AdapterOrder[1]; 154 } IP_ADAPTER_ORDER_MAP, *PIP_ADAPTER_ORDER_MAP; 155 156 #if (NTDDI_VERSION >= NTDDI_WINXP) 157 158 #include <pshpack1.h> 159 typedef struct _IPV6_ADDRESS_EX { 160 USHORT sin6_port; 161 ULONG sin6_flowinfo; 162 USHORT sin6_addr[8]; 163 ULONG sin6_scope_id; 164 } IPV6_ADDRESS_EX, *PIPV6_ADDRESS_EX; 165 #include <poppack.h> 166 167 typedef struct icmpv6_echo_reply_lh { 168 IPV6_ADDRESS_EX Address; 169 ULONG Status; 170 unsigned int RoundTripTime; 171 } ICMPV6_ECHO_REPLY_LH, *PICMPV6_ECHO_REPLY_LH; 172 173 typedef ICMPV6_ECHO_REPLY_LH ICMPV6_ECHO_REPLY; 174 typedef ICMPV6_ECHO_REPLY_LH *PICMPV6_ECHO_REPLY; 175 176 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 177 178 #endif /* __WINE_IPEXPORT_H */ 179