routprot.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _ROUTPROT_H_
  7. #define _ROUTPROT_H_
  8. #include "stm.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #define RF_ROUTING 0x00000001
  13. #define RF_DEMAND_UPDATE_ROUTES 0x00000004
  14. #define RF_ADD_ALL_INTERFACES 0x00000010
  15. #define RF_MULTICAST 0x00000020
  16. #define RF_POWER 0x00000040
  17. #if MPR50
  18. #define MS_ROUTER_VERSION 0x00000500
  19. #else
  20. #error Router version not defined
  21. #endif
  22. typedef enum _ROUTING_PROTOCOL_EVENTS {
  23. ROUTER_STOPPED,SAVE_GLOBAL_CONFIG_INFO,SAVE_INTERFACE_CONFIG_INFO,UPDATE_COMPLETE
  24. } ROUTING_PROTOCOL_EVENTS;
  25. typedef enum _NET_INTERFACE_TYPE {
  26. PERMANENT,DEMAND_DIAL,LOCAL_WORKSTATION_DIAL,REMOTE_WORKSTATION_DIAL
  27. } NET_INTERFACE_TYPE;
  28. #define IR_PROMISCUOUS 0
  29. #define IR_PROMISCUOUS_MULTICAST 1
  30. typedef struct _SUPPORT_FUNCTIONS {
  31. __C89_NAMELESS union {
  32. ULONGLONG _Align8;
  33. __C89_NAMELESS struct {
  34. DWORD dwVersion;
  35. DWORD dwReserved;
  36. };
  37. };
  38. DWORD (WINAPI *DemandDialRequest)(DWORD ProtocolId,DWORD InterfaceIndex);
  39. DWORD (WINAPI *SetInterfaceReceiveType)(DWORD ProtocolId,DWORD InterfaceIndex,DWORD InterfaceReceiveType,WINBOOL bActivate);
  40. DWORD (WINAPI *ValidateRoute)(DWORD ProtocolId,PVOID RouteInfo,PVOID DestAddress);
  41. DWORD (WINAPI *MIBEntryCreate)(DWORD dwRoutingPid,DWORD dwEntrySize,LPVOID lpEntry);
  42. DWORD (WINAPI *MIBEntryDelete)(DWORD dwRoutingPid,DWORD dwEntrySize,LPVOID lpEntry);
  43. DWORD (WINAPI *MIBEntrySet)(DWORD dwRoutingPid,DWORD dwEntrySize,LPVOID lpEntry);
  44. DWORD (WINAPI *MIBEntryGet)(DWORD dwRoutingPid,DWORD dwInEntrySize,LPVOID lpInEntry,LPDWORD lpOutEntrySize,LPVOID lpOutEntry);
  45. DWORD (WINAPI *MIBEntryGetFirst)(DWORD dwRoutingPid,DWORD dwInEntrySize,LPVOID lpInEntry,LPDWORD lpOutEntrySize,LPVOID lpOutEntry);
  46. DWORD (WINAPI *MIBEntryGetNext)(DWORD dwRoutingPid,DWORD dwInEntrySize,LPVOID lpInEntry,LPDWORD lpOutEntrySize,LPVOID lpOutEntry);
  47. DWORD (WINAPI *GetRouterId)(VOID);
  48. WINBOOL (WINAPI *HasMulticastBoundary)(DWORD dwIfIndex,DWORD dwGroupAddress);
  49. } SUPPORT_FUNCTIONS,*PSUPPORT_FUNCTIONS;
  50. #define PROTO_IP_OTHER 1
  51. #define PROTO_IP_LOCAL 2
  52. #define PROTO_IP_NETMGMT 3
  53. #define PROTO_IP_ICMP 4
  54. #define PROTO_IP_EGP 5
  55. #define PROTO_IP_GGP 6
  56. #define PROTO_IP_HELLO 7
  57. #define PROTO_IP_RIP 8
  58. #define PROTO_IP_IS_IS 9
  59. #define PROTO_IP_ES_IS 10
  60. #define PROTO_IP_CISCO 11
  61. #define PROTO_IP_BBN 12
  62. #define PROTO_IP_OSPF 13
  63. #define PROTO_IP_BGP 14
  64. #define PROTO_IP_MSDP 9
  65. #define PROTO_IP_IGMP 10
  66. #define PROTO_IP_BGMP 11
  67. #define PROTO_IP_VRRP 112
  68. #define PROTO_IP_BOOTP 9999
  69. #define PROTO_IP_NT_AUTOSTATIC 10002
  70. #define PROTO_IP_DNS_PROXY 10003
  71. #define PROTO_IP_DHCP_ALLOCATOR 10004
  72. #define PROTO_IP_NAT 10005
  73. #define PROTO_IP_NT_STATIC 10006
  74. #define PROTO_IP_NT_STATIC_NON_DOD 10007
  75. #define PROTO_IP_DIFFSERV 10008
  76. #define PROTO_IP_MGM 10009
  77. #define PROTO_IP_ALG 10010
  78. #define PROTO_IP_H323 10011
  79. #define PROTO_IP_FTP 10012
  80. #define PROTO_IP_DTP 10013
  81. #define PROTOCOL_ID(Type,VendorId,ProtocolId) (((Type & 0x03)<<30)|((VendorId & 0x3FFF)<<16)|(ProtocolId & 0xFFFF))
  82. #define TYPE_FROM_PROTO_ID(X) (((X) >> 30) & 0x03)
  83. #define VENDOR_FROM_PROTO_ID(X) (((X) >> 16) & 0x3FFF)
  84. #define PROTO_FROM_PROTO_ID(X) ((X) & 0xFFFF)
  85. #define PROTO_TYPE_UCAST 0
  86. #define PROTO_TYPE_MCAST 1
  87. #define PROTO_TYPE_MS0 2
  88. #define PROTO_TYPE_MS1 3
  89. #define PROTO_VENDOR_MS0 0x0000
  90. #define PROTO_VENDOR_MS1 0x137
  91. #define PROTO_VENDOR_MS2 0x3FFF
  92. #define MS_IP_BOOTP PROTOCOL_ID(PROTO_TYPE_UCAST,PROTO_VENDOR_MS0,PROTO_IP_BOOTP)
  93. #define MS_IP_RIP PROTOCOL_ID(PROTO_TYPE_UCAST,PROTO_VENDOR_MS0,PROTO_IP_RIP)
  94. #define MS_IP_OSPF PROTOCOL_ID(PROTO_TYPE_UCAST,PROTO_VENDOR_MS0,PROTO_IP_OSPF)
  95. #define MS_IP_BGP PROTOCOL_ID(PROTO_TYPE_UCAST,PROTO_VENDOR_MS1,PROTO_IP_BGP)
  96. #define MS_IP_IGMP PROTOCOL_ID(PROTO_TYPE_MCAST,PROTO_VENDOR_MS1,PROTO_IP_IGMP)
  97. #define MS_IP_BGMP PROTOCOL_ID(PROTO_TYPE_MCAST,PROTO_VENDOR_MS1,PROTO_IP_BGMP)
  98. #define MS_IP_MSDP PROTOCOL_ID(PROTO_TYPE_MCAST,PROTO_VENDOR_MS1,PROTO_IP_MSDP)
  99. #define MS_IP_DNS_PROXY PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_DNS_PROXY)
  100. #define MS_IP_DHCP_ALLOCATOR PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_DHCP_ALLOCATOR)
  101. #define MS_IP_NAT PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_NAT)
  102. #define MS_IP_DIFFSERV PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_DIFFSERV)
  103. #define MS_IP_MGM PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_MGM)
  104. #define MS_IP_VRRP PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_VRRP)
  105. #define MS_IP_DTP PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_DTP)
  106. #define MS_IP_H323 PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_H323)
  107. #define MS_IP_FTP PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_FTP)
  108. #define MS_IP_ALG PROTOCOL_ID(PROTO_TYPE_MS0,PROTO_VENDOR_MS1,PROTO_IP_ALG)
  109. #define IPX_PROTOCOL_BASE 0x0001ffff
  110. #define IPX_PROTOCOL_RIP IPX_PROTOCOL_BASE + 1
  111. #define IPX_PROTOCOL_SAP IPX_PROTOCOL_BASE + 2
  112. #define IPX_PROTOCOL_NLSP IPX_PROTOCOL_BASE + 3
  113. typedef struct _UPDATE_COMPLETE_MESSAGE {
  114. ULONG InterfaceIndex;
  115. ULONG UpdateType;
  116. ULONG UpdateStatus;
  117. } UPDATE_COMPLETE_MESSAGE,*PUPDATE_COMPLETE_MESSAGE;
  118. typedef union _MESSAGE {
  119. UPDATE_COMPLETE_MESSAGE UpdateCompleteMessage;
  120. DWORD InterfaceIndex;
  121. } MESSAGE,*PMESSAGE;
  122. #define RIS_INTERFACE_ADDRESS_CHANGE 0
  123. #define RIS_INTERFACE_ENABLED 1
  124. #define RIS_INTERFACE_DISABLED 2
  125. #define RIS_INTERFACE_MEDIA_PRESENT 3
  126. #define RIS_INTERFACE_MEDIA_ABSENT 4
  127. typedef struct IPX_ADAPTER_BINDING_INFO {
  128. ULONG AdapterIndex;
  129. UCHAR Network[4];
  130. UCHAR LocalNode[6];
  131. UCHAR RemoteNode[6];
  132. ULONG MaxPacketSize;
  133. ULONG LinkSpeed;
  134. } IPX_ADAPTER_BINDING_INFO,*PIPX_ADAPTER_BINDING_INFO;
  135. typedef struct IP_LOCAL_BINDING {
  136. DWORD Address;
  137. DWORD Mask;
  138. } IP_LOCAL_BINDING,*PIP_LOCAL_BINDING;
  139. typedef struct IP_ADAPTER_BINDING_INFO {
  140. ULONG AddressCount;
  141. DWORD RemoteAddress;
  142. ULONG Mtu;
  143. ULONGLONG Speed;
  144. IP_LOCAL_BINDING Address[0];
  145. } IP_ADAPTER_BINDING_INFO,*PIP_ADAPTER_BINDING_INFO;
  146. #define SIZEOF_IP_BINDING(X) (FIELD_OFFSET(IP_ADAPTER_BINDING_INFO,Address[0]) + ((X) *sizeof(IP_LOCAL_BINDING)))
  147. typedef DWORD (WINAPI *PSTART_PROTOCOL)(HANDLE NotificationEvent,PSUPPORT_FUNCTIONS SupportFunctions,LPVOID GlobalInfo,ULONG StructureVersion,ULONG StructureSize,ULONG StructureCount);
  148. typedef DWORD (WINAPI *PSTART_COMPLETE)(VOID);
  149. typedef DWORD (WINAPI *PSTOP_PROTOCOL)(VOID);
  150. typedef DWORD (WINAPI *PADD_INTERFACE)(LPWSTR InterfaceName,ULONG InterfaceIndex,NET_INTERFACE_TYPE InterfaceType,DWORD MediaType,WORD AccessType,WORD ConnectionType,PVOID InterfaceInfo,ULONG StructureVersion,ULONG StructureSize,ULONG StructureCount);
  151. typedef DWORD (WINAPI *PDELETE_INTERFACE)(ULONG InterfaceIndex);
  152. typedef DWORD (WINAPI *PGET_EVENT_MESSAGE)(ROUTING_PROTOCOL_EVENTS *Event,MESSAGE *Result);
  153. typedef DWORD (WINAPI *PGET_INTERFACE_INFO)(ULONG InterfaceIndex,PVOID InterfaceInfo,PULONG BufferSize,PULONG StructureVersion,PULONG StructureSize,PULONG StructureCount);
  154. typedef DWORD (WINAPI *PSET_INTERFACE_INFO)(ULONG InterfaceIndex,PVOID InterfaceInfo,ULONG StructureVersion,ULONG StructureSize,ULONG StructureCount);
  155. typedef DWORD (WINAPI *PINTERFACE_STATUS)(ULONG InterfaceIndex,WINBOOL InterfaceActive,DWORD StatusType,PVOID StatusInfo);
  156. typedef DWORD (WINAPI *PQUERY_POWER)(DWORD PowerType);
  157. typedef DWORD (WINAPI *PSET_POWER)(DWORD PowerType);
  158. typedef DWORD (WINAPI *PGET_GLOBAL_INFO)(PVOID GlobalInfo,PULONG BufferSize,PULONG StructureVersion,PULONG StructureSize,PULONG StructureCount);
  159. typedef DWORD (WINAPI *PSET_GLOBAL_INFO)(PVOID GlobalInfo,ULONG StructureVersion,ULONG StructureSize,ULONG StructureCount);
  160. typedef DWORD (WINAPI *PDO_UPDATE_ROUTES)(ULONG InterfaceIndex);
  161. typedef DWORD (WINAPI *PMIB_CREATE)(ULONG InputDataSize,PVOID InputData);
  162. typedef DWORD (WINAPI *PMIB_DELETE)(ULONG InputDataSize,PVOID InputData);
  163. typedef DWORD (WINAPI *PMIB_GET)(ULONG InputDataSize,PVOID InputData,PULONG OutputDataSize,PVOID OutputData);
  164. typedef DWORD (WINAPI *PMIB_SET)(ULONG InputDataSize,PVOID InputData);
  165. typedef DWORD (WINAPI *PMIB_GET_FIRST)(ULONG InputDataSize,PVOID InputData,PULONG OutputDataSize,PVOID OutputData);
  166. typedef DWORD (WINAPI *PMIB_GET_NEXT)(ULONG InputDataSize,PVOID InputData,PULONG OutputDataSize,PVOID OutputData);
  167. typedef DWORD (WINAPI *PMIB_SET_TRAP_INFO)(HANDLE Event,ULONG InputDataSize,PVOID InputData,PULONG OutputDataSize,PVOID OutputData);
  168. typedef DWORD (WINAPI *PMIB_GET_TRAP_INFO)(ULONG InputDataSize,PVOID InputData,PULONG OutputDataSize,PVOID OutputData);
  169. typedef DWORD (WINAPI *PCONNECT_CLIENT)(ULONG InterfaceIndex,PVOID ClientAddress);
  170. typedef DWORD (WINAPI *PDISCONNECT_CLIENT)(ULONG InterfaceIndex,PVOID ClientAddress);
  171. #define MRINFO_TUNNEL_FLAG 0x01
  172. #define MRINFO_PIM_FLAG 0x04
  173. #define MRINFO_DOWN_FLAG 0x10
  174. #define MRINFO_DISABLED_FLAG 0x20
  175. #define MRINFO_QUERIER_FLAG 0x40
  176. #define MRINFO_LEAF_FLAG 0x80
  177. typedef DWORD (WINAPI *PGET_NEIGHBORS)(DWORD InterfaceIndex,PDWORD NeighborList,PDWORD NeighborListSize,PBYTE InterfaceFlags);
  178. #define MFE_NO_ERROR 0
  179. #define MFE_REACHED_CORE 1
  180. #define MFE_OIF_PRUNED 5
  181. #define MFE_PRUNED_UPSTREAM 4
  182. #define MFE_OLD_ROUTER 11
  183. #define MFE_NOT_FORWARDING 2
  184. #define MFE_WRONG_IF 3
  185. #define MFE_BOUNDARY_REACHED 6
  186. #define MFE_NO_MULTICAST 7
  187. #define MFE_IIF 8
  188. #define MFE_NO_ROUTE 9
  189. #define MFE_NOT_LAST_HOP 10
  190. #define MFE_PROHIBITED 12
  191. #define MFE_NO_SPACE 13
  192. typedef DWORD (WINAPI *PGET_MFE_STATUS)(DWORD InterfaceIndex,DWORD GroupAddress,DWORD SourceAddress,PBYTE StatusCode);
  193. typedef struct _MPR50_ROUTING_CHARACTERISTICS {
  194. DWORD dwVersion;
  195. DWORD dwProtocolId;
  196. DWORD fSupportedFunctionality;
  197. PSTART_PROTOCOL pfnStartProtocol;
  198. PSTART_COMPLETE pfnStartComplete;
  199. PSTOP_PROTOCOL pfnStopProtocol;
  200. PGET_GLOBAL_INFO pfnGetGlobalInfo;
  201. PSET_GLOBAL_INFO pfnSetGlobalInfo;
  202. PQUERY_POWER pfnQueryPower;
  203. PSET_POWER pfnSetPower;
  204. PADD_INTERFACE pfnAddInterface;
  205. PDELETE_INTERFACE pfnDeleteInterface;
  206. PINTERFACE_STATUS pfnInterfaceStatus;
  207. PGET_INTERFACE_INFO pfnGetInterfaceInfo;
  208. PSET_INTERFACE_INFO pfnSetInterfaceInfo;
  209. PGET_EVENT_MESSAGE pfnGetEventMessage;
  210. PDO_UPDATE_ROUTES pfnUpdateRoutes;
  211. PCONNECT_CLIENT pfnConnectClient;
  212. PDISCONNECT_CLIENT pfnDisconnectClient;
  213. PGET_NEIGHBORS pfnGetNeighbors;
  214. PGET_MFE_STATUS pfnGetMfeStatus;
  215. PMIB_CREATE pfnMibCreateEntry;
  216. PMIB_DELETE pfnMibDeleteEntry;
  217. PMIB_GET pfnMibGetEntry;
  218. PMIB_SET pfnMibSetEntry;
  219. PMIB_GET_FIRST pfnMibGetFirstEntry;
  220. PMIB_GET_NEXT pfnMibGetNextEntry;
  221. PMIB_SET_TRAP_INFO pfnMibSetTrapInfo;
  222. PMIB_GET_TRAP_INFO pfnMibGetTrapInfo;
  223. } MPR50_ROUTING_CHARACTERISTICS;
  224. #if MPR50
  225. typedef MPR50_ROUTING_CHARACTERISTICS MPR_ROUTING_CHARACTERISTICS;
  226. #endif
  227. typedef MPR_ROUTING_CHARACTERISTICS *PMPR_ROUTING_CHARACTERISTICS;
  228. #define REGISTER_PROTOCOL_ENTRY_POINT RegisterProtocol
  229. #define REGISTER_PROTOCOL_ENTRY_POINT_STRING "RegisterProtocol"
  230. typedef DWORD (WINAPI *PREGISTER_PROTOCOL) (PMPR_ROUTING_CHARACTERISTICS pRoutingChar,PMPR_SERVICE_CHARACTERISTICS pServiceChar);
  231. #ifdef __cplusplus
  232. }
  233. #endif
  234. #endif