windows-nt/Source/XPSP1/NT/net/rras/rtmv2/rtmenum.h
2020-09-26 16:20:57 +08:00

178 lines
4.8 KiB
C

/*++
Copyright (c) 1997 - 98, Microsoft Corporation
Module Name:
rtmenum.h
Abstract:
Contains definitions for managing enumerations
over destinations, routes and next hops in RTM.
Author:
Chaitanya Kodeboyina (chaitk) 23-Aug-1998
Revision History:
--*/
#ifndef __ROUTING_RTMENUM_H__
#define __ROUTING_RTMENUM_H__
//
// Enumeration Over Destinations
//
typedef struct _DEST_ENUM
{
OPEN_HEADER EnumHeader; // Enumeration Type and Reference Count
RTM_VIEW_SET TargetViews; // Views over which enum is active
UINT NumberOfViews; // Num of views in which enum is active
ULONG ProtocolId; // OSPF, RIP, BEST_PROTOCOL etc.
RTM_ENUM_FLAGS EnumFlags; // See RTM_ENUM_FLAGS in rtmv2.h
#if DBG
RTM_NET_ADDRESS StartAddress; // First NetAddress in the enum
#endif
RTM_NET_ADDRESS StopAddress; // Last NetAddress in the enum
CRITICAL_SECTION EnumLock; // Lock that protects the 'NextDest'
BOOL EnumDone; // Set to TRUE once last item is got
RTM_NET_ADDRESS NextDest; // Points to the next dest in the enum
}
DEST_ENUM, *PDEST_ENUM;
//
// Enumeration Over Routes
//
typedef struct _ROUTE_ENUM
{
OPEN_HEADER EnumHeader; // Enumeration Type and Reference Count
RTM_VIEW_SET TargetViews; // Views over which enum is active
RTM_ENUM_FLAGS EnumFlags; // See RTM_ENUM_FLAGS in rtmv2.h
RTM_MATCH_FLAGS MatchFlags; // See RTM_MATCH_FLAGS in rtmv2.h
PRTM_ROUTE_INFO CriteriaRoute; // Match criteria used with flags above
ULONG CriteriaInterface;// Interface on which routes r enum'ed
CRITICAL_SECTION EnumLock; // Lock that protects the fields below
PDEST_ENUM DestEnum; // Enum over dests (if enum'ing routes
// on all destinations in the table)
PRTM_DEST_INFO DestInfo; // Temp buffer used in above dest enum
BOOL EnumDone; // Set to TRUE once last item is got
PDEST_INFO Destination; // Dest for routes that we r enum'ing,
UINT NextRoute; // Route to be given next on the dest
UINT MaxRoutes; // Number of route slots in this array
UINT NumRoutes; // Actual number of routes in the array
PROUTE_INFO *RoutesOnDest; // Array of routes on this destination
}
ROUTE_ENUM, *PROUTE_ENUM;
//
// Enumeration Over Next Hops
//
typedef struct _NEXTHOP_ENUM
{
OPEN_HEADER EnumHeader; // Enumeration Type and Reference Count
RTM_ENUM_FLAGS EnumFlags; // See RTM_ENUM_FLAGS
#if DBG
RTM_NET_ADDRESS StartAddress; // First NetAddress in the enum
#endif
RTM_NET_ADDRESS StopAddress; // Last NetAddress in the enum
CRITICAL_SECTION EnumLock; // Lock that protects the 'NextNextHop'
BOOL EnumDone; // Set to TRUE once last item is got
RTM_NET_ADDRESS NextAddress; // Address of next next-hop in the enum
ULONG NextIfIndex; // Interface of next next-hop in enum
}
NEXTHOP_ENUM, *PNEXTHOP_ENUM;
//
// Used to indicate the posn of 1st
// next-hop on a list of next-hops
//
#define START_IF_INDEX (ULONG) (-1)
//
// Macro for determinining the type of enumeration handle
//
#define GET_ENUM_TYPE(EnumHandle, Enum) \
( \
*Enum = (POPEN_HEADER) GetObjectFromHandle(EnumHandle, GENERIC_TYPE), \
(*Enum)->HandleType \
)
//
// Macros for acquiring various locks defined in this file
//
#define ACQUIRE_DEST_ENUM_LOCK(DestEnum) \
ACQUIRE_LOCK(&DestEnum->EnumLock)
#define RELEASE_DEST_ENUM_LOCK(DestEnum) \
RELEASE_LOCK(&DestEnum->EnumLock)
#define ACQUIRE_ROUTE_ENUM_LOCK(RouteEnum) \
ACQUIRE_LOCK(&RouteEnum->EnumLock)
#define RELEASE_ROUTE_ENUM_LOCK(RouteEnum) \
RELEASE_LOCK(&RouteEnum->EnumLock)
#define ACQUIRE_NEXTHOP_ENUM_LOCK(RouteEnum) \
ACQUIRE_LOCK(&RouteEnum->EnumLock)
#define RELEASE_NEXTHOP_ENUM_LOCK(RouteEnum) \
RELEASE_LOCK(&RouteEnum->EnumLock)
//
// Enumeration helper functions
//
BOOL
MatchRouteWithCriteria (
IN PROUTE_INFO Route,
IN RTM_MATCH_FLAGS MatchingFlags,
IN PRTM_ROUTE_INFO CriteriaRouteInfo,
IN ULONG CriteriaInterface
);
#endif // __ROUTING_RTMENUM_H__