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

332 lines
9.4 KiB
C

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
rtrmgr.h
Abstract:
This module contains the definitions of the internal control structures
used by the router manager
Author:
Stefan Solomon 03/03/1995
Revision History:
--*/
#ifndef _RTRMGR_
#define _RTRMGR_
//************************************************************************
// *
// MAIN DATA STRUCTURES *
// *
//************************************************************************
//*** Interface Control Block ***
typedef struct _ACB * PACB;
typedef struct _UPDATEREQCB {
ULONG RoutesReqStatus;
ULONG ServicesReqStatus;
} UPDATEREQCB, *PUPDATEREQCB;
// status definitions for the routes and services req update
#define NO_UPDATE 0
#define UPDATE_PENDING 1
#define UPDATE_SUCCESSFULL 2
#define UPDATE_FAILURE 3
#define DIAL_REQUEST_BUFFER_SIZE 128
typedef struct _ICB {
LIST_ENTRY IndexHtLinkage;
UCHAR Signature[4];
ULONG InterfaceIndex;
LIST_ENTRY IndexListLinkage; // list of if ordered by index
ULONG AdminState;
ULONG OperState;
BOOL InterfaceReachable;
ROUTER_INTERFACE_TYPE DIMInterfaceType; // interface type for Dim & Co.
ULONG MIBInterfaceType; // interface type for the IPX MIB
LPWSTR InterfaceNamep;
LPWSTR AdapterNamep;
PACB acbp; // ptr to adapter control block
ULONG PacketType; // used to identify a corresponding adapter
ULONG EnableIpxWanNegotiation;
UPDATEREQCB UpdateReq; // controls update request on this if
HANDLE hDIMInterface; // if handle used by DIM
HANDLE DIMUpdateEvent;
DWORD UpdateResult;
BOOL ConnectionRequestPending;
} ICB, *PICB;
//*** Adapter Control Block ***
typedef struct _ACB {
LIST_ENTRY IndexHtLinkage;
UCHAR Signature[4];
ULONG AdapterIndex;
PICB icbp; // ptr to interface control block
LPWSTR AdapterNamep;
ULONG AdapterNameLen;
ADAPTER_INFO AdapterInfo;
} ACB, *PACB;
//
// Macros used by update functions
//
#define ResetUpdateRequest(icbp) {\
(icbp)->UpdateReq.RoutesReqStatus = NO_UPDATE;\
(icbp)->UpdateReq.ServicesReqStatus = NO_UPDATE;\
}
#define SetUpdateRequestPending(icbp) {\
(icbp)->UpdateReq.RoutesReqStatus = UPDATE_PENDING;\
(icbp)->UpdateReq.ServicesReqStatus = UPDATE_PENDING;\
}
#define IsUpdateRequestPending(icbp) \
(((icbp)->UpdateReq.RoutesReqStatus == UPDATE_PENDING) || \
((icbp)->UpdateReq.ServicesReqStatus == UPDATE_PENDING))
//
// Control Block for each Routing Protocol
//
typedef struct _RPCB {
LIST_ENTRY RP_Linkage ; // Linkage in Routing Prot CBs List
PWSTR RP_DllName; // ptr to string for the dll name
HINSTANCE RP_DllHandle; // DLL module handle
DWORD RP_ProtocolId; // E.g. IPX_PROTOCOL_RIP, etc.
PREGISTER_PROTOCOL RP_RegisterProtocol; // function pointer
PSTART_PROTOCOL RP_StartProtocol ; // function pointer
PSTOP_PROTOCOL RP_StopProtocol ; // function pointer
PADD_INTERFACE RP_AddInterface ; // function pointer
PDELETE_INTERFACE RP_DeleteInterface ; // function pointer
PGET_EVENT_MESSAGE RP_GetEventMessage ; // function pointer
PSET_INTERFACE_INFO RP_SetIfConfigInfo ; // function pointer
PGET_INTERFACE_INFO RP_GetIfConfigInfo ; // function pointer
PBIND_INTERFACE RP_BindInterface ; // function pointer
PUNBIND_INTERFACE RP_UnBindInterface ; // function pointer
PENABLE_INTERFACE RP_EnableInterface ; // function pointer
PDISABLE_INTERFACE RP_DisableInterface ; // function pointer
PGET_GLOBAL_INFO RP_GetGlobalInfo ; // function pointer
PSET_GLOBAL_INFO RP_SetGlobalInfo ; // function pointer
PMIB_CREATE RP_MibCreate ; // function pointer
PMIB_DELETE RP_MibDelete ; // function pointer
PMIB_SET RP_MibSet ; // function pointer
PMIB_GET RP_MibGet ; // function pointer
PMIB_GET_FIRST RP_MibGetFirst ; // function pointer
PMIB_GET_NEXT RP_MibGetNext ; // function pointer
} RPCB, *PRPCB;
//************************************************************************
// *
// MAIN CONSTANTS DEFS *
// *
//************************************************************************
//
// Database Lock Operations
//
#define ACQUIRE_DATABASE_LOCK EnterCriticalSection (&DatabaseLock)
#define RELEASE_DATABASE_LOCK LeaveCriticalSection (&DatabaseLock)
//
// Interface Hash Table Size
//
#define IF_HASH_TABLE_SIZE 32
//
// Adapter Hash Table Size
//
#define ADAPTER_HASH_TABLE_SIZE 16
//
// DEFAULT WAIT FOR CONNECTION REQUEST TO TIME OUT
//
#define CONNECTION_REQUEST_TIME 120000 // 2 minutes in milliseconds
//
// Events for the router manager worker thread to pend on
//
#define ADAPTER_NOTIFICATION_EVENT 0
#define FORWARDER_NOTIFICATION_EVENT 1
#define ROUTING_PROTOCOLS_NOTIFICATION_EVENT 2
#define STOP_NOTIFICATION_EVENT 3
#define MAX_EVENTS 4
//
// Define the mode in which WAN net numbers are allocated to incoming WAN links
//
// NO_WAN_NET_MODE - in this mode we have a LAN/LAN only router.
//
// NUMBERED_WAN_NET_MODE - in this mode, the WAN net numbers are allocated from
// a manually defined pool of net numbers.
//
// UNNUMBERED_WAN_NET_MODE - in this mode there are no net numbers for the WAN
// lines connecting routers and there is a global WAN
// net number for all the client lines.
// The global client WAN net can be manually defined or
// allocated automatically by the router.
#define UNNUMBERED_WAN_NET_MODE 0
#define NUMBERED_WAN_NET_MODE 1
#define NO_WAN_NET_MODE 2
//
// Update Information Type defs
//
#define ROUTES_UPDATE 1
#define SERVICES_UPDATE 2
// Default max routing table size (bytes)
#define IPX_MAX_ROUTING_TABLE_SIZE 100000 * sizeof(RTM_IPX_ROUTE)
// IPXCP DLL Name
#define IPXCPDLLNAME "rasppp"
//************************************************************************
// *
// MAIN GLOBALS DEFS *
// *
//************************************************************************
extern CRITICAL_SECTION DatabaseLock;
extern ULONG InterfaceCount;
extern BOOL RouterAdminStart;
extern ULONG RouterOperState;
extern HANDLE RtmStaticHandle;
extern HANDLE RtmLocalHandle;
extern PICB InternalInterfacep;
extern PACB InternalAdapterp;
extern ULONG NextInterfaceIndex;
extern UCHAR InterfaceSignature[];
extern UCHAR AdapterSignature[];
extern HANDLE g_hEvents[MAX_EVENTS];
extern ULONG ConnReqTimeout;
extern LIST_ENTRY IndexIfHt[IF_HASH_TABLE_SIZE];
extern LIST_ENTRY IndexIfList;
extern UCHAR GlobalWanNet[4];
extern ULONG GlobalInterfaceIndex;
extern LIST_ENTRY RoutingProtocolCBList;
extern ULONG RoutingProtocolActiveCount;
extern ULONG WorkItemsPendingCounter;
extern DWORD
(APIENTRY *ConnectInterface)(IN HANDLE InterfaceName,
IN DWORD ProtocolId);
extern DWORD
(APIENTRY *DisconnectInterface)(IN HANDLE InterfaceName,
IN DWORD ProtocolId);
extern DWORD
(APIENTRY *SaveInterfaceInfo)(
IN HANDLE hDIMInterface,
IN DWORD dwProtocolId,
IN LPVOID pInterfaceInfo,
IN DWORD cbInterfaceInfoSize);
extern DWORD
(APIENTRY *RestoreInterfaceInfo)(
IN HANDLE hDIMInterface,
IN DWORD dwProtocolId,
IN LPVOID lpInterfaceInfo,
IN LPDWORD lpcbInterfaceInfoSize);
extern VOID
(APIENTRY *RouterStarted)(
IN DWORD dwProtocolId );
extern VOID
(APIENTRY *RouterStopped)(
IN DWORD dwProtocolId,
IN DWORD dwError );
extern VOID
(APIENTRY *InterfaceEnabled)(
IN HANDLE hDIMInterface,
IN DWORD dwProtocolId,
IN BOOL fEnabled );
extern BOOL RouterAdminStart;
extern BOOL RipAdminStart;
extern BOOL SapAdminStart;
extern ULONG RouterOperState;
extern ULONG FwOperState;
extern ULONG AdptMgrOperState;
extern ULONG RipOperState;
extern ULONG SapOperState;
extern HANDLE RtmStaticHandle;
extern HANDLE RtmLocalHandle;
extern ULONG RouterStartCount;
extern ULONG RouterStopCount;
extern ULONG RouterStartProtocols;
extern LIST_ENTRY IndexAdptHt[ADAPTER_HASH_TABLE_SIZE];
extern LIST_ENTRY IndexIfHt[IF_HASH_TABLE_SIZE];
extern ULONG MibRefCounter;
extern ULONG UpdateRoutesProtId;
extern UCHAR nullnet[4];
extern BOOL LanOnlyMode;
extern BOOL WanNetDatabaseInitialized;
extern BOOL EnableGlobalWanNet;
extern ULONG RoutingTableHashSize;
extern ULONG MaxRoutingTableSize;
extern PFW_DIAL_REQUEST ConnRequest;
extern OVERLAPPED ConnReqOverlapped;
extern DWORD (*IpxcpBind)(PIPXCP_INTERFACE IpxcpInterface);
extern VOID (*IpxcpRouterStarted)(VOID);
extern VOID (*IpxcpRouterStopped)(VOID);
// NOTE: For the IPX Routing Protocols, the "routing protocol id" is the info
// type used to associate the respective config info with the protocol.
// For instance, IPX_PROTOCOL_RIP as the InfoType field in an IPX_TOC_ENTRY
// passed in AddInterface or SetInterface calls represents the RIP interface info.
// The same in a SetGlobalInfo call represents the RIP Global Info.
// actual structures moved to rtinfo.h to be common with other protocol
// families
typedef RTR_INFO_BLOCK_HEADER IPX_INFO_BLOCK_HEADER, *PIPX_INFO_BLOCK_HEADER;
typedef RTR_TOC_ENTRY IPX_TOC_ENTRY, *PIPX_TOC_ENTRY;
#endif