5b10f050be925739f47b27ddb5075f5f cnxman-socket.h
authorJakub Bogusz <qboosh@pld-linux.org>
Thu, 14 Apr 2005 22:41:49 +0000 (22:41 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    cnxman-socket.h -> 1.1

cnxman-socket.h [new file with mode: 0644]

diff --git a/cnxman-socket.h b/cnxman-socket.h
new file mode 100644 (file)
index 0000000..8094a49
--- /dev/null
@@ -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
This page took 0.048043 seconds and 4 git commands to generate.