📄 rtmv2.h
字号:
// 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
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -