RtmV2.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:35k
- /*++
- Copyright (c) Microsoft Corporation. All rights reserved.
- Module Name:
- rtmv2.h
- Abstract:
- Interface for Routing Table Manager v2 DLL
- Author:
- Chaitanya Kodeboyina (chaitk) 01-Jun-1998
- Revision History:
- --*/
- #ifndef __ROUTING_RTMv2_H__
- #define __ROUTING_RTMv2_H__
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- //
- // General Constants defined by the API
- //
- // Max addr size for an address family
- #define RTM_MAX_ADDRESS_SIZE 16
- //
- // Supported Route Table Views
- //
- #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
- // Identifies a particular view
- typedef INT RTM_VIEW_ID, *PRTM_VIEW_ID;
- // Set of views expressed as a mask
- typedef DWORD RTM_VIEW_SET, *PRTM_VIEW_SET;
- //
- // Profile returned during registration
- //
- typedef struct _RTM_REGN_PROFILE
- {
- UINT MaxNextHopsInRoute; // Max. number of equal cost nexthops
- // in a route, & Max. number of local
- // nexthops in any one remote nexthop
- UINT MaxHandlesInEnum; // Max. handles returned in one call to
- // RtmGetEnumDests, RtmGetChangedDests,
- // RtmGetEnumRoutes,RtmGetRoutesInElist
- RTM_VIEW_SET ViewsSupported; // Views supported by this addr family
- UINT NumberOfViews; // Number of views (# 1s in above mask)
- }
- RTM_REGN_PROFILE, *PRTM_REGN_PROFILE;
- //
- // Handles pointing to RTMv2 blocks
- //
- 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;
- //
- // Network Address struct for any
- // address family that works with
- // only contiguous address masks
- //
- typedef struct _RTM_NET_ADDRESS
- {
- USHORT AddressFamily; // Type of this net address (IPv4..)
- USHORT NumBits; // Number of leading bits in prefix
- UCHAR AddrBits[RTM_MAX_ADDRESS_SIZE]; // Array of bits that form prefix
- }
- RTM_NET_ADDRESS, *PRTM_NET_ADDRESS;
- //
- // IPv4 macros to work on addresses
- //
- #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);
- //
- // This structure encapsulates info
- // used in comparing any two routes
- // [Preference is impt than metric]
- //
- typedef struct _RTM_PREF_INFO
- {
- ULONG Metric; // Routing protocol specific metric
- ULONG Preference; // Determined by the router policy
- }
- RTM_PREF_INFO, *PRTM_PREF_INFO;
- //
- // List of nexthops used for equal
- // cost path in a route or nexthop
- //
- typedef struct _RTM_NEXTHOP_LIST
- {
- USHORT NumNextHops; // Num of equal cost next hops in list
- RTM_NEXTHOP_HANDLE NextHops[1]; // NumNextHops num of next hop handles
- }
- RTM_NEXTHOP_LIST, *PRTM_NEXTHOP_LIST;
- //
- // Structure used to exchange dest
- // information with RTM entities
- //
- typedef struct _RTM_DEST_INFO
- {
- RTM_DEST_HANDLE DestHandle; // Handle to the destination
- RTM_NET_ADDRESS DestAddress; // Destination network Address
- FILETIME LastChanged; // Last time dest was modified
- RTM_VIEW_SET BelongsToViews; // View that dest belongs too
- UINT NumberOfViews; // Number of view info slots
- struct
- {
- RTM_VIEW_ID ViewId; // View ID for this view info block
- UINT NumRoutes; // Number of routes,
- RTM_ROUTE_HANDLE Route; // Best route with matching criteria
- RTM_ENTITY_HANDLE Owner; // Best Route's Owner,
- DWORD DestFlags; // Best Route's Flags, and
- RTM_ROUTE_HANDLE HoldRoute; // Holddown route,
- } ViewInfo[1]; // in each one of the supported views
- }
- RTM_DEST_INFO, *PRTM_DEST_INFO;
- //
- // Macros useful in working on dests
- //
- #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)
- //
- // Destination Flags
- //
- #define RTM_DEST_FLAG_NATURAL_NET 0x01
- #define RTM_DEST_FLAG_FWD_ENGIN_ADD 0x02
- #define RTM_DEST_FLAG_DONT_FORWARD 0x04
- //
- // Structure used to exchange route
- // information with RTM entities
- //
- typedef struct _RTM_ROUTE_INFO
- {
- //
- // Information that the owner can
- // directly access for read only
- //
- RTM_DEST_HANDLE DestHandle; // Handle to owning destination
- RTM_ENTITY_HANDLE RouteOwner; // Entity the owns this route
- RTM_NEXTHOP_HANDLE Neighbour; // Neighbour we learnt route from
- UCHAR State; // See RTM_ROUTE_STATE_* below
- //
- // Information that the owner can
- // directly access for read/write
- //
- UCHAR Flags1; // RTM v1 compatibility flags (temp)
- USHORT Flags; // See RTM_ROUTE_FLAGS_* below
- RTM_PREF_INFO PrefInfo; // Preference and metric for route
- RTM_VIEW_SET BelongsToViews; // Views that route belongs to
- PVOID EntitySpecificInfo; // Owning Entity's private info
- RTM_NEXTHOP_LIST NextHopsList; // List of equal cost next-hops
- }
- RTM_ROUTE_INFO, *PRTM_ROUTE_INFO;
- //
- // Macros useful in working on routes
- //
- #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))
- //
- // State of the Route
- //
- #define RTM_ROUTE_STATE_CREATED 0
- #define RTM_ROUTE_STATE_DELETING 1
- #define RTM_ROUTE_STATE_DELETED 2
- //
- // Route Information Flags
- //
- // Forwarding Flags
- #define RTM_ROUTE_FLAGS_MARTIAN 0x0001
- #define RTM_ROUTE_FLAGS_BLACKHOLE 0x0002
- #define RTM_ROUTE_FLAGS_DISCARD 0x0004
- #define RTM_ROUTE_FLAGS_INACTIVE 0x0008
- // Unicast Flags
- #define RTM_ROUTE_FLAGS_LOCAL 0x0010
- #define RTM_ROUTE_FLAGS_REMOTE 0x0020
- #define RTM_ROUTE_FLAGS_MYSELF 0x0040
- #define RTM_ROUTE_FLAGS_LOOPBACK 0x0080
- // Bcast, Mcast Flags
- #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
- // Grouping of Flags
- #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)
- //
- // Structure used to exchange next-hop
- // information with RTM entities
- //
- typedef struct _RTM_NEXTHOP_INFO
- {
- //
- // Information that the owner can
- // directly access for read only
- //
- RTM_NET_ADDRESS NextHopAddress; // Net Address for this next hop
- RTM_ENTITY_HANDLE NextHopOwner; // Entity that owns this next hop
- ULONG InterfaceIndex; // Outgoing interface index
- // '0' for a remote nexthop
- USHORT State; // See RTM_NEXTHOP_STATE_* below
- //
- // Information that the owner can
- // directly access for read/write
- //
- USHORT Flags; // See RTM_NEXTHOP_FLAGS_* below
- PVOID EntitySpecificInfo; // Owning Entity's private info
- RTM_DEST_HANDLE RemoteNextHop; // Handle to dest with nexthop addr
- // [ Not used for a local nexthop ]
- }
- RTM_NEXTHOP_INFO, *PRTM_NEXTHOP_INFO;
- //
- // Next Hop State
- //
- #define RTM_NEXTHOP_STATE_CREATED 0
- #define RTM_NEXTHOP_STATE_DELETED 1
- //
- // Next Hop Flags
- //
- #define RTM_NEXTHOP_FLAGS_REMOTE 0x0001
- #define RTM_NEXTHOP_FLAGS_DOWN 0x0002
- //
- // Entity Registration Related Defns
- //
- //
- // Info that uniquely identifies an entity
- //
- // Disable warnings for unnamed structs
- #if _MSC_VER >= 1200
- #pragma warning(push)
- #endif
- #pragma warning(disable : 4201)
- typedef struct _RTM_ENTITY_ID
- {
- union
- {
- struct
- {
- ULONG EntityProtocolId; // Entity's Protocol ID (RIP,OSPF...)
- ULONG EntityInstanceId; // Entity's Protocol Instance
- };
- ULONGLONG EntityId; // Protocol ID and Instance
- };
- }
- RTM_ENTITY_ID, *PRTM_ENTITY_ID;
- #if _MSC_VER >= 1200
- #pragma warning(pop)
- #else
- #pragma warning(default : 4201)
- #endif
- //
- // Structure used to exchange entity
- // information with RTM entities
- //
- typedef struct _RTM_ENTITY_INFO
- {
- USHORT RtmInstanceId; // RTM Instance that it registered with
- USHORT AddressFamily; // Entity's Address Family
- RTM_ENTITY_ID EntityId; // Uniquely identifies an entity
- }
- RTM_ENTITY_INFO, *PRTM_ENTITY_INFO;
- //
- // Event in the RTM involving an entity
- //
- typedef enum _RTM_EVENT_TYPE
- {
- RTM_ENTITY_REGISTERED,
- RTM_ENTITY_DEREGISTERED,
- RTM_ROUTE_EXPIRED,
- RTM_CHANGE_NOTIFICATION
- }
- RTM_EVENT_TYPE, *PRTM_EVENT_TYPE;
- //
- // Entity event inform callback
- //
- // Used to inform entities of
- // new entities registering,
- // or entities deregistering
- //
- typedef
- DWORD
- (WINAPI * _EVENT_CALLBACK) (
- IN RTM_ENTITY_HANDLE RtmRegHandle, // Callee's Registration Handle
- IN RTM_EVENT_TYPE EventType,
- IN PVOID Context1,
- IN PVOID Context2
- );
- typedef _EVENT_CALLBACK RTM_EVENT_CALLBACK,
- *PRTM_EVENT_CALLBACK;
- //
- // Methods exported by a registered entity
- //
- #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;
- //
- // Generic Input Structure for entity methods
- //
- typedef struct _RTM_ENTITY_METHOD_INPUT
- {
- RTM_ENTITY_METHOD_TYPE MethodType; // Type identifying the method
- UINT InputSize; // Input Data Size
- UCHAR InputData[1]; // Input Data Buffer
- }
- RTM_ENTITY_METHOD_INPUT, *PRTM_ENTITY_METHOD_INPUT;
- //
- // Generic Output Structure for entity methods
- //
- typedef struct _RTM_ENTITY_METHOD_OUTPUT
- {
- RTM_ENTITY_METHOD_TYPE MethodType; // Type identifying the method
- DWORD MethodStatus; // Return Status of method
- UINT OutputSize; // Output Data Size
- UCHAR OutputData[1]; // Output Data Buffer
- }
- RTM_ENTITY_METHOD_OUTPUT, *PRTM_ENTITY_METHOD_OUTPUT;
- //
- // Common prototype for entity methods
- //
- typedef
- VOID
- (WINAPI * _ENTITY_METHOD) (
- IN RTM_ENTITY_HANDLE CallerHandle,
- IN RTM_ENTITY_HANDLE CalleeHandle,
- IN RTM_ENTITY_METHOD_INPUT *Input,
- OUT RTM_ENTITY_METHOD_OUTPUT *Output
- );
- typedef _ENTITY_METHOD RTM_ENTITY_EXPORT_METHOD,
- *PRTM_ENTITY_EXPORT_METHOD;
- //
- // Set of exported entity methods
- //
- typedef struct _RTM_ENTITY_EXPORT_METHODS
- {
- UINT NumMethods;
- RTM_ENTITY_EXPORT_METHOD Methods[1];
- }
- RTM_ENTITY_EXPORT_METHODS, *PRTM_ENTITY_EXPORT_METHODS;
- //
- // To toggle method blocking on dests, routes and nexthops
- //
- #define RTM_RESUME_METHODS 0
- #define RTM_BLOCK_METHODS 1
- //
- // I/O Flags when route is added/updated
- //
- 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
- //
- // Output flags when nexthop is added
- //
- typedef DWORD RTM_NEXTHOP_CHANGE_FLAGS,
- *PRTM_NEXTHOP_CHANGE_FLAGS;
- #define RTM_NEXTHOP_CHANGE_NEW 0x01
- //
- // Definitions relating to RIB queries
- //
- //
- // Flags used to matching routes in RIB
- //
- 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
- //
- // Flags to specify route being queried
- //
- #define RTM_BEST_PROTOCOL (ULONG) 0
- #define RTM_THIS_PROTOCOL (ULONG) ~0
- //
- // Definitions relating to enumerations
- //
- typedef DWORD RTM_ENUM_FLAGS,
- *PRTM_ENUM_FLAGS;
- // Enumeration 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
- //
- // Definitions relating to notifications
- //
- // Notify Flags is composed as follows -
- // (Change Types | Dests) interested in.
- typedef DWORD RTM_NOTIFY_FLAGS,
- *PRTM_NOTIFY_FLAGS;
- // Change Types to notify about
- #define RTM_NUM_CHANGE_TYPES 3
- #define RTM_CHANGE_TYPE_ALL 0x0001
- #define RTM_CHANGE_TYPE_BEST 0x0002
- #define RTM_CHANGE_TYPE_FORWARDING 0x0004
- // Dests whose changes to notify
- #define RTM_NOTIFY_ONLY_MARKED_DESTS 0x00010000
- //
- // Registration API Prototypes
- //
- DWORD
- WINAPI
- RtmRegisterEntity (
- IN PRTM_ENTITY_INFO RtmEntityInfo,
- IN PRTM_ENTITY_EXPORT_METHODS ExportMethods OPTIONAL,
- IN RTM_EVENT_CALLBACK EventCallback,
- IN BOOL ReserveOpaquePointer,
- OUT PRTM_REGN_PROFILE RtmRegProfile,
- OUT PRTM_ENTITY_HANDLE RtmRegHandle
- );
- DWORD
- WINAPI
- RtmDeregisterEntity (
- IN RTM_ENTITY_HANDLE RtmRegHandle
- );
- DWORD
- WINAPI
- RtmGetRegisteredEntities (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN OUT PUINT NumEntities,
- OUT PRTM_ENTITY_HANDLE EntityHandles,
- OUT PRTM_ENTITY_INFO EntityInfos OPTIONAL
- );
- DWORD
- WINAPI
- RtmReleaseEntities (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN UINT NumEntities,
- IN PRTM_ENTITY_HANDLE EntityHandles
- );
- //
- // Opaque Ptr APIs
- //
- DWORD
- WINAPI
- RtmLockDestination(
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle,
- IN BOOL Exclusive,
- IN BOOL LockDest
- );
- DWORD
- WINAPI
- RtmGetOpaqueInformationPointer (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle,
- OUT PVOID *OpaqueInfoPointer
- );
- //
- // Export Method API Prototypes
- //
- DWORD
- WINAPI
- RtmGetEntityMethods (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENTITY_HANDLE EntityHandle,
- IN OUT PUINT NumMethods,
- OUT PRTM_ENTITY_EXPORT_METHOD ExptMethods
- );
- DWORD
- WINAPI
- RtmInvokeMethod (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENTITY_HANDLE EntityHandle,
- IN PRTM_ENTITY_METHOD_INPUT Input,
- IN OUT PUINT OutputSize,
- OUT PRTM_ENTITY_METHOD_OUTPUT Output
- );
- DWORD
- WINAPI
- RtmBlockMethods (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN HANDLE TargetHandle OPTIONAL,
- IN UCHAR TargetType OPTIONAL,
- IN DWORD BlockingFlag
- );
- //
- // Handle to Info Structures
- //
- DWORD
- WINAPI
- RtmGetEntityInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENTITY_HANDLE EntityHandle,
- OUT PRTM_ENTITY_INFO EntityInfo
- );
- DWORD
- WINAPI
- RtmGetDestInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle,
- IN ULONG ProtocolId,
- IN RTM_VIEW_SET TargetViews,
- OUT PRTM_DEST_INFO DestInfo
- );
- DWORD
- WINAPI
- RtmGetRouteInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- OUT PRTM_ROUTE_INFO RouteInfo OPTIONAL,
- OUT PRTM_NET_ADDRESS DestAddress OPTIONAL
- );
- DWORD
- WINAPI
- RtmGetNextHopInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NEXTHOP_HANDLE NextHopHandle,
- OUT PRTM_NEXTHOP_INFO NextHopInfo
- );
- DWORD
- WINAPI
- RtmReleaseEntityInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_ENTITY_INFO EntityInfo
- );
- DWORD
- WINAPI
- RtmReleaseDestInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_DEST_INFO DestInfo
- );
- DWORD
- WINAPI
- RtmReleaseRouteInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_ROUTE_INFO RouteInfo
- );
- DWORD
- WINAPI
- RtmReleaseNextHopInfo (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NEXTHOP_INFO NextHopInfo
- );
- //
- // RIB Insert/Delete API Prototypes
- //
- DWORD
- WINAPI
- RtmAddRouteToDest (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN OUT PRTM_ROUTE_HANDLE RouteHandle OPTIONAL,
- IN PRTM_NET_ADDRESS DestAddress,
- IN PRTM_ROUTE_INFO RouteInfo,
- IN ULONG TimeToLive,
- IN RTM_ROUTE_LIST_HANDLE RouteListHandle OPTIONAL,
- IN RTM_NOTIFY_FLAGS NotifyType,
- IN RTM_NOTIFY_HANDLE NotifyHandle OPTIONAL,
- IN OUT PRTM_ROUTE_CHANGE_FLAGS ChangeFlags
- );
- DWORD
- WINAPI
- RtmDeleteRouteToDest (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- OUT PRTM_ROUTE_CHANGE_FLAGS ChangeFlags
- );
- DWORD
- WINAPI
- RtmHoldDestination (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle,
- IN RTM_VIEW_SET TargetViews,
- IN ULONG HoldTime
- );
- DWORD
- WINAPI
- RtmGetRoutePointer (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- OUT PRTM_ROUTE_INFO *RoutePointer
- );
- DWORD
- WINAPI
- RtmLockRoute(
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- IN BOOL Exclusive,
- IN BOOL LockRoute,
- OUT PRTM_ROUTE_INFO *RoutePointer OPTIONAL
- );
- DWORD
- WINAPI
- RtmUpdateAndUnlockRoute(
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- IN ULONG TimeToLive,
- IN RTM_ROUTE_LIST_HANDLE RouteListHandle OPTIONAL,
- IN RTM_NOTIFY_FLAGS NotifyType,
- IN RTM_NOTIFY_HANDLE NotifyHandle OPTIONAL,
- OUT PRTM_ROUTE_CHANGE_FLAGS ChangeFlags
- );
- //
- // RIB Query API Prototypes
- //
- DWORD
- WINAPI
- RtmGetExactMatchDestination (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NET_ADDRESS DestAddress,
- IN ULONG ProtocolId,
- IN RTM_VIEW_SET TargetViews,
- OUT PRTM_DEST_INFO DestInfo
- );
- DWORD
- WINAPI
- RtmGetMostSpecificDestination (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NET_ADDRESS DestAddress,
- IN ULONG ProtocolId,
- IN RTM_VIEW_SET TargetViews,
- OUT PRTM_DEST_INFO DestInfo
- );
- DWORD
- WINAPI
- RtmGetLessSpecificDestination (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle,
- IN ULONG ProtocolId,
- IN RTM_VIEW_SET TargetViews,
- OUT PRTM_DEST_INFO DestInfo
- );
- DWORD
- WINAPI
- RtmGetExactMatchRoute (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NET_ADDRESS DestAddress,
- IN RTM_MATCH_FLAGS MatchingFlags,
- IN OUT PRTM_ROUTE_INFO RouteInfo,
- IN ULONG InterfaceIndex,
- IN RTM_VIEW_SET TargetViews,
- OUT PRTM_ROUTE_HANDLE RouteHandle
- );
- DWORD
- WINAPI
- RtmIsBestRoute (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_HANDLE RouteHandle,
- OUT PRTM_VIEW_SET BestInViews
- );
- //
- // NextHop Object API Prototypes
- //
- DWORD
- WINAPI
- RtmAddNextHop (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NEXTHOP_INFO NextHopInfo,
- IN OUT PRTM_NEXTHOP_HANDLE NextHopHandle OPTIONAL,
- OUT PRTM_NEXTHOP_CHANGE_FLAGS ChangeFlags
- );
- DWORD
- WINAPI
- RtmFindNextHop (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN PRTM_NEXTHOP_INFO NextHopInfo,
- OUT PRTM_NEXTHOP_HANDLE NextHopHandle,
- OUT PRTM_NEXTHOP_INFO *NextHopPointer OPTIONAL
- );
- DWORD
- WINAPI
- RtmDeleteNextHop (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NEXTHOP_HANDLE NextHopHandle OPTIONAL,
- IN PRTM_NEXTHOP_INFO NextHopInfo
- );
- DWORD
- WINAPI
- RtmGetNextHopPointer (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NEXTHOP_HANDLE NextHopHandle,
- OUT PRTM_NEXTHOP_INFO *NextHopPointer
- );
- DWORD
- WINAPI
- RtmLockNextHop(
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NEXTHOP_HANDLE NextHopHandle,
- IN BOOL Exclusive,
- IN BOOL LockNextHop,
- OUT PRTM_NEXTHOP_INFO *NextHopPointer OPTIONAL
- );
- //
- // Enumeration API Prototypes
- //
- DWORD
- WINAPI
- RtmCreateDestEnum (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_VIEW_SET TargetViews,
- IN RTM_ENUM_FLAGS EnumFlags,
- IN PRTM_NET_ADDRESS NetAddress,
- IN ULONG ProtocolId,
- OUT PRTM_ENUM_HANDLE RtmEnumHandle
- );
- DWORD
- WINAPI
- RtmGetEnumDests (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_HANDLE EnumHandle,
- IN OUT PUINT NumDests,
- OUT PRTM_DEST_INFO DestInfos
- );
- DWORD
- WINAPI
- RtmReleaseDests (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN UINT NumDests,
- IN PRTM_DEST_INFO DestInfos
- );
- DWORD
- WINAPI
- RtmCreateRouteEnum (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_DEST_HANDLE DestHandle OPTIONAL,
- IN RTM_VIEW_SET TargetViews,
- IN RTM_ENUM_FLAGS EnumFlags,
- IN PRTM_NET_ADDRESS StartDest OPTIONAL,
- IN RTM_MATCH_FLAGS MatchingFlags,
- IN PRTM_ROUTE_INFO CriteriaRoute OPTIONAL,
- IN ULONG CriteriaInterface OPTIONAL,
- OUT PRTM_ENUM_HANDLE RtmEnumHandle
- );
- DWORD
- WINAPI
- RtmGetEnumRoutes (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_HANDLE EnumHandle,
- IN OUT PUINT NumRoutes,
- OUT PRTM_ROUTE_HANDLE RouteHandles
- );
- DWORD
- WINAPI
- RtmReleaseRoutes (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN UINT NumRoutes,
- IN PRTM_ROUTE_HANDLE RouteHandles
- );
- DWORD
- WINAPI
- RtmCreateNextHopEnum (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_FLAGS EnumFlags,
- IN PRTM_NET_ADDRESS NetAddress,
- OUT PRTM_ENUM_HANDLE RtmEnumHandle
- );
- DWORD
- WINAPI
- RtmGetEnumNextHops (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_HANDLE EnumHandle,
- IN OUT PUINT NumNextHops,
- OUT PRTM_NEXTHOP_HANDLE NextHopHandles
- );
- DWORD
- WINAPI
- RtmReleaseNextHops (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN UINT NumNextHops,
- IN PRTM_NEXTHOP_HANDLE NextHopHandles
- );
- DWORD
- WINAPI
- RtmDeleteEnumHandle (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_HANDLE EnumHandle
- );
- //
- // Change Notification APIs
- //
- DWORD
- WINAPI
- RtmRegisterForChangeNotification (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_VIEW_SET TargetViews,
- IN RTM_NOTIFY_FLAGS NotifyFlags,
- IN PVOID NotifyContext,
- OUT PRTM_NOTIFY_HANDLE NotifyHandle
- );
- DWORD
- WINAPI
- RtmGetChangedDests (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN OUT PUINT NumDests,
- OUT PRTM_DEST_INFO ChangedDests
- );
- DWORD
- WINAPI
- RtmReleaseChangedDests (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN UINT NumDests,
- IN PRTM_DEST_INFO ChangedDests
- );
- DWORD
- WINAPI
- RtmIgnoreChangedDests (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN UINT NumDests,
- IN PRTM_DEST_HANDLE ChangedDests
- );
- DWORD
- WINAPI
- RtmGetChangeStatus (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN RTM_DEST_HANDLE DestHandle,
- OUT PBOOL ChangeStatus
- );
- DWORD
- WINAPI
- RtmMarkDestForChangeNotification (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN RTM_DEST_HANDLE DestHandle,
- IN BOOL MarkDest
- );
- DWORD
- WINAPI
- RtmIsMarkedForChangeNotification (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle,
- IN RTM_DEST_HANDLE DestHandle,
- OUT PBOOL DestMarked
- );
- DWORD
- WINAPI
- RtmDeregisterFromChangeNotification (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_NOTIFY_HANDLE NotifyHandle
- );
- //
- // Entity Specific List APIs
- //
- DWORD
- WINAPI
- RtmCreateRouteList (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- OUT PRTM_ROUTE_LIST_HANDLE RouteListHandle
- );
- DWORD
- WINAPI
- RtmInsertInRouteList (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_LIST_HANDLE RouteListHandle OPTIONAL,
- IN UINT NumRoutes,
- IN PRTM_ROUTE_HANDLE RouteHandles
- );
- DWORD
- WINAPI
- RtmCreateRouteListEnum (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_LIST_HANDLE RouteListHandle,
- OUT PRTM_ENUM_HANDLE RtmEnumHandle
- );
- DWORD
- WINAPI
- RtmGetListEnumRoutes (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ENUM_HANDLE EnumHandle,
- IN OUT PUINT NumRoutes,
- OUT PRTM_ROUTE_HANDLE RouteHandles
- );
- DWORD
- WINAPI
- RtmDeleteRouteList (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN RTM_ROUTE_LIST_HANDLE RouteListHandle
- );
- //
- // Handle Management APIs
- //
- DWORD
- WINAPI
- RtmReferenceHandles (
- IN RTM_ENTITY_HANDLE RtmRegHandle,
- IN UINT NumHandles,
- IN HANDLE *RtmHandles
- );
- #ifdef __cplusplus
- }
- #endif
- #endif //__ROUTING_RTMv2_H__