1 /***********************************************************************\ 2 * ipexport.d * 3 * * 4 * Windows API header module * 5 * * 6 * Translated from MinGW Windows headers * 7 * by Stewart Gordon * 8 * * 9 * Placed into public domain * 10 \***********************************************************************/ 11 module win32.ipexport; 12 version(Windows): 13 14 private import win32.windef; 15 16 const size_t MAX_ADAPTER_NAME = 128; 17 18 // IP STATUS flags 19 enum : IP_STATUS { 20 IP_SUCCESS = 0, 21 IP_STATUS_BASE = 11000, 22 IP_BUF_TOO_SMALL, 23 IP_DEST_NET_UNREACHABLE, 24 IP_DEST_HOST_UNREACHABLE, 25 IP_DEST_PROT_UNREACHABLE, 26 IP_DEST_PORT_UNREACHABLE, 27 IP_NO_RESOURCES, 28 IP_BAD_OPTION, 29 IP_HW_ERROR, 30 IP_PACKET_TOO_BIG, 31 IP_REQ_TIMED_OUT, 32 IP_BAD_REQ, 33 IP_BAD_ROUTE, 34 IP_TTL_EXPIRED_TRANSIT, 35 IP_TTL_EXPIRED_REASSEM, 36 IP_PARAM_PROBLEM, 37 IP_SOURCE_QUENCH, 38 IP_OPTION_TOO_BIG, 39 IP_BAD_DESTINATION, 40 IP_ADDR_DELETED, 41 IP_SPEC_MTU_CHANGE, 42 IP_MTU_CHANGE, 43 IP_UNLOAD, // = IP_STATUS_BASE + 22 44 IP_GENERAL_FAILURE = IP_STATUS_BASE + 50, 45 MAX_IP_STATUS = IP_GENERAL_FAILURE, 46 IP_PENDING = IP_STATUS_BASE + 255 47 } 48 49 // IP header Flags values 50 const byte IP_FLAG_DF = 2; 51 52 // IP Option types 53 enum : ubyte { 54 IP_OPT_EOL = 0, 55 IP_OPT_NOP = 0x01, 56 IP_OPT_RR = 0x07, 57 IP_OPT_SECURITY = 0x82, 58 IP_OPT_LSRR = 0x83, 59 IP_OPT_SSRR = 0x89, 60 IP_OPT_TS = 0x44, 61 IP_OPT_SID = 0x88, 62 IP_OPT_ROUTER_ALERT = 0x94 63 } 64 65 const ubyte MAX_OPT_SIZE = 40; 66 67 alias uint IPAddr, IPMask, IP_STATUS; 68 69 struct IP_OPTION_INFORMATION { 70 ubyte Ttl; 71 ubyte Tos; 72 ubyte Flags; 73 ubyte OptionsSize; 74 ubyte* OptionsData; 75 } 76 alias IP_OPTION_INFORMATION* PIP_OPTION_INFORMATION; 77 78 struct ICMP_ECHO_REPLY { 79 IPAddr Address; 80 uint Status; 81 uint RoundTripTime; 82 ushort DataSize; 83 ushort Reserved; 84 void* Data; 85 IP_OPTION_INFORMATION Options; 86 } 87 alias ICMP_ECHO_REPLY* PICMP_ECHO_REPLY; 88 89 struct IP_ADAPTER_INDEX_MAP { 90 ULONG Index; 91 WCHAR[MAX_ADAPTER_NAME] Name; 92 } 93 alias IP_ADAPTER_INDEX_MAP* PIP_ADAPTER_INDEX_MAP; 94 95 struct IP_INTERFACE_INFO { 96 LONG NumAdapters; 97 IP_ADAPTER_INDEX_MAP[1] _Adapter; 98 99 IP_ADAPTER_INDEX_MAP* Adapter() { return _Adapter.ptr; } 100 } 101 alias IP_INTERFACE_INFO* PIP_INTERFACE_INFO; 102 103 struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { 104 ULONG NumAdapters; 105 IPAddr[1] _Address; 106 107 IPAddr* Address() { return _Address.ptr; } 108 } 109 alias IP_UNIDIRECTIONAL_ADAPTER_ADDRESS* PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;