windows-nt/Source/XPSP1/NT/base/cluster/clusnet/inc/ntddcnet.h

780 lines
23 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
ntddcnet.h
Abstract:
Public header file for the Cluster Network Driver. Defines all
control IOCTLs.
Author:
Mike Massa (mikemas) January 3, 1997
Revision History:
Who When What
-------- -------- ----------------------------------------------
mikemas 01-03-97 created
Notes:
--*/
#ifndef _NTDDCNET_INCLUDED_
#define _NTDDCNET_INCLUDED_
//
// Device Names.
//
// ClusterNetwork is the control device. All control IOCTLs are issued
// on this device. ClusterDatagramProtocol is the datagram transport device.
// This device supports TDI IOCTLs.
//
#define DD_CLUSNET_DEVICE_NAME L"\\Device\\ClusterNetwork"
#define DD_CDP_DEVICE_NAME L"\\Device\\ClusterDatagramProtocol"
//
// General Types
//
//
// Control IOCTL definitions.
//
#define FSCTL_NTDDCNET_BASE FILE_DEVICE_NETWORK
#define _NTDDCNET_CTL_CODE(function, method, access) \
CTL_CODE(FSCTL_NTDDCNET_BASE, function, method, access)
#define ClusnetIoctlCode(_ioctl) (((_ioctl) >> 2) & 0x00000FFF)
//
// General driver management IOCTLs. Codes 0-49
//
#define CLUSNET_MINIMUM_GENERAL_IOCTL 0
#define CLUSNET_MAXIMUM_GENERAL_IOCTL 49
/* #define ClusnetIsGeneralIoctl(_ioctl) \
( (ClusnetIoctlCode(_ioctl) >= CLUSNET_MINIMUM_GENERAL_IOCTL) && \
(ClusnetIoctlCode(_ioctl) <= CLUSNET_MAXIMUM_GENERAL_IOCTL) ) */
// Check for CLUSNET_MINIMUM_GENERAL_IOCTL removed since ioctl is a ULONG
// and always greater than zero. Reinstate if CLUSNET_MINIMUM_GENERAL_IOCTL
// is made nonzero.
#define ClusnetIsGeneralIoctl(_ioctl) \
(ClusnetIoctlCode(_ioctl) <= CLUSNET_MAXIMUM_GENERAL_IOCTL)
#define IOCTL_CLUSNET_INITIALIZE \
_NTDDCNET_CTL_CODE(0, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_SHUTDOWN \
_NTDDCNET_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_ENABLE_SHUTDOWN_ON_CLOSE \
_NTDDCNET_CTL_CODE(2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_DISABLE_SHUTDOWN_ON_CLOSE \
_NTDDCNET_CTL_CODE(3, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_SET_EVENT_MASK \
_NTDDCNET_CTL_CODE(4, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_GET_NEXT_EVENT \
_NTDDCNET_CTL_CODE(5, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_HALT \
_NTDDCNET_CTL_CODE(6, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_SET_MEMORY_LOGGING \
_NTDDCNET_CTL_CODE(7, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// NTE IOCTLs are a special class of general driver management IOCTLs.
// Codes are 8-12.
//
#define CLUSNET_MINIMUM_NTE_IOCTL 8
#define CLUSNET_MAXIMUM_NTE_IOCTL 12
#define ClusnetIsNTEIoctl(_ioctl) \
( (ClusnetIoctlCode(_ioctl) >= CLUSNET_MINIMUM_NTE_IOCTL) && \
(ClusnetIoctlCode(_ioctl) <= CLUSNET_MAXIMUM_NTE_IOCTL) )
#define IOCTL_CLUSNET_ADD_NTE \
_NTDDCNET_CTL_CODE(8, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_DELETE_NTE \
_NTDDCNET_CTL_CODE(9, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_SET_NTE_ADDRESS \
_NTDDCNET_CTL_CODE(10, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_ADD_NBT_INTERFACE \
_NTDDCNET_CTL_CODE(11, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CLUSNET_DEL_NBT_INTERFACE \
_NTDDCNET_CTL_CODE(12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// Codes 25-49 are reserved for general test ioctls
//
//
// General driver IOCTL structure definitions
//
//
// Initialize request. This must be issued before any other request.
//
typedef struct {
CL_NODE_ID LocalNodeId;
ULONG MaxNodes;
} CLUSNET_INITIALIZE_REQUEST, *PCLUSNET_INITIALIZE_REQUEST;
//
// Shutdown request. Deletes all registered nodes and interfaces.
//
typedef struct {
CL_NODE_ID LocalNodeId;
} CLUSNET_SHUTDOWN_REQUEST, *PCLUSNET_SHUTDOWN_REQUEST;
//
// shutdown on close request
//
typedef struct {
ULONG ProcessId;
} CLUSNET_SHUTDOWN_ON_CLOSE_REQUEST, *PCLUSNET_SHUTDOWN_ON_CLOSE_REQUEST;
//
// Set event mask request. Hands a bit mask and a function (kernel mode
// only) to the driver indicating which events the thread wishes to
// be notified about. The IRP is pended for user mode. Kernel mode
// events are delivered via the callback.
//
typedef VOID (*CLUSNET_EVENT_CALLBACK_ROUTINE)(CLUSNET_EVENT_TYPE,
CL_NODE_ID,
CL_NETWORK_ID);
typedef struct {
ULONG EventMask;
CLUSNET_EVENT_CALLBACK_ROUTINE KmodeEventCallback;
} CLUSNET_SET_EVENT_MASK_REQUEST, *PCLUSNET_SET_EVENT_MASK_REQUEST;
typedef CLUSNET_EVENT CLUSNET_EVENT_RESPONSE;
typedef PCLUSNET_EVENT PCLUSNET_EVENT_RESPONSE;
typedef struct _CLUSNET_EVENT_ENTRY {
LIST_ENTRY Linkage;
CLUSNET_EVENT EventData;
} CLUSNET_EVENT_ENTRY, *PCLUSNET_EVENT_ENTRY;
#define CN_EVENT_SIGNATURE 'tvec'
//
// in-memory logging. conveys the number of entries to allocate
// (zero if turning off) for logging events
//
typedef struct _CLUSNET_SET_MEM_LOGGING_REQUEST {
ULONG NumberOfEntries;
} CLUSNET_SET_MEM_LOGGING_REQUEST, *PCLUSNET_SET_MEM_LOGGING_REQUEST;
#ifdef MM_IN_CLUSNET
//
// Membership management IOCTLs. Codes 50-99
//
#define CLUSNET_MINIMUM_CMM_IOCTL 50
#define CLUSNET_MAXIMUM_CMM_IOCTL 99
#define ClusnetIsMembershipIoctl(_ioctl) \
( (ClusnetIoctlCode(_ioctl) >= CLUSNET_MINIMUM_CMM_IOCTL) && \
(ClusnetIoctlCode(_ioctl) <= CLUSNET_MAXIMUM_CMM_IOCTL) )
//
// NOTE: currently (3/3/97) CMM Ioctl codes 50 through 62 are not used.
// These were defined during an initial attempt to get the membership
// manager into kernel mode (which didn't succeed).
//
//
// first guy in cluster forms one...
//
#define IOCTL_CMM_FORM_CLUSTER \
_NTDDCNET_CTL_CODE(50, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// MMJoin phases. Basically correspond to the 4 messages that are sent as part
// of the Join process. End must be submitted to terminate the process.
//
#define IOCTL_CMM_JOIN_CLUSTER_PHASE1 \
_NTDDCNET_CTL_CODE(51, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_JOIN_CLUSTER_PHASE2 \
_NTDDCNET_CTL_CODE(52, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_JOIN_CLUSTER_PHASE3 \
_NTDDCNET_CTL_CODE(53, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_JOIN_CLUSTER_PHASE4 \
_NTDDCNET_CTL_CODE(54, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_JOIN_CLUSTER_ABORT \
_NTDDCNET_CTL_CODE(55, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_JOIN_CLUSTER_END \
_NTDDCNET_CTL_CODE(56, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl is used to deliver a join message on an active node.
//
#define IOCTL_CMM_DELIVER_JOIN_MESSAGE \
_NTDDCNET_CTL_CODE(57, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_SHUTDOWN_CLUSTER \
_NTDDCNET_CTL_CODE(58, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_LEAVE_CLUSTER \
_NTDDCNET_CTL_CODE(59, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_EJECT_CLUSTER \
_NTDDCNET_CTL_CODE(60, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CMM_GET_NODE_STATE \
_NTDDCNET_CTL_CODE(61, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// callbacks are done by completing an (usually) outstanding IRP. The type
// of callback as well as required parameters are passed back to clussvc
// by completing this IRP.
//
#define IOCTL_CMM_REGISTER_CALLBACK \
_NTDDCNET_CTL_CODE(62, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// Membership IOCTL structure definitions
//
//
// Common request structure
//
// This structure shared among a number of requests. The Node field may not be
// used; see the appropriate MM* routine to determine what is used.
//
typedef struct _CMM_COMMON_CLUSTER_REQUEST {
ULONG Node;
} CMM_COMMON_CLUSTER_REQUEST, *PCMM_COMMON_CLUSTER_REQUEST;
//
// Form cluster request
//
typedef struct _CMM_FORM_CLUSTER_REQUEST {
ULONG ClockPeriod;
ULONG SendHBRate;
ULONG RecvHBRate;
} CMM_FORM_CLUSTER_REQUEST, *PCMM_FORM_CLUSTER_REQUEST;
//
// Join cluster request
//
// Used for all four join phases. This structure is variable in length. Clussvc
// must allocate enough space in which the MM writes a packet to be sent by
// Clussvc. MM sets SizeOfSendData on output to indicate how much data is in
// SendData after a join phase has been called. SendNodeMask indicates which
// nodes should receive the packet.
//
typedef struct _CMM_JOIN_CLUSTER_REQUEST {
ULONG JoiningNode;
ULONG JoinTimeout;
} CMM_JOIN_CLUSTER_REQUEST, *PCMM_JOIN_CLUSTER_REQUEST;
//
// Join cluster response
//
typedef struct _CMM_JOIN_CLUSTER_RESPONSE {
ULONG SizeOfSendData;
ULONG SendNodeMask;
UCHAR SendData[0];
} CMM_JOIN_CLUSTER_RESPONSE, *PCMM_JOIN_CLUSTER_RESPONSE;
//
// Deliver join message request
//
typedef struct _CMM_DELIVER_JOIN_CLUSTER_REQUEST {
UCHAR MessageData[0];
} CMM_DELIVER_JION_MESSAGE_REQUEST, *PCMM_DELIVER_JION_MESSAGE_REQUEST;
//
// Eject node request
//
typedef CMM_COMMON_CLUSTER_REQUEST CMM_EJECT_CLUSTER_REQUEST;
typedef PCMM_COMMON_CLUSTER_REQUEST PCMM_EJECT_CLUSTER_REQUEST;
//
// Get node membership state request
//
typedef CMM_COMMON_CLUSTER_REQUEST CMM_GET_NODE_STATE_REQUEST;
typedef PCMM_COMMON_CLUSTER_REQUEST PCMM_GET_NODE_STATE_REQUEST;
//
// Get node membership state response
//
typedef struct _CMM_GET_NODE_STATE_RESPONSE {
CLUSNET_NODE_STATE State;
} CMM_GET_NODE_STATE_RESPONSE, *PCMM_GET_NODE_STATE_RESPONSE;
//
// struct used to notfiy clussvc of callback events. All callbacks have a DWORD as their
// first param. MMNodeChange is the only callback with a 2nd param. CallbackType is one
// of RGP_CALLBACK_*. These structs are linked off of the main RGP struct
//
typedef struct _CMM_CALLBACK_DATA {
ULONG CallbackType;
ULONG Arg1;
ULONG Arg2;
} CMM_CALLBACK_DATA, *PCMM_CALLBACK_DATA;
typedef struct _CMM_CALLBACK_EVENT {
LIST_ENTRY Linkage;
CMM_CALLBACK_DATA EventData;
} CMM_CALLBACK_EVENT, *PCMM_CALLBACK_EVENT;
#endif // MM_IN_CLUSNET
//
// Transport management IOCTLs. Codes 100-199
//
#define CLUSNET_MINIMUM_CX_IOCTL 100
#define CLUSNET_MAXIMUM_CX_IOCTL 199
#define ClusnetIsTransportIoctl(_ioctl) \
( (ClusnetIoctlCode(_ioctl) >= CLUSNET_MINIMUM_CX_IOCTL) && \
(ClusnetIoctlCode(_ioctl) <= CLUSNET_MAXIMUM_CX_IOCTL) )
#define IOCTL_CX_MINIMUM_IOCTL \
_NTDDCNET_CTL_CODE(100, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_REGISTER_NODE \
_NTDDCNET_CTL_CODE(100, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_DEREGISTER_NODE \
_NTDDCNET_CTL_CODE(101, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_REGISTER_NETWORK \
_NTDDCNET_CTL_CODE(102, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_DEREGISTER_NETWORK \
_NTDDCNET_CTL_CODE(103, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_REGISTER_INTERFACE \
_NTDDCNET_CTL_CODE(104, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_DEREGISTER_INTERFACE \
_NTDDCNET_CTL_CODE(105, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_ONLINE_NODE_COMM \
_NTDDCNET_CTL_CODE(106, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_OFFLINE_NODE_COMM \
_NTDDCNET_CTL_CODE(107, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_ONLINE_NETWORK \
_NTDDCNET_CTL_CODE(108, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_OFFLINE_NETWORK \
_NTDDCNET_CTL_CODE(109, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_NETWORK_PRIORITY \
_NTDDCNET_CTL_CODE(110, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_SET_NETWORK_PRIORITY \
_NTDDCNET_CTL_CODE(111, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_INTERFACE_PRIORITY \
_NTDDCNET_CTL_CODE(112, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_SET_INTERFACE_PRIORITY \
_NTDDCNET_CTL_CODE(113, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_NODE_STATE \
_NTDDCNET_CTL_CODE(114, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_NETWORK_STATE \
_NTDDCNET_CTL_CODE(115, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_INTERFACE_STATE \
_NTDDCNET_CTL_CODE(116, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_IGNORE_NODE_STATE \
_NTDDCNET_CTL_CODE(117, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_CX_SET_NODE_MMSTATE \
_NTDDCNET_CTL_CODE(118, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_NODE_MMSTATE \
_NTDDCNET_CTL_CODE(119, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_SEND_POISON_PACKET \
_NTDDCNET_CTL_CODE(120, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_SET_OUTERSCREEN \
_NTDDCNET_CTL_CODE(121, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_REGROUP_FINISHED \
_NTDDCNET_CTL_CODE(122, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_IMPORT_SECURITY_CONTEXTS \
_NTDDCNET_CTL_CODE(123, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_SET_NETWORK_RESTRICTION \
_NTDDCNET_CTL_CODE(124, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_RESERVE_ENDPOINT \
_NTDDCNET_CTL_CODE(125, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_CONFIGURE_MULTICAST \
_NTDDCNET_CTL_CODE(126, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CX_GET_MULTICAST_REACHABLE_SET \
_NTDDCNET_CTL_CODE(127, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// Codes 150-199 are reserved for test ioctls and are defined in cnettest.h
//
#define IOCTL_CX_MAXIMUM_IOCTL \
_NTDDCNET_CTL_CODE(199, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// Transport IOCTL structure definitions
//
//
// Common request definitions
//
typedef struct {
CL_NODE_ID Id;
} CX_NODE_COMMON_REQUEST, *PCX_NODE_COMMON_REQUEST;
typedef struct {
CL_NETWORK_ID Id;
} CX_NETWORK_COMMON_REQUEST, *PCX_NETWORK_COMMON_REQUEST;
typedef struct {
CL_NODE_ID NodeId;
CL_NETWORK_ID NetworkId;
} CX_INTERFACE_COMMON_REQUEST, *PCX_INTERFACE_COMMON_REQUEST;
//
// Node registration request.
//
typedef CX_NODE_COMMON_REQUEST CX_NODE_REG_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_NODE_REG_REQUEST;
//
// Node deregistration request.
//
typedef CX_NODE_COMMON_REQUEST CX_NODE_DEREG_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_NODE_DEREG_REQUEST;
//
// Network registration request
//
// The Priority indicates the order in which networks will be chosen to
// carry packets. Valid values are 0x1-0xFFFFFFFF. Numerically lower values
// are higher priority.
//
// The TdiProviderName and TdiBindAddress structures follow the registration
// strucuture in the IRP. The TdiProviderName is the device name
// (e.g \Device\Udp) which must be opened to access the underlying
// transport provider. The TdiBindAddress is the provider's local address to
// which the network should bind.
//
typedef struct {
CL_NETWORK_ID Id;
ULONG Priority;
BOOLEAN Restricted;
} CX_NETWORK_REG_REQUEST, *PCX_NETWORK_REG_REQUEST;
//
// Network deregistration request.
//
typedef CX_NETWORK_COMMON_REQUEST CX_NETWORK_DEREG_REQUEST;
typedef PCX_NETWORK_COMMON_REQUEST PCX_NETWORK_DEREG_REQUEST;
//
// Interface registration request.
//
// The Priority indicates the order in which interfaces will be chosen to
// carry packets. Valid values are 0x1-0xFFFFFFFF. Numerically lower values
// are higher priority. A value of zero indicates that the interface
// should inherit its priority from the associated network.
//
// AdapterIdOffset is the offset in bytes from the beginning of the
// CX_INTERFACE_REG_REQUEST structure to a buffer containing the adapter
// id as a string of UNICODE characters. AdapterIdLength is the length,
// in bytes, of the UNICODE string, not including terminating UNICODE_NULL.
// AdapterIdOffset is 64-bit aligned.
//
// The TdiAddress field is a placeholder for a TDI TRANSPORT_ADDRESS
// structure which is embedded in the registration structure. This
// structure contains the transport address at which the cluster transport
// on the specified node is listening on the specified network. For the
// local node, this is the address used in the network registration (unless
// a wildcard address was used).
//
typedef struct {
CL_NODE_ID NodeId;
CL_NETWORK_ID NetworkId;
ULONG Priority;
ULONG AdapterIdOffset;
ULONG AdapterIdLength;
ULONG TdiAddressLength;
ULONG TdiAddress[1]; // TDI TRANSPORT_ADDRESS struct
} CX_INTERFACE_REG_REQUEST, *PCX_INTERFACE_REG_REQUEST;
typedef struct {
ULONG MediaStatus; // NDIS_MEDIA_STATUS
} CX_INTERFACE_REG_RESPONSE, *PCX_INTERFACE_REG_RESPONSE;
//
// Interface deregistration request.
//
typedef CX_INTERFACE_COMMON_REQUEST CX_INTERFACE_DEREG_REQUEST;
typedef PCX_INTERFACE_COMMON_REQUEST PCX_INTERFACE_DEREG_REQUEST;
//
//
// Online node request
//
typedef CX_NODE_COMMON_REQUEST CX_ONLINE_NODE_COMM_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_ONLINE_NODE_COMM_REQUEST;
//
// Offline node request
//
typedef CX_NODE_COMMON_REQUEST CX_OFFLINE_NODE_COMM_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_OFFLINE_NODE_COMM_REQUEST;
// Online network request
//
// The TdiProviderName and TdiBindAddress structures follow the registration
// strucuture in the IRP. The TdiProviderName is the device name
// (e.g \Device\Udp) which must be opened to access the underlying
// transport provider. The TdiBindAddress is the provider's local address to
// which the network should bind.
//
// The output buffer for this request contains a TDI_ADDRESS_INFO structure,
// which contains the local address that the provider actually opened.
//
typedef struct {
CL_NETWORK_ID Id;
ULONG TdiProviderNameOffset; // offset from start of struct
ULONG TdiProviderNameLength; // in bytes, including NUL
ULONG TdiBindAddressOffset; // offset from start of struct
ULONG TdiBindAddressLength;
ULONG AdapterNameOffset; // offset from start of struct
ULONG AdapterNameLength;
} CX_ONLINE_NETWORK_REQUEST, *PCX_ONLINE_NETWORK_REQUEST;
//
// Offline network request
//
typedef CX_NETWORK_COMMON_REQUEST CX_OFFLINE_NETWORK_REQUEST;
typedef PCX_NETWORK_COMMON_REQUEST PCX_OFFLINE_NETWORK_REQUEST;
//
// Set network restriction request
//
typedef struct {
CL_NETWORK_ID Id;
BOOLEAN Restricted;
ULONG NewPriority;
} CX_SET_NETWORK_RESTRICTION_REQUEST, *PCX_SET_NETWORK_RESTRICTION_REQUEST;
//
// Get network priority request
//
typedef CX_NETWORK_COMMON_REQUEST CX_GET_NETWORK_PRIORITY_REQUEST;
typedef PCX_NETWORK_COMMON_REQUEST PCX_GET_NETWORK_PRIORITY_REQUEST;
//
// Get network priority response
//
typedef struct {
ULONG Priority;
} CX_GET_NETWORK_PRIORITY_RESPONSE, *PCX_GET_NETWORK_PRIORITY_RESPONSE;
//
// Set network priority request
//
typedef struct {
CL_NETWORK_ID Id;
ULONG Priority;
} CX_SET_NETWORK_PRIORITY_REQUEST, *PCX_SET_NETWORK_PRIORITY_REQUEST;
//
// Get interface priority request
//
typedef CX_INTERFACE_COMMON_REQUEST CX_GET_INTERFACE_PRIORITY_REQUEST;
typedef PCX_INTERFACE_COMMON_REQUEST PCX_GET_INTERFACE_PRIORITY_REQUEST;
//
// Get interface priority response
//
typedef struct {
ULONG InterfacePriority;
ULONG NetworkPriority;
} CX_GET_INTERFACE_PRIORITY_RESPONSE, *PCX_GET_INTERFACE_PRIORITY_RESPONSE;
//
// Set interface priority request
//
typedef struct {
CL_NODE_ID NodeId;
CL_NETWORK_ID NetworkId;
ULONG Priority;
} CX_SET_INTERFACE_PRIORITY_REQUEST, *PCX_SET_INTERFACE_PRIORITY_REQUEST;
//
// Get node state request
//
typedef CX_NODE_COMMON_REQUEST CX_GET_NODE_STATE_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_GET_NODE_STATE_REQUEST;
//
// Get node state response
//
typedef struct {
CLUSNET_NODE_COMM_STATE State;
} CX_GET_NODE_STATE_RESPONSE, *PCX_GET_NODE_STATE_RESPONSE;
//
// Get network state request
//
typedef CX_NETWORK_COMMON_REQUEST CX_GET_NETWORK_STATE_REQUEST;
typedef PCX_NETWORK_COMMON_REQUEST PCX_GET_NETWORK_STATE_REQUEST;
//
// Get network state response
//
typedef struct {
CLUSNET_NETWORK_STATE State;
} CX_GET_NETWORK_STATE_RESPONSE, *PCX_GET_NETWORK_STATE_RESPONSE;
//
// Get interface state request
//
typedef CX_INTERFACE_COMMON_REQUEST CX_GET_INTERFACE_STATE_REQUEST;
typedef PCX_INTERFACE_COMMON_REQUEST PCX_GET_INTERFACE_STATE_REQUEST;
//
// Get interface state response
//
typedef struct {
CLUSNET_INTERFACE_STATE State;
} CX_GET_INTERFACE_STATE_RESPONSE, *PCX_GET_INTERFACE_STATE_RESPONSE;
//
// Get node membership state request
//
typedef CX_NODE_COMMON_REQUEST CX_GET_NODE_MMSTATE_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_GET_NODE_MMSTATE_REQUEST;
//
// Get node membership state response
//
typedef struct {
CLUSNET_NODE_STATE State;
} CX_GET_NODE_MMSTATE_RESPONSE, *PCX_GET_NODE_MMSTATE_RESPONSE;
//
// Set node membership state request
//
typedef struct _CX_SET_NODE_MMSTATE_REQUEST {
CL_NODE_ID NodeId;
CLUSNET_NODE_STATE State;
} CX_SET_NODE_MMSTATE_REQUEST, *PCX_SET_NODE_MMSTATE_REQUEST;
//
// Send Poison Packet request
//
typedef CX_NODE_COMMON_REQUEST CX_SEND_POISON_PKT_REQUEST;
typedef PCX_NODE_COMMON_REQUEST PCX_SEND_POISON_PKT_REQUEST;
//
// Set Outerscreen request. sets clusnet's notion of which nodes
// are in the cluster. used to filter poison packets from non-cluster
// members.
//
typedef struct _CX_SET_OUTERSCREEN_REQUEST {
ULONG Outerscreen;
} CX_SET_OUTERSCREEN_REQUEST, *PCX_SET_OUTERSCREEN_REQUEST;
//
// Regroup Finished request. tell clusnet the new event epoch
//
typedef struct _CX_REGROUP_FINISHED_REQUEST {
ULONG NewEpoch;
} CX_REGROUP_FINISHED_REQUEST, *PCX_REGROUP_FINISHED_REQUEST;
//
// Import Security Context. used to ship pointers to security blobs
// from user to kernel mode so clusnet can sign its poison and
// heartbeat pkts.
//
typedef struct _CX_IMPORT_SECURITY_CONTEXT_REQUEST {
CL_NODE_ID JoiningNodeId;
PVOID PackageName;
ULONG PackageNameSize;
ULONG SignatureSize;
PVOID ServerContext;
PVOID ClientContext;
} CX_IMPORT_SECURITY_CONTEXT_REQUEST, *PCX_IMPORT_SECURITY_CONTEXT_REQUEST;
//
// Configure Multicast plumbs a network's multicast parameters into
// clusnet.
//
typedef struct _CX_CONFIGURE_MULTICAST_REQUEST {
CL_NETWORK_ID NetworkId;
ULONG MulticastNetworkBrand;
ULONG MulticastAddress; // offset from start of struct
ULONG MulticastAddressLength;
ULONG Key; // offset from start of struct
ULONG KeyLength;
ULONG Salt; // offset from start of struct
ULONG SaltLength;
} CX_CONFIGURE_MULTICAST_REQUEST, *PCX_CONFIGURE_MULTICAST_REQUEST;
//
// Request and response to query a network's multicast reachable set.
//
typedef CX_NETWORK_COMMON_REQUEST CX_GET_MULTICAST_REACHABLE_SET_REQUEST;
typedef PCX_NETWORK_COMMON_REQUEST PCX_GET_MULTICAST_REACHABLE_SET_REQUEST;
typedef struct _CX_GET_MULTICAST_REACHABLE_SET_RESPONSE {
ULONG NodeScreen;
} CX_GET_MULTICAST_REACHABLE_SET_RESPONSE,
*PCX_GET_MULTICAST_REACHABLE_SET_RESPONSE;
#endif //ifndef _NTDDCNET_INCLUDED_