|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
cnetapi.h
Abstract:
Cluster Network driver control APIs
Author:
Mike Massa (mikemas) 14-Feb-1997
Environment:
User Mode.
Revision History:
--*/
#ifndef _CNETAPI_INCLUDED
#define _CNETAPI_INCLUDED
#ifdef __cplusplus
extern "C" { #endif // __cplusplus
//
// Join Phases
//
typedef enum { ClusnetJoinPhase1 = 1, ClusnetJoinPhase2 = 2, ClusnetJoinPhase3 = 3, ClusnetJoinPhase4 = 4, ClusnetJoinPhaseAbort = 0xFFFFFFFF } CLUSNET_JOIN_PHASE;
//
// Event Handler Routines.
//
typedef VOID (*CLUSNET_NODE_UP_ROUTINE)( IN CL_NODE_ID NodeId );
typedef VOID (*CLUSNET_NODE_DOWN_ROUTINE)( IN CL_NODE_ID NodeId );
typedef BOOL (*CLUSNET_CHECK_QUORUM_ROUTINE)( VOID );
typedef VOID (*CLUSNET_HOLD_IO_ROUTINE)( VOID );
typedef VOID (*CLUSNET_RESUME_IO_ROUTINE)( VOID );
typedef VOID (*CLUSNET_HALT_ROUTINE)( IN DWORD HaltCode );
//
// Routines
//
HANDLE ClusnetOpenControlChannel( IN ULONG ShareAccess );
#define ClusnetCloseControlChannel(_handle) CloseHandle(_handle)
DWORD ClusnetEnableShutdownOnClose( IN HANDLE ControlChannel );
DWORD ClusnetDisableShutdownOnClose( IN HANDLE ControlChannel );
DWORD ClusnetInitialize( IN HANDLE ControlChannel, IN CL_NODE_ID LocalNodeId, IN ULONG MaxNodes, IN CLUSNET_NODE_UP_ROUTINE NodeUpRoutine, IN CLUSNET_NODE_DOWN_ROUTINE NodeDownRoutine, IN CLUSNET_CHECK_QUORUM_ROUTINE CheckQuorumRoutine, IN CLUSNET_HOLD_IO_ROUTINE HoldIoRoutine, IN CLUSNET_RESUME_IO_ROUTINE ResumeIoRoutine, IN CLUSNET_HALT_ROUTINE HaltRoutine );
DWORD ClusnetShutdown( IN HANDLE ControlChannel );
DWORD ClusnetRegisterNode( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId );
DWORD ClusnetDeregisterNode( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId );
DWORD ClusnetRegisterNetwork( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, IN ULONG Priority, IN BOOLEAN Restricted );
DWORD ClusnetDeregisterNetwork( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetRegisterInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId, IN ULONG Priority, IN PWSTR AdapterId, IN ULONG AdapterIdLength, IN PVOID TdiAddress, IN ULONG TdiAddressLength, OUT PULONG MediaStatus );
DWORD ClusnetDeregisterInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetOnlineNodeComm( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId );
DWORD ClusnetOfflineNodeComm( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId );
DWORD ClusnetOnlineNetwork( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, IN PWCHAR TdiProviderName, IN PVOID TdiBindAddress, IN ULONG TdiBindAddressLength, IN LPWSTR AdapterName, OUT PVOID TdiBindAddressInfo, IN PULONG TdiBindAddressInfoLength );
DWORD ClusnetOfflineNetwork( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetSetNetworkRestriction( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, IN BOOLEAN Restricted, IN ULONG NewPriority );
DWORD ClusnetGetNetworkPriority( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, OUT PULONG Priority );
DWORD ClusnetSetNetworkPriority( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, IN ULONG Priority );
DWORD ClusnetGetInterfacePriority( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId, OUT PULONG InterfacePriority, OUT PULONG NetworkPriority );
DWORD ClusnetSetInterfacePriority( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId, IN ULONG Priority );
DWORD ClusnetGetNodeCommState( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, OUT PCLUSNET_NODE_COMM_STATE State );
DWORD ClusnetGetNetworkState( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, OUT PCLUSNET_NETWORK_STATE State );
DWORD ClusnetGetInterfaceState( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId, OUT PCLUSNET_INTERFACE_STATE State );
#ifdef MM_IN_CLUSNET
DWORD ClusnetFormCluster( IN HANDLE ControlChannel, IN ULONG ClockPeriod, IN ULONG SendHBRate, IN ULONG RecvHBRate );
DWORD ClusnetJoinCluster( IN HANDLE ControlChannel, IN CL_NODE_ID JoiningNodeId, IN CLUSNET_JOIN_PHASE Phase, IN ULONG JoinTimeout, IN OUT PVOID * MessageToSend, OUT PULONG MessageLength, OUT PULONG DestNodeMask );
VOID ClusnetEndJoinCluster( IN HANDLE ControlChannel, IN PVOID LastSentMessage );
DWORD ClusnetDeliverJoinMessage( IN HANDLE ControlChannel, IN PVOID Message, IN ULONG MessageLength );
DWORD ClusnetLeaveCluster( IN HANDLE ControlChannel );
DWORD ClusnetEvictNode( IN HANDLE ControlChannel, IN ULONG NodeId );
#endif // MM_IN_CLUSNET
DWORD ClusnetGetNodeMembershipState( IN HANDLE ControlChannel, IN ULONG NodeId, OUT CLUSNET_NODE_STATE * State );
DWORD ClusnetSetNodeMembershipState( IN HANDLE ControlChannel, IN ULONG NodeId, IN CLUSNET_NODE_STATE State );
DWORD ClusnetSetEventMask( IN HANDLE ControlChannel, IN CLUSNET_EVENT_TYPE EventMask );
DWORD ClusnetGetNextEvent( IN HANDLE ControlChannel, OUT PCLUSNET_EVENT Event, IN LPOVERLAPPED Overlapped OPTIONAL );
DWORD ClusnetHalt( IN HANDLE ControlChannel );
DWORD ClusnetSetMemLogging( IN HANDLE ControlChannel, IN ULONG NumberOfEntires );
DWORD ClusnetSendPoisonPacket( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId );
DWORD ClusnetSetOuterscreen( IN HANDLE ControlChannel, IN ULONG Outerscreen );
DWORD ClusnetRegroupFinished( IN HANDLE ControlChannel, IN ULONG EventEpoch, IN ULONG RegroupEpoch );
DWORD ClusnetImportSecurityContexts( IN HANDLE ControlChannel, IN CL_NODE_ID JoiningNodeId, IN PWCHAR PackageName, IN ULONG SignatureSize, IN PVOID ServerContext, IN PVOID ClientContext );
DWORD ClusnetReserveEndpoint( IN HANDLE ControlChannel, IN PWSTR EndpointString );
DWORD ClusnetConfigureMulticast( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, IN ULONG MulticastNetworkBrand, IN PVOID MulticastAddress, IN ULONG MulticastAddressLength, IN PVOID Key, IN ULONG KeyLength );
DWORD ClusnetGetMulticastReachableSet( IN HANDLE ControlChannel, IN CL_NETWORK_ID NetworkId, OUT ULONG * NodeScreen );
DWORD ClusnetSetIamaliveParam( IN HANDLE ControlChannel, IN ULONG TimeoutTicks, IN ClussvcHangAction Action );
DWORD ClusnetIamalive( IN HANDLE ControlChannel );
#if DBG
//
// Test routines - available in debug builds only.
//
DWORD ClusnetSetDebugMask( IN HANDLE ControlChannel, ULONG Mask );
DWORD ClusnetOnlinePendingInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetOnlineInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetOfflineInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetFailInterface( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN CL_NETWORK_ID NetworkId );
DWORD ClusnetSendMmMsg( IN HANDLE ControlChannel, IN CL_NODE_ID NodeId, IN ULONG Pattern );
#endif // DBG
#ifdef __cplusplus
} #endif // __cplusplus
#endif // ndef _CNETAPI_INCLUDED
|