From 75075938d427f5d9bebf5ea95ad51eda053c9fb0 Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Thu, 14 Apr 2005 22:41:49 +0000 Subject: [PATCH] 5b10f050be925739f47b27ddb5075f5f cnxman-socket.h Changed files: cnxman-socket.h -> 1.1 --- cnxman-socket.h | 234 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 cnxman-socket.h diff --git a/cnxman-socket.h b/cnxman-socket.h new file mode 100644 index 0000000..8094a49 --- /dev/null +++ b/cnxman-socket.h @@ -0,0 +1,234 @@ +/****************************************************************************** +******************************************************************************* +** +** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. +** Copyright (C) 2004 Red Hat, Inc. All rights reserved. +** +** This copyrighted material is made available to anyone wishing to use, +** modify, copy, or redistribute it subject to the terms and conditions +** of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +/* CMAN socket interface header, + may be include by user or kernel code */ + +#ifndef __CNXMAN_SOCKET_H +#define __CNXMAN_SOCKET_H + +/* A currently unused number. TIPC also uses this number and you're unlikely + to be using both. + */ +#define AF_CLUSTER 30 +#define PF_CLUSTER AF_CLUSTER + +/* Protocol(socket) types */ +#define CLPROTO_MASTER 2 +#define CLPROTO_CLIENT 3 + +/* ioctls -- should register these properly */ +#define SIOCCLUSTER_NOTIFY _IOW('x', 0x01, int) +#define SIOCCLUSTER_REMOVENOTIFY _IO( 'x', 0x02) +#define SIOCCLUSTER_GETMEMBERS _IOR('x', 0x03, struct cl_cluster_nodelist) +#define SIOCCLUSTER_SETEXPECTED_VOTES _IOW('x', 0x04, int) +#define SIOCCLUSTER_ISQUORATE _IO( 'x', 0x05) +#define SIOCCLUSTER_ISLISTENING _IOW('x', 0x06, struct cl_listen_request) +#define SIOCCLUSTER_GETALLMEMBERS _IOR('x', 0x07, struct cl_cluster_nodelist) +#define SIOCCLUSTER_SET_VOTES _IOW('x', 0x08, int) +#define SIOCCLUSTER_GET_VERSION _IOR('x', 0x09, struct cl_version) +#define SIOCCLUSTER_SET_VERSION _IOW('x', 0x0a, struct cl_version) +#define SIOCCLUSTER_ISACTIVE _IO( 'x', 0x0b) +#define SIOCCLUSTER_KILLNODE _IOW('x', 0x0c, int) +#define SIOCCLUSTER_GET_JOINCOUNT _IO( 'x', 0x0d) +#define SIOCCLUSTER_SERVICE_REGISTER _IOW('x', 0x0e, char) +#define SIOCCLUSTER_SERVICE_UNREGISTER _IO('x', 0x0f) +#define SIOCCLUSTER_SERVICE_JOIN _IO( 'x', 0x10) +#define SIOCCLUSTER_SERVICE_LEAVE _IO( 'x', 0x20) +#define SIOCCLUSTER_SERVICE_SETSIGNAL _IOW('x', 0x30, int) +#define SIOCCLUSTER_SERVICE_STARTDONE _IOW('x', 0x40, unsigned int) +#define SIOCCLUSTER_SERVICE_GETEVENT _IOR('x', 0x50, struct cl_service_event) +#define SIOCCLUSTER_SERVICE_GETMEMBERS _IOR('x', 0x60, struct cl_cluster_nodelist) +#define SIOCCLUSTER_SERVICE_GLOBALID _IOR('x', 0x70, uint32_t) +#define SIOCCLUSTER_SERVICE_SETLEVEL _IOR('x', 0x80, int) +#define SIOCCLUSTER_GETNODE _IOWR('x', 0x90, struct cl_cluster_node) +#define SIOCCLUSTER_GETCLUSTER _IOWR('x', 0x91, struct cl_cluster_info) +#define SIOCCLUSTER_BARRIER _IOW('x', 0x0a0, struct cl_barrier_info) + +/* These were setsockopts */ +#define SIOCCLUSTER_PASS_SOCKET _IOW('x', 0x0b0, struct cl_passed_sock) +#define SIOCCLUSTER_SET_NODENAME _IOW('x', 0x0b1, char *) +#define SIOCCLUSTER_SET_NODEID _IOW('x', 0x0b2, int) +#define SIOCCLUSTER_JOIN_CLUSTER _IOW('x', 0x0b3, struct cl_join_cluster_info) +#define SIOCCLUSTER_LEAVE_CLUSTER _IOW('x', 0x0b4, int) + + +/* Maximum size of a cluster message */ +#define MAX_CLUSTER_MESSAGE 1500 +#define MAX_CLUSTER_MEMBER_NAME_LEN 255 +#define MAX_BARRIER_NAME_LEN 33 +#define MAX_SA_ADDR_LEN 12 +#define MAX_CLUSTER_NAME_LEN 16 + +/* Well-known cluster port numbers */ +#define CLUSTER_PORT_MEMBERSHIP 1 /* Mustn't block during cluster + * transitions! */ +#define CLUSTER_PORT_SERVICES 2 +#define CLUSTER_PORT_SYSMAN 10 /* Remote execution daemon */ +#define CLUSTER_PORT_CLVMD 11 /* Cluster LVM daemon */ +#define CLUSTER_PORT_SLM 12 /* LVM SLM (simple lock manager) */ + +/* Port numbers above this will be blocked when the cluster is inquorate or in + * transition */ +#define HIGH_PROTECTED_PORT 9 + +/* Reasons for leaving the cluster */ +#define CLUSTER_LEAVEFLAG_DOWN 0 /* Normal shutdown */ +#define CLUSTER_LEAVEFLAG_KILLED 1 +#define CLUSTER_LEAVEFLAG_PANIC 2 +#define CLUSTER_LEAVEFLAG_REMOVED 3 /* This one can reduce quorum */ +#define CLUSTER_LEAVEFLAG_REJECTED 4 /* Not allowed into the cluster in the + * first place */ +#define CLUSTER_LEAVEFLAG_INCONSISTENT 5 /* Our view of the cluster is + * in a minority */ +#define CLUSTER_LEAVEFLAG_DEAD 6 /* Discovered to be dead */ +#define CLUSTER_LEAVEFLAG_NORESPONSE 7 /* Didn't ACK message */ +#define CLUSTER_LEAVEFLAG_FORCE 0x10 /* Forced by command-line */ + +/* OOB messages sent to a local socket */ +#define CLUSTER_OOB_MSG_PORTCLOSED 1 +#define CLUSTER_OOB_MSG_STATECHANGE 2 +#define CLUSTER_OOB_MSG_SERVICEEVENT 3 + +/* Sendmsg flags, these are above the normal sendmsg flags so they don't + * interfere */ +#define MSG_NOACK 0x010000 /* Don't need an ACK for this message */ +#define MSG_QUEUE 0x020000 /* Queue the message for sending later */ +#define MSG_MULTICAST 0x080000 /* Message was sent to all nodes in the cluster + */ +#define MSG_ALLINT 0x100000 /* Send out of all interfaces */ +#define MSG_REPLYEXP 0x200000 /* Reply is expected */ +#define MSG_BCASTSELF 0x400000 /* Broadcast message also gets send to us */ + +typedef enum { NODESTATE_JOINING=1, NODESTATE_MEMBER, + NODESTATE_DEAD } nodestate_t; + + +struct sockaddr_cl { + unsigned short scl_family; + unsigned char scl_flags; + unsigned char scl_port; + int scl_nodeid; +}; + +/* + * This is how we pass the multicast & receive sockets into kernel space. + */ +struct cl_passed_sock { + int fd; /* FD of master socket to do multicast on */ + int number; /* Socket number, to match up recvonly & bcast + * sockets */ + int multicast; /* Is it multicast or receive ? */ +}; + +/* Cluster configuration info passed when we join the cluster */ +struct cl_join_cluster_info { + unsigned char votes; + unsigned int expected_votes; + unsigned int two_node; + unsigned int config_version; + + char cluster_name[17]; +}; + + +/* This is the structure, per node, returned from the membership ioctl */ +struct cl_cluster_node { + unsigned int size; + unsigned int node_id; + unsigned int us; + unsigned int leave_reason; + unsigned int incarnation; + nodestate_t state; + char name[MAX_CLUSTER_MEMBER_NAME_LEN]; + unsigned char votes; +}; + +/* The struct passed to the membership ioctls */ +struct cl_cluster_nodelist { + uint32_t max_members; + struct cl_cluster_node *nodes; +}; + +/* Structure passed to SIOCCLUSTER_ISLISTENING */ +struct cl_listen_request { + unsigned char port; + int nodeid; +}; + +/* A Cluster PORTCLOSED message - received by a local user as an OOB message */ +struct cl_portclosed_oob { + unsigned char cmd; /* CLUSTER_OOB_MSG_PORTCLOSED */ + unsigned char port; +}; + +/* Get all version numbers or set the config version */ +struct cl_version { + unsigned int major; + unsigned int minor; + unsigned int patch; + unsigned int config; +}; + +/* structure passed to barrier ioctls */ +struct cl_barrier_info { + char cmd; + char name[MAX_BARRIER_NAME_LEN]; + unsigned int flags; + unsigned long arg; +}; + +struct cl_cluster_info { + char name[MAX_CLUSTER_NAME_LEN+1]; + uint16_t number; +}; + +typedef enum { SERVICE_EVENT_STOP, SERVICE_EVENT_START, SERVICE_EVENT_FINISH, + SERVICE_EVENT_LEAVEDONE } service_event_t; + +typedef enum { SERVICE_START_FAILED, SERVICE_START_JOIN, SERVICE_START_LEAVE } + service_start_t; + +struct cl_service_event { + service_event_t type; + service_start_t start_type; + unsigned int event_id; + unsigned int last_stop; + unsigned int last_start; + unsigned int last_finish; + unsigned int node_count; +}; + + +/* Commands to the barrier ioctl */ +#define BARRIER_IOCTL_REGISTER 1 +#define BARRIER_IOCTL_CHANGE 2 +#define BARRIER_IOCTL_DELETE 3 +#define BARRIER_IOCTL_WAIT 4 + +/* Attributes of a barrier - bitmask */ +#define BARRIER_ATTR_AUTODELETE 1 +#define BARRIER_ATTR_MULTISTEP 2 +#define BARRIER_ATTR_MANUAL 4 +#define BARRIER_ATTR_ENABLED 8 +#define BARRIER_ATTR_CALLBACK 16 + +/* Attribute setting commands */ +#define BARRIER_SETATTR_AUTODELETE 1 +#define BARRIER_SETATTR_MULTISTEP 2 +#define BARRIER_SETATTR_ENABLED 3 +#define BARRIER_SETATTR_NODES 4 +#define BARRIER_SETATTR_CALLBACK 5 +#define BARRIER_SETATTR_TIMEOUT 6 + +#endif -- 2.43.0