|
|
/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
qosmmain.h
Abstract:
The file contains the global structure definitions for QOS Mgr protocol.
Revision History:
--*/
#ifndef __QOSMMAIN_H
#define __QOSMMAIN_H
//
// Global information for the QOS Mgr
//
#define IF_HASHTABLE_SIZE 16
typedef struct _QOSMGR_GLOBALS { HANDLE LoggingHandle; //
ULONG LoggingLevel; // Handles to debugging functionality
ULONG TracingHandle; //
DWORD TracingFlags; // Flags that control debug tracing
HANDLE GlobalHeap; // Handle to the private memory heap
//
HANDLE NotificationEvnt;// Callbacks and events to interact
SUPPORT_FUNCTIONS SupportFunctions;// with the router manager (See API)
//
READ_WRITE_LOCK GlobalsLock; // Lock protecting all the info below
ULONG ConfigSize; // Number of bytes in global config
PIPQOS_GLOBAL_CONFIG GlobalConfig; // Pointer to global configuration
IPQOS_GLOBAL_STATS GlobalStats; // Global statistics
ULONG State; // State of the QOS Mgr component
HANDLE TciHandle; // Traffic Control Registration Handle
ULONG NumIfs; // Num of Ifs on which QOS is active
LIST_ENTRY IfList; // List of Ifs sorted by index
} QOSMGR_GLOBALS, *PQOSMGR_GLOBALS;
//
// Codes describing states of IPQOSMGR.
//
#define IPQOSMGR_STATE_STOPPED 0
#define IPQOSMGR_STATE_STARTING 1
#define IPQOSMGR_STATE_RUNNING 2
#define IPQOSMGR_STATE_STOPPING 3
//
// Per Interface Information for QOS Mgr
//
typedef struct _QOSMGR_INTERFACE_ENTRY { LIST_ENTRY ListByIndexLE; // Linkage into index sorted list
DWORD InterfaceIndex; // Interface index for this entry
WCHAR InterfaceName[MAX_STRING_LENGTH]; // Router name for the interface
READ_WRITE_LOCK InterfaceLock; // Lock protecting all info below
DWORD Flags; // ACTIVE, MULTIACCESS ...
DWORD State; // QOS Enabled or Disabled
ULONG ConfigSize; // Num of bytes in interface config
PIPQOS_IF_CONFIG InterfaceConfig; // Interface configuration
IPQOS_IF_STATS InterfaceStats; // Interface statistics
HANDLE TciIfHandle; // Handle to corr. TC interface
WCHAR AlternateName[MAX_STRING_LENGTH]; // Traffic Control name for 'if'
ULONG NumFlows; // Number of flows configured on 'if'
LIST_ENTRY FlowList; // List of configured flows on 'if'
} QOSMGR_INTERFACE_ENTRY, *PQOSMGR_INTERFACE_ENTRY;
#define IF_FLAG_ACTIVE ((DWORD)0x00000001)
#define IF_FLAG_MULTIACCESS ((DWORD)0x00000002)
#define INTERFACE_IS_ACTIVE(i) \
((i)->Flags & IF_FLAG_ACTIVE)
#define INTERFACE_IS_INACTIVE(i) \
!INTERFACE_IS_ACTIVE(i)
#define INTERFACE_IS_MULTIACCESS(i) \
((i)->Flags & IF_FLAG_MULTIACCESS)
#define INTERFACE_IS_POINTTOPOINT(i) \
!INTERFACE_IS_MULTIACCESS(i)
//
// Per Flow Information in QOS Mgr
//
typedef struct _QOSMGR_FLOW_ENTRY { LIST_ENTRY OnInterfaceLE; // Linkage into index sorted list
HANDLE TciFlowHandle; // Handle to the flow in TC API
DWORD Flags; // Flags for certain flow properties
ULONG FlowSize; // Size of the flow's information
PTC_GEN_FLOW FlowInfo; // Flow information - flowspecs etc.
WCHAR FlowName[MAX_STRING_LENGTH]; // Router name for the diffserv flow
} QOSMGR_FLOW_ENTRY, *PQOSMGR_FLOW_ENTRY;
#define FLOW_FLAG_DELETE ((DWORD)0x00000001)
//
// Global Extern Declarations
//
extern QOSMGR_GLOBALS Globals;
//
// Macros used in allocating and operating on memory
//
#define ZeroMemory RtlZeroMemory
#define CopyMemory RtlCopyMemory
#define FillMemory RtlFillMemory
#define EqualMemory RtlEqualMemory
#define AllocOnStack(nb) _alloca((nb))
#define AllocMemory(nb) HeapAlloc(Globals.GlobalHeap, \
0, \ (nb))
#define ReallocMemory(nb) HeapReAlloc(Globals.GlobalHeap, \
0, \ (nb))
#define AllocNZeroMemory(nb) HeapAlloc(Globals.GlobalHeap, \
HEAP_ZERO_MEMORY, \ (nb))
#define FreeMemory(ptr) HeapFree(Globals.GlobalHeap, \
0, \ (ptr))
#define FreeNotNullMemory(ptr) { \
if (!(ptr)) FreeMemory((ptr)); \ } //
// Prototypes relating to global lock management
//
#define ACQUIRE_GLOBALS_READ_LOCK() \
ACQUIRE_READ_LOCK(&Globals.GlobalsLock)
#define RELEASE_GLOBALS_READ_LOCK() \
RELEASE_READ_LOCK(&Globals.GlobalsLock)
#define ACQUIRE_GLOBALS_WRITE_LOCK() \
ACQUIRE_WRITE_LOCK(&Globals.GlobalsLock)
#define RELEASE_GLOBALS_WRITE_LOCK() \
RELEASE_WRITE_LOCK(&Globals.GlobalsLock)
//
// Prototypes relating to interface lock management
//
#define ACQUIRE_INTERFACE_READ_LOCK(Interface) \
ACQUIRE_READ_LOCK(&Interface->InterfaceLock)
#define RELEASE_INTERFACE_READ_LOCK(Interface) \
RELEASE_READ_LOCK(&Interface->InterfaceLock)
#define ACQUIRE_INTERFACE_WRITE_LOCK(Interface) \
ACQUIRE_WRITE_LOCK(&Interface->InterfaceLock)
#define RELEASE_INTERFACE_WRITE_LOCK(Interface) \
RELEASE_WRITE_LOCK(&Interface->InterfaceLock)
//
// Prototypes relating to DLL startup, cleanup
//
BOOL QosmDllStartup( VOID );
BOOL QosmDllCleanup( VOID );
//
// Prototypes for router manager interface
//
DWORD APIENTRY RegisterProtocol( IN OUT PMPR_ROUTING_CHARACTERISTICS RoutingChar, IN OUT PMPR_SERVICE_CHARACTERISTICS ServiceChar );
DWORD WINAPI StartProtocol ( IN HANDLE NotificationEvent, IN PSUPPORT_FUNCTIONS SupportFunctions, IN LPVOID GlobalInfo, IN ULONG StructureVersion, IN ULONG StructureSize, IN ULONG StructureCount );
DWORD WINAPI StartComplete ( VOID );
DWORD WINAPI StopProtocol ( VOID );
DWORD WINAPI GetGlobalInfo ( IN PVOID GlobalInfo, IN OUT PULONG BufferSize, OUT PULONG StructureVersion, OUT PULONG StructureSize, OUT PULONG StructureCount );
DWORD WINAPI SetGlobalInfo ( IN PVOID GlobalInfo, IN ULONG StructureVersion, IN ULONG StructureSize, IN ULONG StructureCount );
DWORD WINAPI AddInterface ( IN LPWSTR InterfaceName, IN ULONG InterfaceIndex, IN NET_INTERFACE_TYPE InterfaceType, IN DWORD MediaType, IN WORD AccessType, IN WORD ConnectionType, IN PVOID InterfaceInfo, IN ULONG StructureVersion, IN ULONG StructureSize, IN ULONG StructureCount );
DWORD WINAPI DeleteInterface ( IN ULONG InterfaceIndex );
DWORD WINAPI InterfaceStatus ( IN ULONG InterfaceIndex, IN BOOL InterfaceActive, IN DWORD StatusType, IN PVOID StatusInfo );
DWORD WINAPI GetInterfaceInfo ( IN ULONG InterfaceIndex, IN PVOID InterfaceInfo, IN OUT PULONG BufferSize, OUT PULONG StructureVersion, OUT PULONG StructureSize, OUT PULONG StructureCount );
DWORD WINAPI SetInterfaceInfo ( IN ULONG InterfaceIndex, IN PVOID InterfaceInfo, IN ULONG StructureVersion, IN ULONG StructureSize, IN ULONG StructureCount );
DWORD WINAPI GetEventMessage ( OUT ROUTING_PROTOCOL_EVENTS *Event, OUT MESSAGE *Result );
DWORD WINAPI UpdateRoutes ( IN ULONG InterfaceIndex );
DWORD WINAPI MibCreateEntry ( IN ULONG InputDataSize, IN PVOID InputData );
DWORD WINAPI MibDeleteEntry ( IN ULONG InputDataSize, IN PVOID InputData );
DWORD WINAPI MibGetEntry ( IN ULONG InputDataSize, IN PVOID InputData, OUT PULONG OutputDataSize, OUT PVOID OutputData );
DWORD WINAPI MibSetEntry ( IN ULONG InputDataSize, IN PVOID InputData );
DWORD WINAPI MibGetFirstEntry ( IN ULONG InputDataSize, IN PVOID InputData, OUT PULONG OutputDataSize, OUT PVOID OutputData );
DWORD WINAPI MibGetNextEntry ( IN ULONG InputDataSize, IN PVOID InputData, OUT PULONG OutputDataSize, OUT PVOID OutputData );
DWORD WINAPI MibSetTrapInfo ( IN HANDLE Event, IN ULONG InputDataSize, IN PVOID InputData, OUT PULONG OutputDataSize, OUT PVOID OutputData );
DWORD WINAPI MibGetTrapInfo ( IN ULONG InputDataSize, IN PVOID InputData, OUT PULONG OutputDataSize, OUT PVOID OutputData );
//
// Helper functions to operate on info blocks
//
DWORD WINAPI QosmGetGlobalInfo ( IN PVOID GlobalInfo, IN OUT PULONG BufferSize, OUT PULONG InfoSize );
DWORD WINAPI QosmSetGlobalInfo ( IN PVOID GlobalInfo, IN ULONG InfoSize );
DWORD WINAPI QosmGetInterfaceInfo ( IN QOSMGR_INTERFACE_ENTRY *Interface, IN PVOID InterfaceInfo, IN OUT PULONG BufferSize, OUT PULONG InfoSize );
DWORD WINAPI QosmSetInterfaceInfo ( IN QOSMGR_INTERFACE_ENTRY *Interface, IN PVOID InterfaceInfo, IN ULONG InfoSize );
//
// Prototypes relating to TC functionality
//
VOID TcNotifyHandler( IN HANDLE ClRegCtx, IN HANDLE ClIfcCtx, IN ULONG Event, IN HANDLE SubCode, IN ULONG BufSize, IN PVOID Buffer );
DWORD QosmOpenTcInterface( IN PQOSMGR_INTERFACE_ENTRY Interface );
DWORD GetFlowFromDescription( IN PIPQOS_NAMED_FLOW FlowDesc, OUT PTC_GEN_FLOW *FlowInfo, OUT ULONG *FlowSize );
FLOWSPEC * GetFlowspecFromGlobalConfig( IN PWCHAR FlowspecName );
QOS_OBJECT_HDR * GetQosObjectFromGlobalConfig( IN PWCHAR QosObjectName );
#endif // __QOSMMAIN_H
|