aboutsummaryrefslogtreecommitdiff
path: root/x86_64-w64-mingw32/include/rtmv2.h
blob: 8c1e52adc04bdf188f002d5d03ecab7253f523fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef __ROUTING_RTMv2_H__
#define __ROUTING_RTMv2_H__

#ifdef __cplusplus
extern "C" {
#endif

#define RTM_MAX_ADDRESS_SIZE 16

#define RTM_MAX_VIEWS 32

#define RTM_VIEW_ID_UCAST 0
#define RTM_VIEW_ID_MCAST 1

#define RTM_VIEW_MASK_SIZE 0x20
#define RTM_VIEW_MASK_NONE 0x00000000
#define RTM_VIEW_MASK_ANY 0x00000000
#define RTM_VIEW_MASK_UCAST 0x00000001
#define RTM_VIEW_MASK_MCAST 0x00000002
#define RTM_VIEW_MASK_ALL 0xFFFFFFFF

  typedef INT RTM_VIEW_ID,*PRTM_VIEW_ID;
  typedef DWORD RTM_VIEW_SET,*PRTM_VIEW_SET;

  typedef struct _RTM_REGN_PROFILE {
    UINT MaxNextHopsInRoute;
    UINT MaxHandlesInEnum;
    RTM_VIEW_SET ViewsSupported;
    UINT NumberOfViews;
  } RTM_REGN_PROFILE,*PRTM_REGN_PROFILE;

  typedef HANDLE RTM_ENTITY_HANDLE,*PRTM_ENTITY_HANDLE,RTM_DEST_HANDLE,*PRTM_DEST_HANDLE,RTM_ROUTE_HANDLE,*PRTM_ROUTE_HANDLE,RTM_NEXTHOP_HANDLE,*PRTM_NEXTHOP_HANDLE,RTM_ENUM_HANDLE,*PRTM_ENUM_HANDLE,RTM_ROUTE_LIST_HANDLE,*PRTM_ROUTE_LIST_HANDLE,RTM_NOTIFY_HANDLE,*PRTM_NOTIFY_HANDLE;

  typedef struct _RTM_NET_ADDRESS {
    USHORT AddressFamily;
    USHORT NumBits;
    UCHAR AddrBits[RTM_MAX_ADDRESS_SIZE];
  } RTM_NET_ADDRESS,*PRTM_NET_ADDRESS;

#define RTM_IPV4_MAKE_NET_ADDRESS(NetAddress,Addr,Len) RTM_IPV4_SET_ADDR_AND_LEN(NetAddress,Addr,Len)

#define RTM_CHECK_NTH_BIT(Value,N,Len) if ((Value) & (1 << (N))) { (Len) += (N); (Value) <<= (N); }
#define RTM_IPV4_LEN_FROM_MASK(Len,Mask) { ULONG _Temp_ = ntohl(Mask); (Len) = 0; RTM_CHECK_NTH_BIT(_Temp_,16,(Len)); RTM_CHECK_NTH_BIT(_Temp_,8,(Len)); RTM_CHECK_NTH_BIT(_Temp_,4,(Len)); while (_Temp_) { (Len) += 1; _Temp_ <<= 1; } }
#define RTM_IPV4_MASK_FROM_LEN(Len) ((Len) ? htonl(~0 << (32 - (Len))): 0);

#define RTM_IPV4_SET_ADDR_AND_LEN(NetAddress,Addr,Len) (NetAddress)->AddressFamily = AF_INET; (NetAddress)->NumBits = (USHORT) (Len); (*(ULONG *) ((NetAddress)->AddrBits)) = (Addr);
#define RTM_IPV4_GET_ADDR_AND_LEN(Addr,Len,NetAddress) (Len) = (NetAddress)->NumBits; (Addr) = (*(ULONG *) ((NetAddress)->AddrBits));
#define RTM_IPV4_SET_ADDR_AND_MASK(NetAddress,Addr,Mask) (NetAddress)->AddressFamily = AF_INET; (*(ULONG *) ((NetAddress)->AddrBits)) = (Addr); RTM_IPV4_LEN_FROM_MASK((NetAddress)->NumBits,Mask)
#define RTM_IPV4_GET_ADDR_AND_MASK(Addr,Mask,NetAddress) (Addr) = (*(ULONG *) ((NetAddress)->AddrBits)); (Mask) = RTM_IPV4_MASK_FROM_LEN((NetAddress)->NumBits);

  typedef struct _RTM_PREF_INFO {
    ULONG Metric;
    ULONG Preference;
  } RTM_PREF_INFO,*PRTM_PREF_INFO;

  typedef struct _RTM_NEXTHOP_LIST {
    USHORT NumNextHops;
    RTM_NEXTHOP_HANDLE NextHops[1];
  } RTM_NEXTHOP_LIST,*PRTM_NEXTHOP_LIST;

  typedef struct _RTM_DEST_INFO {
    RTM_DEST_HANDLE DestHandle;
    RTM_NET_ADDRESS DestAddress;
    FILETIME LastChanged;
    RTM_VIEW_SET BelongsToViews;
    UINT NumberOfViews;
    struct {
      RTM_VIEW_ID ViewId;
      UINT NumRoutes;
      RTM_ROUTE_HANDLE Route;
      RTM_ENTITY_HANDLE Owner;
      DWORD DestFlags;
      RTM_ROUTE_HANDLE HoldRoute;
    } ViewInfo[1];
  } RTM_DEST_INFO,*PRTM_DEST_INFO;

#define RTM_BASIC_DEST_INFO_SIZE FIELD_OFFSET(RTM_DEST_INFO,ViewInfo)
#define RTM_DEST_VIEW_INFO_SIZE (sizeof(RTM_DEST_INFO) - RTM_BASIC_DEST_INFO_SIZE)
#define RTM_SIZE_OF_DEST_INFO(NumViews) (RTM_BASIC_DEST_INFO_SIZE + (NumViews) *RTM_DEST_VIEW_INFO_SIZE)

#define RTM_DEST_FLAG_NATURAL_NET 0x01
#define RTM_DEST_FLAG_FWD_ENGIN_ADD 0x02
#define RTM_DEST_FLAG_DONT_FORWARD 0x04

  typedef struct _RTM_ROUTE_INFO {
    RTM_DEST_HANDLE DestHandle;
    RTM_ENTITY_HANDLE RouteOwner;
    RTM_NEXTHOP_HANDLE Neighbour;
    UCHAR State;
    UCHAR Flags1;
    USHORT Flags;
    RTM_PREF_INFO PrefInfo;
    RTM_VIEW_SET BelongsToViews;
    PVOID EntitySpecificInfo;
    RTM_NEXTHOP_LIST NextHopsList;
  } RTM_ROUTE_INFO,*PRTM_ROUTE_INFO;

#define RTM_BASIC_ROUTE_INFO_SIZE FIELD_OFFSET(RTM_ROUTE_INFO,NextHopsList.NumNextHops)
#define RTM_SIZE_OF_ROUTE_INFO(NumHops) (RTM_BASIC_ROUTE_INFO_SIZE + (NumHops) *sizeof(RTM_NEXTHOP_HANDLE))

#define RTM_ROUTE_STATE_CREATED 0
#define RTM_ROUTE_STATE_DELETING 1
#define RTM_ROUTE_STATE_DELETED 2

#define RTM_ROUTE_FLAGS_MARTIAN 0x0001
#define RTM_ROUTE_FLAGS_BLACKHOLE 0x0002
#define RTM_ROUTE_FLAGS_DISCARD 0x0004
#define RTM_ROUTE_FLAGS_INACTIVE 0x0008

#define RTM_ROUTE_FLAGS_LOCAL 0x0010
#define RTM_ROUTE_FLAGS_REMOTE 0x0020
#define RTM_ROUTE_FLAGS_MYSELF 0x0040

#define RTM_ROUTE_FLAGS_LOOPBACK 0x0080

#define RTM_ROUTE_FLAGS_MCAST 0x0100
#define RTM_ROUTE_FLAGS_LOCAL_MCAST 0x0200

#define RTM_ROUTE_FLAGS_LIMITED_BC 0x0400

#define RTM_ROUTE_FLAGS_ZEROS_NETBC 0x1000
#define RTM_ROUTE_FLAGS_ZEROS_SUBNETBC 0x2000
#define RTM_ROUTE_FLAGS_ONES_NETBC 0x4000
#define RTM_ROUTE_FLAGS_ONES_SUBNETBC 0x8000

#define RTM_ROUTE_FLAGS_FORWARDING (RTM_ROUTE_FLAGS_MARTIAN | RTM_ROUTE_FLAGS_BLACKHOLE | RTM_ROUTE_FLAGS_DISCARD | RTM_ROUTE_FLAGS_INACTIVE)
#define RTM_ROUTE_FLAGS_ANY_UNICAST (RTM_ROUTE_FLAGS_LOCAL | RTM_ROUTE_FLAGS_REMOTE | RTM_ROUTE_FLAGS_MYSELF)
#define RTM_ROUTE_FLAGS_ANY_MCAST (RTM_ROUTE_FLAGS_MCAST | RTM_ROUTE_FLAGS_LOCAL_MCAST)
#define RTM_ROUTE_FLAGS_SUBNET_BCAST (RTM_ROUTE_FLAGS_ONES_SUBNET_BC | RTM_ROUTE_FLAGS_ZEROS_SUBNETBC)
#define RTM_ROUTE_FLAGS_NET_BCAST (RTM_ROUTE_FLAGS_ONES_NETBC | RTM_ROUTE_FLAGS_ZEROS_NETBC)
#define RTM_ROUTE_FLAGS_ANY_BCAST (RTM_ROUTE_FLAGS_LIMITED_BC | RTM_ROUTE_FLAGS_ONES_NETBC | RTM_ROUTE_FLAGS_ONES_SUBNET_BC | RTM_ROUTE_FLAGS_ZEROS_NETBC | RTM_ROUTE_FLAGS_ZEROS_SUBNETBC)

  typedef struct _RTM_NEXTHOP_INFO {
    RTM_NET_ADDRESS NextHopAddress;
    RTM_ENTITY_HANDLE NextHopOwner;
    ULONG InterfaceIndex;
    USHORT State;
    USHORT Flags;
    PVOID EntitySpecificInfo;
    RTM_DEST_HANDLE RemoteNextHop;
  } RTM_NEXTHOP_INFO,*PRTM_NEXTHOP_INFO;

#define RTM_NEXTHOP_STATE_CREATED 0
#define RTM_NEXTHOP_STATE_DELETED 1

#define RTM_NEXTHOP_FLAGS_REMOTE 0x0001
#define RTM_NEXTHOP_FLAGS_DOWN 0x0002

  typedef struct _RTM_ENTITY_ID {
    __C89_NAMELESS union {
      __C89_NAMELESS struct {
	ULONG EntityProtocolId;
	ULONG EntityInstanceId;
      };
      ULONGLONG EntityId;
    };
  } RTM_ENTITY_ID,*PRTM_ENTITY_ID;

  typedef struct _RTM_ENTITY_INFO {
    USHORT RtmInstanceId;
    USHORT AddressFamily;
    RTM_ENTITY_ID EntityId;
  } RTM_ENTITY_INFO,*PRTM_ENTITY_INFO;

  typedef enum _RTM_EVENT_TYPE {
    RTM_ENTITY_REGISTERED,RTM_ENTITY_DEREGISTERED,RTM_ROUTE_EXPIRED,RTM_CHANGE_NOTIFICATION
  } RTM_EVENT_TYPE,*PRTM_EVENT_TYPE;

  typedef DWORD (WINAPI *_EVENT_CALLBACK)(RTM_ENTITY_HANDLE RtmRegHandle,RTM_EVENT_TYPE EventType,PVOID Context1,PVOID Context2);

  typedef _EVENT_CALLBACK RTM_EVENT_CALLBACK,*PRTM_EVENT_CALLBACK;

#define METHOD_TYPE_ALL_METHODS 0xFFFFFFFF

#define METHOD_RIP2_NEIGHBOUR_ADDR 0x00000001
#define METHOD_RIP2_OUTBOUND_INTF 0x00000002
#define METHOD_RIP2_ROUTE_TAG 0x00000004
#define METHOD_RIP2_ROUTE_TIMESTAMP 0x00000008

#define METHOD_OSPF_ROUTE_TYPE 0x00000001
#define METHOD_OSPF_ROUTE_METRIC 0x00000002
#define METHOD_OSPF_LSDB_TYPE 0x00000004
#define METHOD_OSPF_ROUTE_TAG 0x00000008
#define METHOD_OSPF_ROUTE_AREA 0x00000010
#define METHOD_OSPF_FWD_ADDRESS 0x00000020

#define METHOD_BGP4_AS_PATH 0x00000001
#define METHOD_BGP4_PEER_ID 0x00000002
#define METHOD_BGP4_PA_ORIGIN 0x00000004
#define METHOD_BGP4_NEXTHOP_ATTR 0x00000008

  typedef DWORD RTM_ENTITY_METHOD_TYPE,*PRTM_ENTITY_METHOD_TYPE;

  typedef struct _RTM_ENTITY_METHOD_INPUT {
    RTM_ENTITY_METHOD_TYPE MethodType;
    UINT InputSize;
    UCHAR InputData[1];
  } RTM_ENTITY_METHOD_INPUT,*PRTM_ENTITY_METHOD_INPUT;

  typedef struct _RTM_ENTITY_METHOD_OUTPUT {
    RTM_ENTITY_METHOD_TYPE MethodType;
    DWORD MethodStatus;
    UINT OutputSize;
    UCHAR OutputData[1];
  } RTM_ENTITY_METHOD_OUTPUT,*PRTM_ENTITY_METHOD_OUTPUT;

  typedef VOID (WINAPI *_ENTITY_METHOD)(RTM_ENTITY_HANDLE CallerHandle,RTM_ENTITY_HANDLE CalleeHandle,RTM_ENTITY_METHOD_INPUT *Input,RTM_ENTITY_METHOD_OUTPUT *Output);

  typedef _ENTITY_METHOD RTM_ENTITY_EXPORT_METHOD,*PRTM_ENTITY_EXPORT_METHOD;

  typedef struct _RTM_ENTITY_EXPORT_METHODS {
    UINT NumMethods;
    RTM_ENTITY_EXPORT_METHOD Methods[1];
  } RTM_ENTITY_EXPORT_METHODS,*PRTM_ENTITY_EXPORT_METHODS;

#define RTM_RESUME_METHODS 0
#define RTM_BLOCK_METHODS 1

  typedef DWORD RTM_ROUTE_CHANGE_FLAGS,*PRTM_ROUTE_CHANGE_FLAGS;

#define RTM_ROUTE_CHANGE_FIRST 0x01
#define RTM_ROUTE_CHANGE_NEW 0x02
#define RTM_ROUTE_CHANGE_BEST 0x00010000

  typedef DWORD RTM_NEXTHOP_CHANGE_FLAGS,*PRTM_NEXTHOP_CHANGE_FLAGS;

#define RTM_NEXTHOP_CHANGE_NEW 0x01

  typedef DWORD RTM_MATCH_FLAGS,*PRTM_MATCH_FLAGS;

#define RTM_MATCH_NONE 0x00000000
#define RTM_MATCH_OWNER 0x00000001
#define RTM_MATCH_NEIGHBOUR 0x00000002
#define RTM_MATCH_PREF 0x00000004
#define RTM_MATCH_NEXTHOP 0x00000008
#define RTM_MATCH_INTERFACE 0x00000010
#define RTM_MATCH_FULL 0x0000FFFF

#define RTM_BEST_PROTOCOL (ULONG) 0
#define RTM_THIS_PROTOCOL (ULONG) ~0

  typedef DWORD RTM_ENUM_FLAGS,*PRTM_ENUM_FLAGS;

#define RTM_ENUM_START 0x00000000
#define RTM_ENUM_NEXT 0x00000001
#define RTM_ENUM_RANGE 0x00000002

#define RTM_ENUM_ALL_DESTS 0x00000000
#define RTM_ENUM_OWN_DESTS 0x01000000

#define RTM_ENUM_ALL_ROUTES 0x00000000
#define RTM_ENUM_OWN_ROUTES 0x00010000

  typedef DWORD RTM_NOTIFY_FLAGS,*PRTM_NOTIFY_FLAGS;

#define RTM_NUM_CHANGE_TYPES 3

#define RTM_CHANGE_TYPE_ALL 0x0001
#define RTM_CHANGE_TYPE_BEST 0x0002
#define RTM_CHANGE_TYPE_FORWARDING 0x0004

#define RTM_NOTIFY_ONLY_MARKED_DESTS 0x00010000

  DWORD WINAPI RtmRegisterEntity(PRTM_ENTITY_INFO RtmEntityInfo,PRTM_ENTITY_EXPORT_METHODS ExportMethods,RTM_EVENT_CALLBACK EventCallback,WINBOOL ReserveOpaquePointer,PRTM_REGN_PROFILE RtmRegProfile,PRTM_ENTITY_HANDLE RtmRegHandle);
  DWORD WINAPI RtmDeregisterEntity(RTM_ENTITY_HANDLE RtmRegHandle);
  DWORD WINAPI RtmGetRegisteredEntities(RTM_ENTITY_HANDLE RtmRegHandle,PUINT NumEntities,PRTM_ENTITY_HANDLE EntityHandles,PRTM_ENTITY_INFO EntityInfos);
  DWORD WINAPI RtmReleaseEntities(RTM_ENTITY_HANDLE RtmRegHandle,UINT NumEntities,PRTM_ENTITY_HANDLE EntityHandles);
  DWORD WINAPI RtmLockDestination(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,WINBOOL Exclusive,WINBOOL LockDest);
  DWORD WINAPI RtmGetOpaqueInformationPointer(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,PVOID *OpaqueInfoPointer);
  DWORD WINAPI RtmGetEntityMethods(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENTITY_HANDLE EntityHandle,PUINT NumMethods,PRTM_ENTITY_EXPORT_METHOD ExptMethods);
  DWORD WINAPI RtmInvokeMethod(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENTITY_HANDLE EntityHandle,PRTM_ENTITY_METHOD_INPUT Input,PUINT OutputSize,PRTM_ENTITY_METHOD_OUTPUT Output);
  DWORD WINAPI RtmBlockMethods(RTM_ENTITY_HANDLE RtmRegHandle,HANDLE TargetHandle,UCHAR TargetType,DWORD BlockingFlag);
  DWORD WINAPI RtmGetEntityInfo(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENTITY_HANDLE EntityHandle,PRTM_ENTITY_INFO EntityInfo);
  DWORD WINAPI RtmGetDestInfo(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,ULONG ProtocolId,RTM_VIEW_SET TargetViews,PRTM_DEST_INFO DestInfo);
  DWORD WINAPI RtmGetRouteInfo(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,PRTM_ROUTE_INFO RouteInfo,PRTM_NET_ADDRESS DestAddress);
  DWORD WINAPI RtmGetNextHopInfo(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NEXTHOP_HANDLE NextHopHandle,PRTM_NEXTHOP_INFO NextHopInfo);
  DWORD WINAPI RtmReleaseEntityInfo(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_ENTITY_INFO EntityInfo);
  DWORD WINAPI RtmReleaseDestInfo(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_DEST_INFO DestInfo);
  DWORD WINAPI RtmReleaseRouteInfo(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_ROUTE_INFO RouteInfo);
  DWORD WINAPI RtmReleaseNextHopInfo(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NEXTHOP_INFO NextHopInfo);
  DWORD WINAPI RtmAddRouteToDest(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_ROUTE_HANDLE RouteHandle,PRTM_NET_ADDRESS DestAddress,PRTM_ROUTE_INFO RouteInfo,ULONG TimeToLive,RTM_ROUTE_LIST_HANDLE RouteListHandle,RTM_NOTIFY_FLAGS NotifyType,RTM_NOTIFY_HANDLE NotifyHandle,PRTM_ROUTE_CHANGE_FLAGS ChangeFlags);
  DWORD WINAPI RtmDeleteRouteToDest(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,PRTM_ROUTE_CHANGE_FLAGS ChangeFlags);
  DWORD WINAPI RtmHoldDestination(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,RTM_VIEW_SET TargetViews,ULONG HoldTime);
  DWORD WINAPI RtmGetRoutePointer(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,PRTM_ROUTE_INFO *RoutePointer);
  DWORD WINAPI RtmLockRoute(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,WINBOOL Exclusive,WINBOOL LockRoute,PRTM_ROUTE_INFO *RoutePointer);
  DWORD WINAPI RtmUpdateAndUnlockRoute(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,ULONG TimeToLive,RTM_ROUTE_LIST_HANDLE RouteListHandle,RTM_NOTIFY_FLAGS NotifyType,RTM_NOTIFY_HANDLE NotifyHandle,PRTM_ROUTE_CHANGE_FLAGS ChangeFlags);
  DWORD WINAPI RtmGetExactMatchDestination(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NET_ADDRESS DestAddress,ULONG ProtocolId,RTM_VIEW_SET TargetViews,PRTM_DEST_INFO DestInfo);
  DWORD WINAPI RtmGetMostSpecificDestination(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NET_ADDRESS DestAddress,ULONG ProtocolId,RTM_VIEW_SET TargetViews,PRTM_DEST_INFO DestInfo);
  DWORD WINAPI RtmGetLessSpecificDestination(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,ULONG ProtocolId,RTM_VIEW_SET TargetViews,PRTM_DEST_INFO DestInfo);
  DWORD WINAPI RtmGetExactMatchRoute(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NET_ADDRESS DestAddress,RTM_MATCH_FLAGS MatchingFlags,PRTM_ROUTE_INFO RouteInfo,ULONG InterfaceIndex,RTM_VIEW_SET TargetViews,PRTM_ROUTE_HANDLE RouteHandle);
  DWORD WINAPI RtmIsBestRoute(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_HANDLE RouteHandle,PRTM_VIEW_SET BestInViews);
  DWORD WINAPI RtmAddNextHop(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NEXTHOP_INFO NextHopInfo,PRTM_NEXTHOP_HANDLE NextHopHandle,PRTM_NEXTHOP_CHANGE_FLAGS ChangeFlags);
  DWORD WINAPI RtmFindNextHop(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_NEXTHOP_INFO NextHopInfo,PRTM_NEXTHOP_HANDLE NextHopHandle,PRTM_NEXTHOP_INFO *NextHopPointer);
  DWORD WINAPI RtmDeleteNextHop(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NEXTHOP_HANDLE NextHopHandle,PRTM_NEXTHOP_INFO NextHopInfo);
  DWORD WINAPI RtmGetNextHopPointer(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NEXTHOP_HANDLE NextHopHandle,PRTM_NEXTHOP_INFO *NextHopPointer);
  DWORD WINAPI RtmLockNextHop(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NEXTHOP_HANDLE NextHopHandle,WINBOOL Exclusive,WINBOOL LockNextHop,PRTM_NEXTHOP_INFO *NextHopPointer);
  DWORD WINAPI RtmCreateDestEnum(RTM_ENTITY_HANDLE RtmRegHandle,RTM_VIEW_SET TargetViews,RTM_ENUM_FLAGS EnumFlags,PRTM_NET_ADDRESS NetAddress,ULONG ProtocolId,PRTM_ENUM_HANDLE RtmEnumHandle);
  DWORD WINAPI RtmGetEnumDests(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_HANDLE EnumHandle,PUINT NumDests,PRTM_DEST_INFO DestInfos);
  DWORD WINAPI RtmReleaseDests(RTM_ENTITY_HANDLE RtmRegHandle,UINT NumDests,PRTM_DEST_INFO DestInfos);
  DWORD WINAPI RtmCreateRouteEnum(RTM_ENTITY_HANDLE RtmRegHandle,RTM_DEST_HANDLE DestHandle,RTM_VIEW_SET TargetViews,RTM_ENUM_FLAGS EnumFlags,PRTM_NET_ADDRESS StartDest,RTM_MATCH_FLAGS MatchingFlags,PRTM_ROUTE_INFO CriteriaRoute,ULONG CriteriaInterface,PRTM_ENUM_HANDLE RtmEnumHandle);
  DWORD WINAPI RtmGetEnumRoutes(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_HANDLE EnumHandle,PUINT NumRoutes,PRTM_ROUTE_HANDLE RouteHandles);
  DWORD WINAPI RtmReleaseRoutes(RTM_ENTITY_HANDLE RtmRegHandle,UINT NumRoutes,PRTM_ROUTE_HANDLE RouteHandles);
  DWORD WINAPI RtmCreateNextHopEnum(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_FLAGS EnumFlags,PRTM_NET_ADDRESS NetAddress,PRTM_ENUM_HANDLE RtmEnumHandle);
  DWORD WINAPI RtmGetEnumNextHops(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_HANDLE EnumHandle,PUINT NumNextHops,PRTM_NEXTHOP_HANDLE NextHopHandles);
  DWORD WINAPI RtmReleaseNextHops(RTM_ENTITY_HANDLE RtmRegHandle,UINT NumNextHops,PRTM_NEXTHOP_HANDLE NextHopHandles);
  DWORD WINAPI RtmDeleteEnumHandle(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_HANDLE EnumHandle);
  DWORD WINAPI RtmRegisterForChangeNotification(RTM_ENTITY_HANDLE RtmRegHandle,RTM_VIEW_SET TargetViews,RTM_NOTIFY_FLAGS NotifyFlags,PVOID NotifyContext,PRTM_NOTIFY_HANDLE NotifyHandle);
  DWORD WINAPI RtmGetChangedDests(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,PUINT NumDests,PRTM_DEST_INFO ChangedDests);
  DWORD WINAPI RtmReleaseChangedDests(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,UINT NumDests,PRTM_DEST_INFO ChangedDests);
  DWORD WINAPI RtmIgnoreChangedDests(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,UINT NumDests,PRTM_DEST_HANDLE ChangedDests);
  DWORD WINAPI RtmGetChangeStatus(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,RTM_DEST_HANDLE DestHandle,PBOOL ChangeStatus);
  DWORD WINAPI RtmMarkDestForChangeNotification(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,RTM_DEST_HANDLE DestHandle,WINBOOL MarkDest);
  DWORD WINAPI RtmIsMarkedForChangeNotification(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle,RTM_DEST_HANDLE DestHandle,PBOOL DestMarked);
  DWORD WINAPI RtmDeregisterFromChangeNotification(RTM_ENTITY_HANDLE RtmRegHandle,RTM_NOTIFY_HANDLE NotifyHandle);
  DWORD WINAPI RtmCreateRouteList(RTM_ENTITY_HANDLE RtmRegHandle,PRTM_ROUTE_LIST_HANDLE RouteListHandle);
  DWORD WINAPI RtmInsertInRouteList(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_LIST_HANDLE RouteListHandle,UINT NumRoutes,PRTM_ROUTE_HANDLE RouteHandles);
  DWORD WINAPI RtmCreateRouteListEnum(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_LIST_HANDLE RouteListHandle,PRTM_ENUM_HANDLE RtmEnumHandle);
  DWORD WINAPI RtmGetListEnumRoutes(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ENUM_HANDLE EnumHandle,PUINT NumRoutes,PRTM_ROUTE_HANDLE RouteHandles);
  DWORD WINAPI RtmDeleteRouteList(RTM_ENTITY_HANDLE RtmRegHandle,RTM_ROUTE_LIST_HANDLE RouteListHandle);
  DWORD WINAPI RtmReferenceHandles(RTM_ENTITY_HANDLE RtmRegHandle,UINT NumHandles,HANDLE *RtmHandles);

#ifdef __cplusplus
}
#endif
#endif