236 lines
6.5 KiB
C
236 lines
6.5 KiB
C
/*++
|
||
|
||
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)
|
||
|
||
#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_
|
||
|