/*++ 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_