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.
243 lines
7.2 KiB
243 lines
7.2 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ep.h
|
|
|
|
Abstract:
|
|
|
|
Header file for definitions and structure for the Event Processor
|
|
component of the Cluster Service portion of the Windows NT Cluster project.
|
|
|
|
Author:
|
|
|
|
Rod Gamache (rodga) 28-Feb-1996
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _EVENT_PROCESSOR_
|
|
#define _EVENT_PROCESSOR_
|
|
|
|
|
|
//***********************************
|
|
//
|
|
// Global Cluster Service definitions
|
|
//
|
|
//***********************************
|
|
|
|
|
|
typedef DWORDLONG CLUSTER_EVENT;
|
|
typedef CLUSTER_EVENT *PCLUSTER_EVENT;
|
|
|
|
//
|
|
// Event flags. These indicate what should be done with the Context once
|
|
// the event has been dispatched.
|
|
//
|
|
//
|
|
#define EP_DEREF_CONTEXT 0x00000001 // OmDereferenceObject(Context)
|
|
#define EP_FREE_CONTEXT 0x00000002 // LocalFree(Context)
|
|
#define EP_CONTEXT_VALID 0x00000004
|
|
|
|
typedef
|
|
DWORD
|
|
(WINAPI *PEVENT_ROUTINE) (
|
|
IN CLUSTER_EVENT Event,
|
|
IN PVOID Context
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpInitialize(
|
|
VOID
|
|
);
|
|
|
|
DWORD EpInitPhase1();
|
|
DWORD EpIfnitPhase1();
|
|
|
|
VOID
|
|
EpShutdown(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpPostEvent(
|
|
IN CLUSTER_EVENT Event,
|
|
IN DWORD Flags,
|
|
IN PVOID Context
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpPostSyncEvent(
|
|
IN CLUSTER_EVENT Event,
|
|
IN DWORD Flags,
|
|
IN PVOID Context
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpRegisterSyncEventHandler(
|
|
IN CLUSTER_EVENT EventMask,
|
|
IN PEVENT_ROUTINE EventRoutine
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpRegisterEventHandler(
|
|
IN CLUSTER_EVENT EventMask,
|
|
IN PEVENT_ROUTINE EventRoutine
|
|
);
|
|
|
|
DWORD
|
|
WINAPI
|
|
EpClusterWidePostEvent(
|
|
IN CLUSTER_EVENT Event,
|
|
IN DWORD dwFlags,
|
|
IN PVOID Context,
|
|
IN DWORD ContextSize
|
|
);
|
|
|
|
#define ClusterEvent(Event, pObject) EpPostEvent(Event, 0, pObject)
|
|
|
|
#define ClusterEventEx(Event, Flags, Context) \
|
|
EpPostEvent(Event, Flags, Context)
|
|
|
|
#define ClusterSyncEventEx(Event, Flags, Context) \
|
|
EpPostSyncEvent(Event, Flags, Context)
|
|
|
|
#define ClusterWideEvent(Event, pObject) \
|
|
EpClusterWidePostEvent(Event, 0, pObject, 0)
|
|
|
|
//if you pass in a cluster wide object pass 0 as the context
|
|
//if you pass a pointer to some other data pass EP_CONTEXT_VALID
|
|
//You will be responsible for cleaning up the memory for that context
|
|
//i.e EP_FREE_CONTEXT is automatically added to the flag bits since this
|
|
//request is GUM'ed around to different nodes and each node makes a copy
|
|
//of this context and calls the local EpPostEvent. EpEventHandler then
|
|
//frees that memory
|
|
#define ClusterWideEventEx(Event, Flags, Context, ContextSize) \
|
|
EpClusterWidePostEvent(Event, Flags, Context, ContextSize)
|
|
//
|
|
// Define Cluster Service states
|
|
//
|
|
|
|
typedef enum _CLUSTER_SERVICE_STATE {
|
|
ClusterOffline,
|
|
ClusterOnline,
|
|
ClusterPaused
|
|
} CLUSTER_SERVICE_STATE;
|
|
|
|
//
|
|
// Definitions for Cluster Events. These events are used both as masks and as
|
|
// event identifiers within the Cluster Service. Cluster Service components
|
|
// register to receive multiple events, but can deliver notification of only
|
|
// one event at a time. This mask should be a CLUSTER_EVENT type. We get 64
|
|
// unique event masks.
|
|
//
|
|
|
|
// Cluster Service Events
|
|
|
|
#define CLUSTER_EVENT_ONLINE 0x0000000000000001
|
|
#define CLUSTER_EVENT_SHUTDOWN 0x0000000000000002
|
|
|
|
// Node Events
|
|
|
|
#define CLUSTER_EVENT_NODE_UP 0x0000000000000004
|
|
#define CLUSTER_EVENT_NODE_DOWN 0x0000000000000008
|
|
// state change
|
|
#define CLUSTER_EVENT_NODE_CHANGE 0x0000000000000010
|
|
#define CLUSTER_EVENT_NODE_ADDED 0x0000000000000020
|
|
#define CLUSTER_EVENT_NODE_DELETED 0x0000000000000040
|
|
#define CLUSTER_EVENT_NODE_PROPERTY_CHANGE 0x0000000000000080
|
|
#define CLUSTER_EVENT_NODE_JOIN 0x0000000000000100
|
|
|
|
// Group Events
|
|
|
|
#define CLUSTER_EVENT_GROUP_ONLINE 0x0000000000000200
|
|
#define CLUSTER_EVENT_GROUP_OFFLINE 0x0000000000000400
|
|
#define CLUSTER_EVENT_GROUP_FAILED 0x0000000000000800
|
|
// state change
|
|
#define CLUSTER_EVENT_GROUP_CHANGE 0x0000000000001000
|
|
#define CLUSTER_EVENT_GROUP_ADDED 0x0000000000002000
|
|
#define CLUSTER_EVENT_GROUP_DELETED 0x0000000000004000
|
|
#define CLUSTER_EVENT_GROUP_PROPERTY_CHANGE 0x0000000000008000
|
|
|
|
// Resource Events
|
|
|
|
#define CLUSTER_EVENT_RESOURCE_ONLINE 0x0000000000010000
|
|
#define CLUSTER_EVENT_RESOURCE_OFFLINE 0x0000000000020000
|
|
#define CLUSTER_EVENT_RESOURCE_FAILED 0x0000000000040000
|
|
// state change
|
|
#define CLUSTER_EVENT_RESOURCE_CHANGE 0x0000000000080000
|
|
#define CLUSTER_EVENT_RESOURCE_ADDED 0x0000000000100000
|
|
#define CLUSTER_EVENT_RESOURCE_DELETED 0x0000000000200000
|
|
#define CLUSTER_EVENT_RESOURCE_PROPERTY_CHANGE 0x0000000000400000
|
|
|
|
// Resource Type Events
|
|
|
|
#define CLUSTER_EVENT_RESTYPE_ADDED 0x0000000000800000
|
|
#define CLUSTER_EVENT_RESTYPE_DELETED 0x0000000001000000
|
|
|
|
#define CLUSTER_EVENT_PROPERTY_CHANGE 0x0000000002000000
|
|
|
|
#define CLUSTER_EVENT_NETWORK_UNAVAILABLE 0x0000000004000000
|
|
#define CLUSTER_EVENT_NETWORK_DOWN 0x0000000008000000
|
|
#define CLUSTER_EVENT_NETWORK_PARTITIONED 0x0000000010000000
|
|
#define CLUSTER_EVENT_NETWORK_UP 0x0000000020000000
|
|
#define CLUSTER_EVENT_NETWORK_PROPERTY_CHANGE 0x0000000040000000
|
|
#define CLUSTER_EVENT_NETWORK_ADDED 0x0000000080000000
|
|
#define CLUSTER_EVENT_NETWORK_DELETED 0x0000000100000000
|
|
|
|
#define CLUSTER_EVENT_NETINTERFACE_UNAVAILABLE 0x0000000200000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_FAILED 0x0000000400000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_UNREACHABLE 0x0000000800000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_UP 0x0000001000000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_PROPERTY_CHANGE 0x0000002000000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_ADDED 0x0000004000000000
|
|
#define CLUSTER_EVENT_NETINTERFACE_DELETED 0x0000008000000000
|
|
|
|
#define CLUSTER_EVENT_NODE_DOWN_EX 0x0000010000000000
|
|
#define CLUSTER_EVENT_API_NODE_UP 0x0000020000000000
|
|
#define CLUSTER_EVENT_API_NODE_SHUTTINGDOWN 0x0000040000000000
|
|
|
|
#define CLUSTER_EVENT_RESTYPE_PROPERTY_CHANGE 0x0000080000000000
|
|
|
|
// all events
|
|
#define CLUSTER_EVENT_ALL 0x00000FFFFFFFFFFF
|
|
|
|
|
|
|
|
//**********************************
|
|
//
|
|
// Local Event Processor definitions
|
|
//
|
|
//**********************************
|
|
|
|
|
|
//
|
|
// Define Event Processor states
|
|
//
|
|
|
|
typedef enum _EVENT_PROCESSOR_STATE {
|
|
EventProcessorStateIniting,
|
|
EventProcessorStateOnline,
|
|
EventProcessorStateExiting
|
|
} EVENT_PROCESS_STATE;
|
|
|
|
//
|
|
// Event Processor Dispatch Table for dispatching events
|
|
//
|
|
|
|
typedef struct _EVENT_DISPATCH_TABLE {
|
|
CLUSTER_EVENT EventMask;
|
|
PEVENT_ROUTINE EventRoutine;
|
|
} EVENT_DISPATCH_TABLE, *PEVENT_DISPATCH_TABLE;
|
|
|
|
|
|
#endif // _EVENT_PROCESSOR_
|
|
|