mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1791 lines
39 KiB
1791 lines
39 KiB
/*++
|
|
|
|
Copyright (c) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nmp.h
|
|
|
|
Abstract:
|
|
|
|
Private interface definitions for the Node Manager component.
|
|
|
|
Author:
|
|
|
|
Mike Massa (mikemas) 12-Mar-1996
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _NMP_INCLUDED
|
|
#define _NMP_INCLUDED
|
|
|
|
#define UNICODE 1
|
|
|
|
#include "service.h"
|
|
#include <winsock2.h>
|
|
#include <clnetcfg.h>
|
|
#include <bitset.h>
|
|
#include <madcapcl.h>
|
|
#include <time.h>
|
|
|
|
|
|
//
|
|
// Constants
|
|
//
|
|
#define LOG_CURRENT_MODULE LOG_MODULE_NM
|
|
|
|
#define NM_JOIN_TIMEOUT 60000 // 60 seconds
|
|
#define NM_MM_JOIN_TIMEOUT 3000 // 3 seconds
|
|
#define NM_CLOCK_PERIOD 300 // 300 milliseconds
|
|
#define NM_SEND_HB_RATE 4
|
|
#define NM_RECV_HB_RATE 3 // Changed 2=>3 to prolong min_stage_1 ticks from 8 to 12
|
|
|
|
|
|
//
|
|
// Common Object Flags
|
|
//
|
|
#define NM_FLAG_OM_INSERTED 0x10000000
|
|
#define NM_FLAG_DELETE_PENDING 0x80000000
|
|
|
|
//
|
|
// Miscellaneous Macros
|
|
//
|
|
#define NM_WCSLEN(_string) ((lstrlenW(_string) + 1) * sizeof(WCHAR))
|
|
|
|
|
|
//
|
|
// Common Object Management Macros
|
|
//
|
|
#define NM_OM_INSERTED(obj) ((obj)->Flags & NM_FLAG_OM_INSERTED)
|
|
#define NM_DELETE_PENDING(obj) ((obj)->Flags & NM_FLAG_DELETE_PENDING)
|
|
|
|
#define NM_FREE_OBJECT_FIELD(_object, _field) \
|
|
if ( (_object)->_field != NULL ) \
|
|
LocalFree( (_object)->_field )
|
|
|
|
#define NM_MIDL_FREE_OBJECT_FIELD(_object, _field) \
|
|
if ( (_object)->_field != NULL ) { \
|
|
MIDL_user_free( (_object)->_field ); \
|
|
(_object)->_field = NULL; \
|
|
}
|
|
|
|
|
|
//
|
|
// State of the NM component
|
|
//
|
|
// Note that the order is important. See NmpEnterApi().
|
|
//
|
|
typedef enum {
|
|
NmStateOffline = 0,
|
|
NmStateOfflinePending = 1,
|
|
NmStateOnlinePending = 2,
|
|
NmStateOnline = 3,
|
|
} NM_STATE, *PNM_STATE;
|
|
|
|
|
|
//
|
|
// Node definitions
|
|
//
|
|
typedef struct {
|
|
DWORD Status;
|
|
DWORD LocalOnly;
|
|
} NM_NODE_CREATE_CONTEXT, *PNM_NODE_CREATE_CONTEXT;
|
|
|
|
typedef struct _NM_NODE {
|
|
LIST_ENTRY Linkage;
|
|
DWORD NodeId;
|
|
CLUSTER_NODE_STATE State;
|
|
CLUSTER_NODE_STATE ExtendedState;
|
|
DWORD Flags;
|
|
DWORD InterfaceCount;
|
|
LIST_ENTRY InterfaceList;
|
|
DWORD HighestVersion;
|
|
DWORD LowestVersion;
|
|
RPC_BINDING_HANDLE ReportRpcBinding; // for net connectivity reports
|
|
RPC_BINDING_HANDLE IsolateRpcBinding; // for net failure isolation
|
|
SUITE_TYPE ProductSuite;
|
|
DWORD DefaultRpcBindingGeneration;
|
|
} NM_NODE;
|
|
|
|
#define NM_NODE_SIG 'edon'
|
|
|
|
typedef struct _NM_NODE_AUX_INFO{
|
|
DWORD dwSize;
|
|
DWORD dwVer;
|
|
SUITE_TYPE ProductSuite;
|
|
}NM_NODE_AUX_INFO, *PNM_NODE_AUX_INFO;
|
|
|
|
typedef struct {
|
|
LPCWSTR NodeId;
|
|
HLOCALXSACTION Xaction;
|
|
DWORD Status;
|
|
} NM_EVICTION_CONTEXT, *PNM_EVICTION_CONTEXT;
|
|
|
|
|
|
#define NM_NODE_UP(node) \
|
|
( ( (node)->State == ClusterNodeUp ) || \
|
|
( (node)->State == ClusterNodePaused ) )
|
|
|
|
|
|
//
|
|
// Network definitions
|
|
//
|
|
typedef struct _NM_STATE_WORK_ENTRY {
|
|
NM_STATE_ENTRY State;
|
|
DWORD ReachableCount;
|
|
} NM_STATE_WORK_ENTRY, *PNM_STATE_WORK_ENTRY;
|
|
|
|
typedef PNM_STATE_WORK_ENTRY PNM_STATE_WORK_VECTOR;
|
|
|
|
typedef PNM_STATE_ENTRY PNM_CONNECTIVITY_MATRIX;
|
|
|
|
#define NM_SIZEOF_CONNECTIVITY_MATRIX(_VectorSize) \
|
|
(sizeof(NM_STATE_ENTRY) * _VectorSize *_VectorSize)
|
|
|
|
#define NM_NEXT_CONNECTIVITY_MATRIX_ROW(_CurrentRowPtr, _VectorSize) \
|
|
(_CurrentRowPtr + (_VectorSize * sizeof(NM_STATE_ENTRY)))
|
|
|
|
#define NM_GET_CONNECTIVITY_MATRIX_ROW(_MatrixPtr, _RowNumber, _VectorSize) \
|
|
(_MatrixPtr + (_RowNumber * (_VectorSize * sizeof(NM_STATE_ENTRY))))
|
|
|
|
#define NM_GET_CONNECTIVITY_MATRIX_ENTRY( \
|
|
_MatrixPtr, \
|
|
_RowNumber, \
|
|
_ColNumber, \
|
|
_VectorSize \
|
|
) \
|
|
( _MatrixPtr + \
|
|
(_RowNumber * (_VectorSize * sizeof(NM_STATE_ENTRY))) + \
|
|
(_ColNumber * sizeof(NM_STATE_ENTRY)) \
|
|
)
|
|
|
|
|
|
typedef struct _NM_NETWORK {
|
|
LIST_ENTRY Linkage;
|
|
CL_NETWORK_ID ShortId;
|
|
CLUSTER_NETWORK_STATE State;
|
|
DWORD Flags;
|
|
CLUSTER_NETWORK_ROLE Role;
|
|
DWORD Priority;
|
|
LPWSTR Transport;
|
|
LPWSTR Address;
|
|
LPWSTR AddressMask;
|
|
LPWSTR Description;
|
|
LPWSTR MulticastAddress;
|
|
PVOID MulticastKey;
|
|
DWORD MulticastKeyLength;
|
|
PVOID MulticastKeySalt;
|
|
DWORD MulticastKeySaltLength;
|
|
time_t MulticastLeaseObtained;
|
|
time_t MulticastLeaseExpires;
|
|
MCAST_CLIENT_UID MulticastLeaseRequestId;
|
|
LPWSTR MulticastLeaseServer;
|
|
DWORD InterfaceCount;
|
|
PNM_INTERFACE LocalInterface;
|
|
PNM_CONNECTIVITY_VECTOR ConnectivityVector;
|
|
PNM_CONNECTIVITY_MATRIX ConnectivityMatrix;
|
|
PNM_STATE_WORK_VECTOR StateWorkVector;
|
|
DWORD ConnectivityReportTimer;
|
|
DWORD StateRecalcTimer;
|
|
DWORD FailureIsolationTimer;
|
|
DWORD RegistrationRetryTimer;
|
|
DWORD RegistrationRetryTimeout;
|
|
DWORD McastAddressRenewTimer;
|
|
DWORD McastAddressReleaseRetryTimer;
|
|
DWORD McastAddressReconfigureRetryTimer;
|
|
DWORD ConnectivityReportRetryCount;
|
|
CLRTL_WORK_ITEM WorkItem;
|
|
CLRTL_WORK_ITEM MadcapWorkItem;
|
|
LIST_ENTRY McastAddressReleaseList;
|
|
LIST_ENTRY InterfaceList;
|
|
LIST_ENTRY InternalLinkage;
|
|
} NM_NETWORK;
|
|
|
|
#define NM_NETWORK_SIG 'ten'
|
|
|
|
//
|
|
// State flags
|
|
//
|
|
#define NM_FLAG_NET_WORKER_RUNNING 0x00000001
|
|
#define NM_FLAG_NET_REGISTERED 0x00000002
|
|
#define NM_FLAG_NET_MULTICAST_ENABLED 0x00000004
|
|
#define NM_FLAG_NET_MADCAP_WORKER_RUNNING 0x00000008
|
|
//
|
|
// Work Flags
|
|
//
|
|
#define NM_FLAG_NET_REPORT_LOCAL_IF_UP 0x00000100
|
|
#define NM_FLAG_NET_REPORT_CONNECTIVITY 0x00000200
|
|
#define NM_FLAG_NET_RECALC_STATE 0x00000400
|
|
#define NM_FLAG_NET_ISOLATE_FAILURE 0x00000800
|
|
#define NM_FLAG_NET_NEED_TO_REGISTER 0x00002000
|
|
#define NM_FLAG_NET_REPORT_LOCAL_IF_FAILED 0x00004000
|
|
#define NM_FLAG_NET_RENEW_MCAST_ADDRESS 0x00008000
|
|
#define NM_FLAG_NET_RELEASE_MCAST_ADDRESS 0x00010000
|
|
#define NM_FLAG_NET_RECONFIGURE_MCAST 0x00020000
|
|
|
|
#define NM_NET_WORK_FLAGS \
|
|
(NM_FLAG_NET_ISOLATE_FAILURE | \
|
|
NM_FLAG_NET_RECALC_STATE | \
|
|
NM_FLAG_NET_NEED_TO_REGISTER)
|
|
|
|
#define NM_NET_IF_WORK_FLAGS \
|
|
(NM_FLAG_NET_REPORT_LOCAL_IF_UP | \
|
|
NM_FLAG_NET_REPORT_LOCAL_IF_FAILED)
|
|
|
|
#define NM_NET_MADCAP_WORK_FLAGS \
|
|
(NM_FLAG_NET_RENEW_MCAST_ADDRESS | \
|
|
NM_FLAG_NET_RELEASE_MCAST_ADDRESS | \
|
|
NM_FLAG_NET_RECONFIGURE_MCAST)
|
|
|
|
#define NmpIsNetworkRegistered(_network) \
|
|
((_network)->Flags & NM_FLAG_NET_REGISTERED)
|
|
|
|
#define NmpIsNetworkForInternalUse(_network) \
|
|
((_network)->Role & ClusterNetworkRoleInternalUse)
|
|
|
|
#define NmpIsNetworkForClientAccess(_network) \
|
|
((_network)->Role & ClusterNetworkRoleClientAccess)
|
|
|
|
#define NmpIsNetworkForInternalAndClientUse(_network) \
|
|
((_network)->Role == ClusterNetworkRoleInternalAndClient)
|
|
|
|
#define NmpIsNetworkDisabledForUse(_network) \
|
|
((_network)->Role == ClusterNetworkRoleNone)
|
|
|
|
#define NmpIsNetworkEnabledForUse(_network) \
|
|
((_network)->Role != ClusterNetworkRoleNone)
|
|
|
|
#define NmpIsNetworkMulticastEnabled(_network) \
|
|
((_network)->Flags & NM_FLAG_NET_MULTICAST_ENABLED)
|
|
|
|
//
|
|
// Network deferred-work timers.
|
|
//
|
|
// The timer fires every 300ms. One heartbeat (HB) period is 1200ms.
|
|
//
|
|
// An interface is declared unreachable by ClusNet after two missed HBs.
|
|
// On average, an interface will fail in the middle of a ClusNet HB period.
|
|
// So, the avg time for ClusNet to detect and report an interface failure
|
|
// is 600 + 2400 = 3000ms. The worst case is 1200 + 2400 = 3600ms.
|
|
// The best case is 2400ms.
|
|
//
|
|
// If there are >2 nodes active on a network, it is desirable to
|
|
// aggregate interface failure reports when an entire network fails;
|
|
// however, we do not know how long it took for ClusNet to make the first
|
|
// report. Thus, we assume that the first interface failure was detected
|
|
// in the avg time and wait the for the worst case time before reporting.
|
|
//
|
|
// In the 2 node case, there is no aggregation to be performed so we report
|
|
// failures immediately. We always report InterfaceUp and InterfaceFailed
|
|
// events immediately. We also report immediately after a NodeDown event.
|
|
//
|
|
// State recalculation should be performed only after all nodes have reported
|
|
// their connectivity changes after a failure. There is spread of 1200ms
|
|
// between the best and worst case reporting times. Arbitrary scheduling and
|
|
// communication delays can widen the spread even more in the worst case.
|
|
// The best we can do is make a good guess. Once in a while, we will
|
|
// recalculate too soon. This isn't a disaster since the state calculation
|
|
// algorithm will abort if it has partial information. Further, we wait an
|
|
// additional period before trying to isolate any connectivity failures that
|
|
// were detected. We do this in order to avoid inducing unnecessary
|
|
// cluster resource failures.
|
|
//
|
|
// Note that since we invalidate the connectivity vectors for dead nodes
|
|
// after regroup, we only need to delay long enough for each of the nodes
|
|
// to process the node down event and fire off a connectivity report.
|
|
//
|
|
#define NM_NET_CONNECTIVITY_REPORT_TIMEOUT 600 // 3600 - 3000
|
|
#define NM_NET_STATE_RECALC_TIMEOUT 2400 // 3600 - 2400 + 1200
|
|
#define NM_NET_STATE_RECALC_TIMEOUT_AFTER_REGROUP 900
|
|
#define NM_NET_STATE_FAILURE_ISOLATION_TIMEOUT 3600
|
|
#define NM_NET_STATE_FAILURE_ISOLATION_POLL 60000 // Change Default to 1 min after testing
|
|
#define NM_NET_STATE_INTERFACE_FAILURE_TIMEOUT 3600
|
|
|
|
#define NmpIsNetworkWorkerRunning(_network) \
|
|
((_network)->Flags & NM_FLAG_NET_WORKER_RUNNING)
|
|
|
|
#define NmpIsNetworkMadcapWorkerRunning(_network) \
|
|
((_network)->Flags & NM_FLAG_NET_MADCAP_WORKER_RUNNING)
|
|
|
|
#define NM_CONNECTIVITY_REPORT_RETRY_LIMIT 20 // 10 seconds
|
|
|
|
#define NM_NET_MIN_REGISTRATION_RETRY_TIMEOUT 500 // half a second
|
|
#define NM_NET_MAX_REGISTRATION_RETRY_TIMEOUT (10*60*1000) // 10 minutes
|
|
|
|
//
|
|
// Network interface definitions
|
|
//
|
|
typedef struct _NM_INTERFACE {
|
|
LIST_ENTRY Linkage;
|
|
DWORD NetIndex;
|
|
DWORD Flags;
|
|
CLUSTER_NETINTERFACE_STATE State;
|
|
PNM_NODE Node;
|
|
PNM_NETWORK Network;
|
|
LPWSTR AdapterName;
|
|
LPWSTR AdapterId;
|
|
LPWSTR Address;
|
|
ULONG BinaryAddress;
|
|
LPWSTR ClusnetEndpoint;
|
|
LPWSTR Description;
|
|
LIST_ENTRY NetworkLinkage;
|
|
LIST_ENTRY NodeLinkage;
|
|
} NM_INTERFACE;
|
|
|
|
#define NM_INTERFACE_SIG ' fi'
|
|
|
|
#define NM_FLAG_IF_REGISTERED 0x00000002
|
|
|
|
#define NmpIsInterfaceRegistered(_interface) \
|
|
((_interface)->Flags & NM_FLAG_IF_REGISTERED)
|
|
|
|
|
|
//
|
|
// This structure is used to hook changes in the node leadership.
|
|
//
|
|
typedef struct _NM_LEADER_CHANGE_WAIT_ENTRY {
|
|
LIST_ENTRY Linkage;
|
|
HANDLE LeaderChangeEvent;
|
|
} NM_LEADER_CHANGE_WAIT_ENTRY, *PNM_LEADER_CHANGE_WAIT_ENTRY;
|
|
|
|
//
|
|
// This structure is used for asynchronous network connectivity reports.
|
|
//
|
|
typedef struct _NM_CONNECTIVITY_REPORT_CONTEXT {
|
|
NM_LEADER_CHANGE_WAIT_ENTRY LeaderChangeWaitEntry;
|
|
HANDLE ConnectivityReportEvent;
|
|
} NM_CONNECTIVITY_REPORT_CONTEXT, *PNM_CONNECTIVITY_REPORT_CONTEXT;
|
|
|
|
|
|
// the fixup callback record stored by nm on behalf of other components to perform
|
|
//form or join fixups.
|
|
typedef struct _NM_FIXUP_CB_RECORD{
|
|
NM_FIXUP_NOTIFYCB pfnFixupNotifyCb;
|
|
DWORD dwFixupMask;
|
|
}NM_FIXUP_CB_RECORD,*PNM_FIXUP_CB_RECORD;
|
|
|
|
//the fixup callback functions for updating in-memory structure after
|
|
//updatinbg the registry
|
|
|
|
typedef DWORD (WINAPI *NM_POST_FIXUP_CB)(VOID);
|
|
|
|
|
|
// fixup callback record used to pass argumnets to NmUpdatePerformFixups2
|
|
// update type handler
|
|
typedef struct _NM_FIXUP_CB_RECORD2{
|
|
NM_FIXUP_NOTIFYCB pfnFixupNotifyCb; // pointer to fn that builds up the fixup property list
|
|
DWORD dwFixupMask;
|
|
PRESUTIL_PROPERTY_ITEM pPropertyTable; // Property table for this key
|
|
} NM_FIXUP_CB_RECORD2,*PNM_FIXUP_CB_RECORD2;
|
|
|
|
|
|
|
|
//
|
|
// Global Data
|
|
//
|
|
extern CRITICAL_SECTION NmpLock;
|
|
extern HANDLE NmpMutex;
|
|
extern NM_STATE NmpState;
|
|
extern DWORD NmpActiveThreadCount;
|
|
extern HANDLE NmpShutdownEvent;
|
|
extern LIST_ENTRY NmpNodeList;
|
|
extern PNM_NODE * NmpIdArray;
|
|
extern BOOLEAN NmpNodeCleanupOk;
|
|
extern LIST_ENTRY NmpNetworkList;
|
|
extern LIST_ENTRY NmpInternalNetworkList;
|
|
extern LIST_ENTRY NmpDeletedNetworkList;
|
|
extern DWORD NmpNetworkCount;
|
|
extern DWORD NmpInternalNetworkCount;
|
|
extern DWORD NmpClientNetworkCount;
|
|
extern LIST_ENTRY NmpInterfaceList;
|
|
extern LIST_ENTRY NmpDeletedInterfaceList;
|
|
extern RESUTIL_PROPERTY_ITEM NmpNetworkProperties[];
|
|
extern RESUTIL_PROPERTY_ITEM NmpInterfaceProperties[];
|
|
extern CL_NODE_ID NmpJoinerNodeId;
|
|
extern CL_NODE_ID NmpSponsorNodeId;
|
|
extern DWORD NmpJoinTimer;
|
|
extern BOOLEAN NmpJoinAbortPending;
|
|
extern DWORD NmpJoinSequence;
|
|
extern BOOLEAN NmpJoinerUp;
|
|
extern BOOLEAN NmpJoinBeginInProgress;
|
|
extern BOOLEAN NmpJoinerOutOfSynch;
|
|
extern WCHAR NmpInvalidJoinerIdString[];
|
|
extern WCHAR NmpUnknownString[];
|
|
extern LPWSTR NmpClusnetEndpoint;
|
|
extern NM_STATE NmpState;
|
|
extern CL_NODE_ID NmpLeaderNodeId;
|
|
extern BITSET NmpUpNodeSet;
|
|
extern WCHAR NmpNullString[];
|
|
extern CLUSTER_NETWORK_ROLE NmpDefaultNetworkRole;
|
|
extern BOOL NmpCleanupIfJoinAborted;
|
|
extern DWORD NmpAddNodeId;
|
|
extern LIST_ENTRY NmpLeaderChangeWaitList;
|
|
extern LIST_ENTRY * NmpIntraClusterRpcArr;
|
|
extern CRITICAL_SECTION NmpRPCLock;
|
|
extern BOOL NmpLastNodeEvicted;
|
|
extern DWORD NmpNodeCount;
|
|
extern BOOLEAN NmpIsNT5NodeInCluster;
|
|
extern LPWSTR NmpClusterInstanceId;
|
|
|
|
#if DBG
|
|
|
|
extern DWORD NmpRpcTimer;
|
|
|
|
#endif //DBG
|
|
|
|
|
|
//
|
|
// Synchronization macros
|
|
//
|
|
#define NmpAcquireLock() EnterCriticalSection(&NmpLock)
|
|
#define NmpReleaseLock() LeaveCriticalSection(&NmpLock)
|
|
|
|
#define NmpAcquireMutex() \
|
|
{ \
|
|
DWORD _status = WaitForSingleObject(NmpMutex, INFINITE); \
|
|
CL_ASSERT(_status == WAIT_OBJECT_0); \
|
|
} \
|
|
|
|
#define NmpReleaseMutex() ReleaseMutex(NmpMutex);
|
|
|
|
|
|
|
|
//
|
|
// Node Intracluster RPC record/cancellation routines.
|
|
// Useful to terminate outstanding RPCs to failed nodes.
|
|
//
|
|
|
|
#define NM_RPC_TIMEOUT 45000 // 45 secs
|
|
|
|
typedef struct _NM_INTRACLUSTER_RPC_THREAD {
|
|
LIST_ENTRY Linkage;
|
|
BOOLEAN Cancelled;
|
|
HANDLE Thread;
|
|
DWORD ThreadId;
|
|
}NM_INTRACLUSTER_RPC_THREAD, *PNM_INTRACLUSTER_RPC_THREAD;
|
|
|
|
#define NmpAcquireRPCLock() EnterCriticalSection(&NmpRPCLock);
|
|
#define NmpReleaseRPCLock() LeaveCriticalSection(&NmpRPCLock);
|
|
|
|
VOID
|
|
NmpTerminateRpcsToNode(
|
|
DWORD NodeId
|
|
);
|
|
|
|
VOID
|
|
NmpRpcTimerTick(
|
|
DWORD MsTickInterval
|
|
);
|
|
|
|
//
|
|
// IsolationPollTimerValue read routine
|
|
//
|
|
DWORD
|
|
NmpGetIsolationPollTimerValue(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Miscellaneous Routines
|
|
//
|
|
BOOLEAN
|
|
NmpLockedEnterApi(
|
|
NM_STATE RequiredState
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpEnterApi(
|
|
NM_STATE RequiredState
|
|
);
|
|
|
|
VOID
|
|
NmpLeaveApi(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpLockedLeaveApi(
|
|
VOID
|
|
);
|
|
|
|
LPWSTR
|
|
NmpLoadString(
|
|
IN UINT StringId
|
|
);
|
|
|
|
VOID
|
|
NmpDbgPrint(
|
|
IN ULONG LogLevel,
|
|
IN PCHAR FormatString,
|
|
...
|
|
);
|
|
|
|
DWORD
|
|
NmpCleanseRegistry(
|
|
IN LPCWSTR NodeId,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpQueryString(
|
|
IN HDMKEY Key,
|
|
IN LPCWSTR ValueName,
|
|
IN DWORD ValueType,
|
|
IN LPWSTR *StringBuffer,
|
|
IN OUT LPDWORD StringBufferSize,
|
|
OUT LPDWORD StringSize
|
|
);
|
|
|
|
BOOL
|
|
NmpCleanseResTypeCallback(
|
|
IN PNM_EVICTION_CONTEXT Context,
|
|
IN PVOID Context2,
|
|
IN PFM_RESTYPE pResType,
|
|
IN LPCWSTR pszResTypeName
|
|
);
|
|
|
|
BOOL
|
|
NmpCleanseResourceCallback(
|
|
IN PNM_EVICTION_CONTEXT Context,
|
|
IN PVOID Context2,
|
|
IN PFM_RESOURCE Resource,
|
|
IN LPCWSTR ResourceName
|
|
);
|
|
|
|
BOOL
|
|
NmpCleanseGroupCallback(
|
|
IN PNM_EVICTION_CONTEXT Context,
|
|
IN PVOID Context2,
|
|
IN PFM_GROUP Group,
|
|
IN LPCWSTR GroupName
|
|
);
|
|
|
|
VOID
|
|
NmpIssueClusterPropertyChangeEvent(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpMarshallObjectInfo(
|
|
IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
|
|
IN PVOID ObjectInfo,
|
|
OUT PVOID * PropertyList,
|
|
OUT LPDWORD PropertyListSize
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpVerifyNodeConnectivity(
|
|
PNM_NODE Node1,
|
|
PNM_NODE Node2,
|
|
PNM_NETWORK ExcludedNetwork
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpVerifyConnectivity(
|
|
PNM_NETWORK ExcludedNetwork
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpVerifyJoinerConnectivity(
|
|
IN PNM_NODE JoiningNode,
|
|
OUT PNM_NODE * UnreachableNode
|
|
);
|
|
|
|
//
|
|
// Node Management Routines
|
|
//
|
|
DWORD
|
|
NmpInitNodes(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpCleanupNodes(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpGetNodeDefinition(
|
|
IN OUT PNM_NODE_INFO2 NodeInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNodeDefinitions(
|
|
PNM_NODE_ENUM2 * NodeEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateNodeObjects(
|
|
IN PNM_NODE_ENUM2 NodeEnum2
|
|
);
|
|
|
|
DWORD NmpRefreshNodeObjects(
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateLocalNodeObject(
|
|
IN PNM_NODE_INFO2 NodeInfo2
|
|
);
|
|
|
|
PNM_NODE
|
|
NmpCreateNodeObject(
|
|
IN PNM_NODE_INFO2 NodeInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpGetNodeObjectInfo(
|
|
IN PNM_NODE Node,
|
|
IN OUT PNM_NODE_INFO2 NodeInfo
|
|
);
|
|
|
|
VOID
|
|
NmpDeleteNodeObject(
|
|
IN PNM_NODE Node,
|
|
IN BOOLEAN IssueEvent
|
|
);
|
|
|
|
BOOL
|
|
NmpDestroyNodeObject(
|
|
PNM_NODE Node
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNodeObjects(
|
|
PNM_NODE_ENUM2 * NodeEnum
|
|
);
|
|
|
|
VOID
|
|
NmpNodeFailureHandler(
|
|
CL_NODE_ID NodeId,
|
|
LPVOID NodeFailureContext
|
|
);
|
|
|
|
DWORD
|
|
NmpSetNodeInterfacePriority(
|
|
IN PNM_NODE Node,
|
|
IN DWORD Priority,
|
|
IN PNM_INTERFACE TargetInterface OPTIONAL,
|
|
IN DWORD TargetInterfacePriority OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNodeObjects(
|
|
PNM_NODE_ENUM2 * NodeEnum2
|
|
);
|
|
|
|
DWORD
|
|
NmpAddNode(
|
|
IN LPCWSTR NewNodeName,
|
|
IN DWORD NewNodeHighestVersion,
|
|
IN DWORD NewNodeLowestVersion,
|
|
IN DWORD NewNodeProductSuite,
|
|
IN DWORD RegistryNodeLimit
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpIsAddNodeAllowed(
|
|
IN DWORD NewNodeProductSuite,
|
|
IN DWORD RegistryNodeLimit,
|
|
OUT LPDWORD EffectiveNodeLimit OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
NmpAdviseNodeFailure(
|
|
IN PNM_NODE Node,
|
|
IN DWORD ErrorCode
|
|
);
|
|
|
|
|
|
//
|
|
// PnP Management Routines
|
|
//
|
|
DWORD
|
|
NmpInitializePnp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpShutdownPnp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpCleanupPnp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpWatchForPnpEvents(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpEnablePnpEvents(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpPostPnpNotification(
|
|
BOOLEAN IsPnpLockHeld
|
|
);
|
|
|
|
DWORD
|
|
NmpConfigureNetworks(
|
|
IN RPC_BINDING_HANDLE JoinSponsorBinding,
|
|
IN LPWSTR LocalNodeId,
|
|
IN LPWSTR LocalNodeName,
|
|
IN PNM_NETWORK_ENUM * NetworkEnum,
|
|
IN PNM_INTERFACE_ENUM2 * InterfaceEnum,
|
|
IN LPWSTR DefaultEndpoint,
|
|
IN OUT LPDWORD MatchedNetworkCount,
|
|
IN OUT LPDWORD NewNetworkCount,
|
|
IN BOOL RenameConnectoids
|
|
);
|
|
|
|
//
|
|
// Network Management Routines
|
|
//
|
|
DWORD
|
|
NmpInitializeNetworks(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpCleanupNetworks(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpSetNetworkRole(
|
|
PNM_NETWORK Network,
|
|
CLUSTER_NETWORK_ROLE NewRole,
|
|
HLOCALXSACTION Xaction,
|
|
HDMKEY NetworkKey
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateNetwork(
|
|
IN RPC_BINDING_HANDLE JoinSponsorBinding,
|
|
IN PNM_NETWORK_INFO NetworkInfo,
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalCreateNetwork(
|
|
IN PNM_NETWORK_INFO NetworkInfo,
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateNetworkDefinition(
|
|
IN PNM_NETWORK_INFO NetworkInfo,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpSetNetworkNameDefinition(
|
|
IN PNM_NETWORK_INFO NetworkInfo,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpGetNetworkDefinition(
|
|
IN LPWSTR NetworkId,
|
|
OUT PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNetworkDefinitions(
|
|
OUT PNM_NETWORK_ENUM * NetworkEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateNetworkObjects(
|
|
IN PNM_NETWORK_ENUM NetworkEnum
|
|
);
|
|
|
|
PNM_NETWORK
|
|
NmpCreateNetworkObject(
|
|
IN PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpGetNetworkObjectInfo(
|
|
IN PNM_NETWORK Network,
|
|
OUT PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
VOID
|
|
NmpDeleteNetworkObject(
|
|
IN PNM_NETWORK Network,
|
|
IN BOOLEAN IssueEvent
|
|
);
|
|
|
|
BOOL
|
|
NmpDestroyNetworkObject(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNetworkObjects(
|
|
OUT PNM_NETWORK_ENUM * NetworkEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpRegisterNetwork(
|
|
IN PNM_NETWORK Network,
|
|
IN BOOLEAN RetryOnFailure
|
|
);
|
|
|
|
VOID
|
|
NmpDeregisterNetwork(
|
|
IN PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpInsertInternalNetwork(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpValidateNetworkRoleChange(
|
|
PNM_NETWORK Network,
|
|
CLUSTER_NETWORK_ROLE NewRole
|
|
);
|
|
|
|
DWORD
|
|
NmpNetworkValidateCommonProperties(
|
|
IN PNM_NETWORK Network,
|
|
IN PVOID InBuffer,
|
|
IN DWORD InBufferSize,
|
|
OUT PNM_NETWORK_INFO NetworkInfo OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
NmpSetNetworkName(
|
|
IN PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalSetNetworkName(
|
|
IN PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
VOID
|
|
NmpRecomputeNT5NetworkAndInterfaceStates(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpComputeNetworkAndInterfaceStates(
|
|
PNM_NETWORK Network,
|
|
BOOLEAN IsolateFailure,
|
|
CLUSTER_NETWORK_STATE * NewNetworkState
|
|
);
|
|
|
|
VOID
|
|
NmpStartNetworkConnectivityReportTimer(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpStartNetworkStateRecalcTimer(
|
|
PNM_NETWORK Network,
|
|
DWORD Timeout
|
|
);
|
|
|
|
VOID
|
|
NmpStartNetworkFailureIsolationTimer(
|
|
PNM_NETWORK Network,
|
|
DWORD Timeout
|
|
);
|
|
|
|
VOID
|
|
NmpStartNetworkRegistrationRetryTimer(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpScheduleNetworkConnectivityReport(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpScheduleNetworkStateRecalc(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpScheduleNetworkRegistration(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpScheduleConnectivityReportWorker(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpScheduleNetworkWorker(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpConnectivityReportWorker(
|
|
IN PCLRTL_WORK_ITEM WorkItem,
|
|
IN DWORD Status,
|
|
IN DWORD BytesTransferred,
|
|
IN ULONG_PTR IoContext
|
|
);
|
|
|
|
VOID
|
|
NmpNetworkWorker(
|
|
IN PCLRTL_WORK_ITEM WorkItem,
|
|
IN DWORD Status,
|
|
IN DWORD BytesTransferred,
|
|
IN ULONG_PTR IoContext
|
|
);
|
|
|
|
VOID
|
|
NmpNetworkTimerTick(
|
|
IN DWORD MsTickInterval
|
|
);
|
|
|
|
VOID
|
|
NmpSetNetworkAndInterfaceStates(
|
|
IN PNM_NETWORK Network,
|
|
IN CLUSTER_NETWORK_STATE NewNetworkState,
|
|
IN PNM_STATE_ENTRY InterfaceStateVector,
|
|
IN DWORD VectorSize
|
|
);
|
|
|
|
VOID
|
|
NmpUpdateNetworkConnectivityForDownNode(
|
|
PNM_NODE Node
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumNetworkObjectStates(
|
|
OUT PNM_NETWORK_STATE_ENUM * NetworkStateEnum
|
|
);
|
|
|
|
VOID
|
|
NmpFreeNetworkStateEnum(
|
|
PNM_NETWORK_STATE_ENUM NetworkStateEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpReportNetworkConnectivity(
|
|
IN PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalSetNetworkAndInterfaceStates(
|
|
PNM_NETWORK Network,
|
|
CLUSTER_NETWORK_STATE NewNetworkState
|
|
);
|
|
|
|
VOID
|
|
NmpReferenceNetwork(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpDereferenceNetwork(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
PNM_NETWORK
|
|
NmpReferenceNetworkByAddress(
|
|
LPWSTR NetworkAddress
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumInternalNetworks(
|
|
OUT LPDWORD NetworkCount,
|
|
OUT PNM_NETWORK * NetworkList[]
|
|
);
|
|
|
|
DWORD
|
|
NmpSetNetworkPriorityOrder(
|
|
IN DWORD NetworkCount,
|
|
IN PNM_NETWORK * NetworkList,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpGetNetworkInterfaceFailureTimerValue(
|
|
IN LPCWSTR NetworkId
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpCheckForNetwork(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Network Multicast Management Routines
|
|
//
|
|
DWORD
|
|
NmpCleanupMulticast(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpRefreshMulticastConfiguration(
|
|
IN PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpRefreshClusterMulticastConfiguration(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpMulticastRegenerateKey(
|
|
IN PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpMulticastValidatePrivateProperties(
|
|
IN PNM_NETWORK Network,
|
|
IN HDMKEY RegistryKey,
|
|
IN PVOID InBuffer,
|
|
IN DWORD InBufferSize
|
|
);
|
|
|
|
VOID
|
|
NmpScheduleMulticastAddressRenewal(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpScheduleMulticastAddressRelease(
|
|
PNM_NETWORK Network
|
|
);
|
|
|
|
VOID
|
|
NmpFreeMulticastAddressReleaseList(
|
|
IN PNM_NETWORK Network
|
|
);
|
|
|
|
DWORD
|
|
NmpMulticastManualConfigChange(
|
|
IN PNM_NETWORK Network,
|
|
IN HDMKEY NetworkKey,
|
|
IN HDMKEY NetworkParametersKey,
|
|
IN PVOID InBuffer,
|
|
IN DWORD InBufferSize,
|
|
OUT BOOLEAN * SetProperties
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetNetworkMulticastConfiguration(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR NetworkId,
|
|
IN PVOID UpdateBuffer,
|
|
IN PVOID PropBuffer,
|
|
IN LPDWORD PropBufferSize
|
|
);
|
|
|
|
DWORD
|
|
NmpStartMulticast(
|
|
IN PNM_NETWORK Network OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
NmpStopMulticast(
|
|
IN PNM_NETWORK Network OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
NmpMulticastInitialize(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpIsClusterMulticastReady(
|
|
IN BOOLEAN CheckNodeCount
|
|
);
|
|
|
|
VOID
|
|
NmpMulticastProcessClusterVersionChange(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Interface Management Routines
|
|
//
|
|
DWORD
|
|
NmpInitializeInterfaces(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpCleanupInterfaces(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateInterface(
|
|
IN RPC_BINDING_HANDLE JoinSponsorBinding,
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalCreateInterface(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpSetInterfaceInfo(
|
|
IN RPC_BINDING_HANDLE JoinSponsorBinding,
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpLocalSetInterfaceInfo(
|
|
IN PNM_INTERFACE Interface,
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalSetInterfaceInfo(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpDeleteInterface(
|
|
IN RPC_BINDING_HANDLE JoinSponsorBinding,
|
|
IN LPWSTR InterfaceId,
|
|
IN LPWSTR NetworkId,
|
|
IN OUT PBOOLEAN NetworkDeleted
|
|
);
|
|
|
|
DWORD
|
|
NmpGlobalDeleteInterface(
|
|
IN LPWSTR InterfaceId,
|
|
IN OUT PBOOLEAN NetworkDeleted
|
|
);
|
|
|
|
DWORD
|
|
NmpInterfaceValidateCommonProperties(
|
|
IN PNM_INTERFACE Interface,
|
|
IN PVOID InBuffer,
|
|
IN DWORD InBufferSize,
|
|
OUT PNM_INTERFACE_INFO2 InterfaceInfo OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateInterfaceDefinition(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpGetInterfaceDefinition(
|
|
IN LPWSTR InterfaceId,
|
|
OUT PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
DWORD
|
|
NmpSetInterfaceDefinition(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo,
|
|
IN HLOCALXSACTION Xaction
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumInterfaceDefinitions(
|
|
OUT PNM_INTERFACE_ENUM2 * InterfaceEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpCreateInterfaceObjects(
|
|
IN PNM_INTERFACE_ENUM2 InterfaceEnum
|
|
);
|
|
|
|
PNM_INTERFACE
|
|
NmpCreateInterfaceObject(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo,
|
|
IN BOOLEAN RetryOnFailure
|
|
|
|
);
|
|
|
|
DWORD
|
|
NmpGetInterfaceObjectInfo1(
|
|
IN PNM_INTERFACE Interface,
|
|
IN OUT PNM_INTERFACE_INFO InterfaceInfo1
|
|
);
|
|
|
|
DWORD
|
|
NmpGetInterfaceObjectInfo(
|
|
IN PNM_INTERFACE Interface,
|
|
IN OUT PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
VOID
|
|
NmpDeleteInterfaceObject(
|
|
IN PNM_INTERFACE Interface,
|
|
IN BOOLEAN IssueEvent
|
|
);
|
|
|
|
BOOL
|
|
NmpDestroyInterfaceObject(
|
|
PNM_INTERFACE Interface
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumInterfaceObjects1(
|
|
OUT PNM_INTERFACE_ENUM * InterfaceEnum1
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumInterfaceObjects(
|
|
OUT PNM_INTERFACE_ENUM2 * InterfaceEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpRegisterInterface(
|
|
IN PNM_INTERFACE Interface,
|
|
IN BOOLEAN RetryOnFailure
|
|
);
|
|
|
|
VOID
|
|
NmpDeregisterInterface(
|
|
IN PNM_INTERFACE Interface
|
|
);
|
|
|
|
DWORD
|
|
NmpPrepareToCreateInterface(
|
|
IN PNM_INTERFACE_INFO2 InterfaceInfo,
|
|
OUT PNM_NETWORK * Network,
|
|
OUT PNM_NODE * Node
|
|
);
|
|
|
|
PNM_INTERFACE
|
|
NmpGetInterfaceForNodeAndNetworkById(
|
|
IN CL_NODE_ID NodeId,
|
|
IN CL_NETWORK_ID NetworkId
|
|
);
|
|
|
|
VOID
|
|
NmpFreeInterfaceStateEnum(
|
|
PNM_INTERFACE_STATE_ENUM InterfaceStateEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpEnumInterfaceObjectStates(
|
|
OUT PNM_INTERFACE_STATE_ENUM * InterfaceStateEnum
|
|
);
|
|
|
|
VOID
|
|
NmpProcessLocalInterfaceStateEvent(
|
|
IN PNM_INTERFACE Interface,
|
|
IN CLUSTER_NETINTERFACE_STATE NewState
|
|
);
|
|
|
|
DWORD
|
|
NmpReportInterfaceConnectivity(
|
|
IN RPC_BINDING_HANDLE RpcBinding,
|
|
IN LPWSTR InterfaceId,
|
|
IN PNM_CONNECTIVITY_VECTOR ConnectivityVector,
|
|
IN LPWSTR NetworkId
|
|
);
|
|
|
|
VOID
|
|
NmpProcessInterfaceConnectivityReport(
|
|
IN PNM_INTERFACE SourceInterface,
|
|
IN PNM_CONNECTIVITY_VECTOR ConnectivityVector
|
|
);
|
|
|
|
DWORD
|
|
NmpInterfaceCheckThread(
|
|
LPDWORD Context
|
|
);
|
|
|
|
VOID
|
|
NmpReportLocalInterfaceStateEvent(
|
|
IN CL_NODE_ID NodeId,
|
|
IN CL_NETWORK_ID NetworkId,
|
|
IN DWORD NewState
|
|
);
|
|
|
|
DWORD
|
|
NmpConvertPropertyListToInterfaceInfo(
|
|
IN PVOID InterfacePropertyList,
|
|
IN DWORD InterfacePropertyListSize,
|
|
PNM_INTERFACE_INFO2 InterfaceInfo
|
|
);
|
|
|
|
VOID
|
|
NmpSetInterfaceConnectivityData(
|
|
PNM_NETWORK Network,
|
|
DWORD InterfaceNetIndex,
|
|
CLUSTER_NETINTERFACE_STATE State
|
|
);
|
|
|
|
DWORD
|
|
NmpTestInterfaceConnectivity(
|
|
PNM_INTERFACE Interface1,
|
|
PBOOLEAN Interface1HasConnectivity,
|
|
PNM_INTERFACE Interface2,
|
|
PBOOLEAN Interfacet2HasConnectivity
|
|
);
|
|
|
|
DWORD
|
|
NmpBuildInterfaceOnlineAddressEnum(
|
|
PNM_INTERFACE Interface,
|
|
PNM_ADDRESS_ENUM * OnlineAddressEnum
|
|
);
|
|
|
|
DWORD
|
|
NmpBuildInterfacePingAddressEnum(
|
|
PNM_INTERFACE Interface,
|
|
PNM_ADDRESS_ENUM OnlineAddressEnum,
|
|
PNM_ADDRESS_ENUM * PingAddressEnum
|
|
);
|
|
|
|
BOOLEAN
|
|
NmpVerifyLocalInterfaceConnected(
|
|
IN PNM_INTERFACE Interface
|
|
);
|
|
|
|
//
|
|
// Membership Management Routines
|
|
//
|
|
|
|
DWORD
|
|
NmpMembershipInit(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpMembershipShutdown(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpMarkNodeUp(
|
|
CL_NODE_ID NodeId
|
|
);
|
|
|
|
VOID
|
|
NmpNodeUpEventHandler(
|
|
IN PNM_NODE Node
|
|
);
|
|
|
|
VOID
|
|
NmpNodeDownEventHandler(
|
|
IN PNM_NODE Node
|
|
);
|
|
|
|
DWORD
|
|
NmpMultiNodeDownEventHandler(
|
|
IN BITSET DownedNodeSet
|
|
);
|
|
|
|
DWORD
|
|
NmpNodeChange(
|
|
DWORD NodeId,
|
|
NODESTATUS newstatus
|
|
);
|
|
|
|
BOOL
|
|
NmpCheckQuorumEventHandler(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpHoldIoEventHandler(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpResumeIoEventHandler(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpHaltEventHandler(
|
|
IN DWORD HaltCode
|
|
);
|
|
|
|
VOID
|
|
NmpJoinAbort(
|
|
DWORD AbortStatus,
|
|
PNM_NODE JoinerNode
|
|
);
|
|
|
|
|
|
//
|
|
// Routines for joining nodes to a cluster
|
|
//
|
|
DWORD
|
|
NmpCreateJoinerRpcBindings(
|
|
IN PNM_NODE JoinerNode,
|
|
IN PNM_INTERFACE JoinerInterface
|
|
);
|
|
|
|
//
|
|
// Gum update message types.
|
|
//
|
|
// The first entries in this list are auto-marshalled through Gum...Ex.
|
|
// Any updates that are not auto-marshalled must come after NmUpdateMaxAuto
|
|
//
|
|
typedef enum {
|
|
NmUpdateCreateNode = 0,
|
|
NmUpdatePauseNode,
|
|
NmUpdateResumeNode,
|
|
NmUpdateEvictNode,
|
|
NmUpdateCreateNetwork,
|
|
NmUpdateSetNetworkName,
|
|
NmUpdateSetNetworkPriorityOrder,
|
|
NmUpdateSetNetworkCommonProperties,
|
|
NmUpdateCreateInterface,
|
|
NmUpdateSetInterfaceInfo,
|
|
NmUpdateSetInterfaceCommonProperties,
|
|
NmUpdateDeleteInterface,
|
|
NmUpdateJoinBegin,
|
|
NmUpdateJoinAbort,
|
|
//
|
|
// Version 2 (NT 5.0) extensions that are understood by
|
|
// NT4 SP4 4.
|
|
//
|
|
NmUpdateJoinBegin2,
|
|
NmUpdateSetNetworkAndInterfaceStates,
|
|
NmUpdatePerformFixups,
|
|
NmUpdatePerformFixups2,
|
|
//
|
|
// Version 2 (NT 5.0) extensions that are not understood
|
|
// by NT4 SP4. These may not be issued in a mixed NT4/NT5 cluster.
|
|
//
|
|
NmUpdateAddNode,
|
|
NmUpdateExtendedNodeState,
|
|
//
|
|
// NT 5.1 extensions that are not understood by NT5 and
|
|
// earlier. NT5 nodes will ignore these updates without
|
|
// error.
|
|
//
|
|
NmUpdateSetNetworkMulticastConfiguration,
|
|
//
|
|
// Max handled automatically by GUM
|
|
//
|
|
NmUpdateMaxAuto = 0x10000,
|
|
|
|
NmUpdateJoinComplete,
|
|
|
|
NmUpdateMaximum
|
|
} NM_GUM_MESSAGE_TYPES;
|
|
|
|
#pragma warning( disable: 4200 )
|
|
typedef struct _NM_JOIN_UPDATE {
|
|
DWORD JoinSequence;
|
|
DWORD IsPaused;
|
|
WCHAR NodeId[0];
|
|
} NM_JOIN_UPDATE, *PNM_JOIN_UPDATE;
|
|
#pragma warning( default: 4200 )
|
|
|
|
DWORD
|
|
NmpGumUpdateHandler(
|
|
IN DWORD Context,
|
|
IN BOOL SourceNode,
|
|
IN DWORD BufferLength,
|
|
IN PVOID Buffer
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateAddNode(
|
|
IN BOOL SourceNode,
|
|
IN LPDWORD NewNodeId,
|
|
IN LPCWSTR NewNodeName,
|
|
IN LPDWORD NewNodeHighestVersion,
|
|
IN LPDWORD NewNodeLowestVersion,
|
|
IN LPDWORD NewNodeProductSuite
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateCreateNode(
|
|
IN BOOL SourceNode,
|
|
IN LPDWORD NodeId
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdatePauseNode(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR NodeName
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateResumeNode(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR NodeName
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateEvictNode(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR NodeName
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateCreateNetwork(
|
|
IN BOOL IsSourceNode,
|
|
IN PVOID NetworkPropertyList,
|
|
IN LPDWORD NetworkPropertyListSize,
|
|
IN PVOID InterfacePropertyList,
|
|
IN LPDWORD InterfacePropertyListSize
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetNetworkName(
|
|
IN BOOL IsSourceNode,
|
|
IN LPWSTR NetworkId,
|
|
IN LPWSTR Name
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetNetworkPriorityOrder(
|
|
IN BOOL IsSourceNode,
|
|
IN LPCWSTR NetworkIdList
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetNetworkCommonProperties(
|
|
IN BOOL IsSourceNode,
|
|
IN LPWSTR NetworkId,
|
|
IN UCHAR * PropertyList,
|
|
IN LPDWORD PropertyListLength
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateCreateInterface(
|
|
IN BOOL IsSourceNode,
|
|
IN PVOID InterfacePropertyList,
|
|
IN LPDWORD InterfacePropertyListSize
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetInterfaceInfo(
|
|
IN BOOL SourceNode,
|
|
IN PVOID InterfacePropertyList,
|
|
IN LPDWORD InterfacePropertyListSize
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetInterfaceCommonProperties(
|
|
IN BOOL IsSourceNode,
|
|
IN LPWSTR InterfaceId,
|
|
IN UCHAR * PropertyList,
|
|
IN LPDWORD PropertyListLength
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateDeleteInterface(
|
|
IN BOOL IsSourceNode,
|
|
IN LPWSTR InterfaceId
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateJoinBegin(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR JoinerNodeId,
|
|
IN LPWSTR JoinerNodeName,
|
|
IN LPWSTR SponsorNodeId
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateJoinComplete(
|
|
IN PNM_JOIN_UPDATE JoinUpdate
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateJoinAbort(
|
|
IN BOOL SourceNode,
|
|
IN LPDWORD JoinSequence,
|
|
IN LPWSTR JoinerNodeId
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateJoinBegin2(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR JoinerNodeId,
|
|
IN LPWSTR JoinerNodeName,
|
|
IN LPWSTR SponsorNodeId,
|
|
IN LPDWORD JoinerHighestVersion,
|
|
IN LPDWORD JoinerLowestVersion
|
|
);
|
|
|
|
DWORD
|
|
NmpUpdateSetNetworkAndInterfaceStates(
|
|
IN BOOL IsSourceNode,
|
|
IN LPWSTR NetworkId,
|
|
IN CLUSTER_NETWORK_STATE * NewNetworkState,
|
|
IN PNM_STATE_ENTRY InterfaceStateVector,
|
|
IN LPDWORD InterfaceStateVectorSize
|
|
);
|
|
|
|
|
|
|
|
DWORD
|
|
NmpDoInterfacePing(
|
|
IN PNM_INTERFACE Interface,
|
|
IN PNM_ADDRESS_ENUM PingAddressEnum,
|
|
OUT BOOLEAN * PingSucceeded
|
|
);
|
|
|
|
//versioning functions
|
|
VOID
|
|
NmpResetClusterVersion(
|
|
BOOL ProcessChanges
|
|
);
|
|
|
|
DWORD NmpValidateNodeVersion(
|
|
IN LPCWSTR NodeId,
|
|
IN DWORD dwHighestVersion,
|
|
IN DWORD dwLowestVersion
|
|
);
|
|
|
|
DWORD NmpFormFixupNodeVersion(
|
|
IN LPCWSTR NodeId,
|
|
IN DWORD dwHighestVersion,
|
|
IN DWORD dwLowestVersion
|
|
);
|
|
|
|
DWORD NmpJoinFixupNodeVersion(
|
|
IN HLOCALXSACTION hXsaction,
|
|
IN LPCWSTR NodeId,
|
|
IN DWORD dwHighestVersion,
|
|
IN DWORD dwLowestVersion
|
|
);
|
|
|
|
DWORD NmpIsNodeVersionAllowed(
|
|
IN DWORD dwExcludeNodeId,
|
|
IN DWORD NodeHighestVersion,
|
|
IN DWORD NodeLowestVersion,
|
|
IN BOOL bJoin
|
|
);
|
|
|
|
DWORD NmpCalcClusterVersion(
|
|
IN DWORD dwExcludeNodeId,
|
|
OUT LPDWORD pdwClusterHighestVersion,
|
|
OUT LPDWORD pdwClusterLowestVersion
|
|
);
|
|
|
|
|
|
DWORD NmpUpdatePerformFixups(
|
|
IN BOOL IsSourceNode,
|
|
IN PVOID PropertyList,
|
|
IN LPDWORD PropertyListSize
|
|
);
|
|
|
|
DWORD NmpUpdatePerformFixups2(
|
|
IN BOOL IsSourceNode,
|
|
IN PVOID PropertyList,
|
|
IN LPDWORD PropertyListSize,
|
|
IN LPDWORD lpdwFixupNum,
|
|
IN PVOID lpKeyName,
|
|
IN PVOID pPropertyBuffer
|
|
);
|
|
|
|
DWORD NmpUpdateExtendedNodeState(
|
|
IN BOOL SourceNode,
|
|
IN LPWSTR NodeId,
|
|
IN CLUSTER_NODE_STATE* ExtendedState
|
|
);
|
|
|
|
VOID
|
|
NmpProcessClusterVersionChange(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpResetClusterNodeLimit(
|
|
);
|
|
|
|
// Fixup routine for updating the node version info, used by nmperformfixups
|
|
|
|
DWORD
|
|
NmpBuildVersionInfo(
|
|
IN DWORD dwFixUpType,
|
|
OUT PVOID * ppPropertyList,
|
|
OUT LPDWORD pdwPropertyListSize,
|
|
OUT LPWSTR * lpszKeyName
|
|
);
|
|
|
|
//
|
|
// connectoid advise sink functions
|
|
//
|
|
|
|
HRESULT
|
|
NmpInitializeConnectoidAdviseSink(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Routines that must be supplied by users of the ClNet package.
|
|
//
|
|
VOID
|
|
ClNetPrint(
|
|
IN ULONG LogLevel,
|
|
IN PCHAR FormatString,
|
|
...
|
|
);
|
|
|
|
VOID
|
|
ClNetLogEvent(
|
|
IN DWORD LogLevel,
|
|
IN DWORD MessageId
|
|
);
|
|
|
|
VOID
|
|
ClNetLogEvent1(
|
|
IN DWORD LogLevel,
|
|
IN DWORD MessageId,
|
|
IN LPCWSTR Arg1
|
|
);
|
|
|
|
VOID
|
|
ClNetLogEvent2(
|
|
IN DWORD LogLevel,
|
|
IN DWORD MessageId,
|
|
IN LPCWSTR Arg1,
|
|
IN LPCWSTR Arg2
|
|
);
|
|
|
|
VOID
|
|
ClNetLogEvent3(
|
|
IN DWORD LogLevel,
|
|
IN DWORD MessageId,
|
|
IN LPCWSTR Arg1,
|
|
IN LPCWSTR Arg2,
|
|
IN LPCWSTR Arg3
|
|
);
|
|
|
|
//
|
|
// Shared key management routines.
|
|
//
|
|
DWORD
|
|
NmpGetClusterKey(
|
|
OUT PVOID KeyBuffer,
|
|
IN OUT DWORD * KeyBufferLength
|
|
);
|
|
|
|
DWORD
|
|
NmpRegenerateClusterKey(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NmpFreeClusterKey(
|
|
VOID
|
|
);
|
|
|
|
#endif // _NMP_INCLUDED
|
|
|
|
|
|
|