|
|
/*++
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__
|