xref: /dflybsd-src/contrib/lvm2/dist/daemons/clvmd/clvmd-comms.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino /*	$NetBSD: clvmd-comms.h,v 1.1.1.3 2009/12/02 00:27:01 haad Exp $	*/
286d7f5d3SJohn Marino 
386d7f5d3SJohn Marino /*
486d7f5d3SJohn Marino  * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
586d7f5d3SJohn Marino  * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
686d7f5d3SJohn Marino  *
786d7f5d3SJohn Marino  * This file is part of LVM2.
886d7f5d3SJohn Marino  *
986d7f5d3SJohn Marino  * This copyrighted material is made available to anyone wishing to use,
1086d7f5d3SJohn Marino  * modify, copy, or redistribute it subject to the terms and conditions
1186d7f5d3SJohn Marino  * of the GNU General Public License v.2.
1286d7f5d3SJohn Marino  *
1386d7f5d3SJohn Marino  * You should have received a copy of the GNU General Public License
1486d7f5d3SJohn Marino  * along with this program; if not, write to the Free Software Foundation,
1586d7f5d3SJohn Marino  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1686d7f5d3SJohn Marino  */
1786d7f5d3SJohn Marino 
1886d7f5d3SJohn Marino /*
1986d7f5d3SJohn Marino  * Abstraction layer for clvmd cluster communications
2086d7f5d3SJohn Marino  */
2186d7f5d3SJohn Marino 
2286d7f5d3SJohn Marino #ifndef _CLVMD_COMMS_H
2386d7f5d3SJohn Marino #define _CLVMD_COMMS_H
2486d7f5d3SJohn Marino 
2586d7f5d3SJohn Marino struct local_client;
2686d7f5d3SJohn Marino 
2786d7f5d3SJohn Marino struct cluster_ops {
2886d7f5d3SJohn Marino 	void (*cluster_init_completed) (void);
2986d7f5d3SJohn Marino 
3086d7f5d3SJohn Marino 	int (*cluster_send_message) (const void *buf, int msglen,
3186d7f5d3SJohn Marino 				     const char *csid,
3286d7f5d3SJohn Marino 				     const char *errtext);
3386d7f5d3SJohn Marino 	int (*name_from_csid) (const char *csid, char *name);
3486d7f5d3SJohn Marino 	int (*csid_from_name) (char *csid, const char *name);
3586d7f5d3SJohn Marino 	int (*get_num_nodes) (void);
3686d7f5d3SJohn Marino 	int (*cluster_fd_callback) (struct local_client *fd, char *buf, int len,
3786d7f5d3SJohn Marino 				    const char *csid,
3886d7f5d3SJohn Marino 				    struct local_client **new_client);
3986d7f5d3SJohn Marino 	int (*get_main_cluster_fd) (void);	/* gets accept FD or cman cluster socket */
4086d7f5d3SJohn Marino 	int (*cluster_do_node_callback) (struct local_client *client,
4186d7f5d3SJohn Marino 					 void (*callback) (struct local_client *,
4286d7f5d3SJohn Marino 							   const char *csid,
4386d7f5d3SJohn Marino 							   int node_up));
4486d7f5d3SJohn Marino 	int (*is_quorate) (void);
4586d7f5d3SJohn Marino 
4686d7f5d3SJohn Marino 	void (*get_our_csid) (char *csid);
4786d7f5d3SJohn Marino 	void (*add_up_node) (const char *csid);
4886d7f5d3SJohn Marino 	void (*reread_config) (void);
4986d7f5d3SJohn Marino 	void (*cluster_closedown) (void);
5086d7f5d3SJohn Marino 
5186d7f5d3SJohn Marino 	int (*get_cluster_name)(char *buf, int buflen);
5286d7f5d3SJohn Marino 
5386d7f5d3SJohn Marino 	int (*sync_lock) (const char *resource, int mode,
5486d7f5d3SJohn Marino 			  int flags, int *lockid);
5586d7f5d3SJohn Marino 	int (*sync_unlock) (const char *resource, int lockid);
5686d7f5d3SJohn Marino 
5786d7f5d3SJohn Marino };
5886d7f5d3SJohn Marino 
5986d7f5d3SJohn Marino #ifdef USE_GULM
6086d7f5d3SJohn Marino #  include "tcp-comms.h"
6186d7f5d3SJohn Marino struct cluster_ops *init_gulm_cluster(void);
6286d7f5d3SJohn Marino #define MAX_CSID_LEN 			GULM_MAX_CSID_LEN
6386d7f5d3SJohn Marino #define MAX_CLUSTER_MEMBER_NAME_LEN	GULM_MAX_CLUSTER_MEMBER_NAME_LEN
6486d7f5d3SJohn Marino #endif
6586d7f5d3SJohn Marino 
6686d7f5d3SJohn Marino #ifdef USE_CMAN
6786d7f5d3SJohn Marino #  include <netinet/in.h>
6886d7f5d3SJohn Marino #  include "libcman.h"
6986d7f5d3SJohn Marino #  define CMAN_MAX_CSID_LEN 4
7086d7f5d3SJohn Marino #  ifndef MAX_CSID_LEN
7186d7f5d3SJohn Marino #    define MAX_CSID_LEN CMAN_MAX_CSID_LEN
7286d7f5d3SJohn Marino #  endif
7386d7f5d3SJohn Marino #  undef MAX_CLUSTER_MEMBER_NAME_LEN
7486d7f5d3SJohn Marino #  define MAX_CLUSTER_MEMBER_NAME_LEN   CMAN_MAX_NODENAME_LEN
7586d7f5d3SJohn Marino #  define CMAN_MAX_CLUSTER_MESSAGE 1500
7686d7f5d3SJohn Marino #  define CLUSTER_PORT_CLVMD 11
7786d7f5d3SJohn Marino struct cluster_ops *init_cman_cluster(void);
7886d7f5d3SJohn Marino #endif
7986d7f5d3SJohn Marino 
8086d7f5d3SJohn Marino #ifdef USE_OPENAIS
8186d7f5d3SJohn Marino #  include <openais/saAis.h>
8286d7f5d3SJohn Marino #  include <corosync/totem/totem.h>
8386d7f5d3SJohn Marino #  define OPENAIS_CSID_LEN (sizeof(int))
8486d7f5d3SJohn Marino #  define OPENAIS_MAX_CLUSTER_MESSAGE         MESSAGE_SIZE_MAX
8586d7f5d3SJohn Marino #  define OPENAIS_MAX_CLUSTER_MEMBER_NAME_LEN SA_MAX_NAME_LENGTH
8686d7f5d3SJohn Marino #  ifndef MAX_CLUSTER_MEMBER_NAME_LEN
8786d7f5d3SJohn Marino #    define MAX_CLUSTER_MEMBER_NAME_LEN       SA_MAX_NAME_LENGTH
8886d7f5d3SJohn Marino #  endif
8986d7f5d3SJohn Marino #  ifndef CMAN_MAX_CLUSTER_MESSAGE
9086d7f5d3SJohn Marino #    define CMAN_MAX_CLUSTER_MESSAGE          MESSAGE_SIZE_MAX
9186d7f5d3SJohn Marino #  endif
9286d7f5d3SJohn Marino #  ifndef MAX_CSID_LEN
9386d7f5d3SJohn Marino #    define MAX_CSID_LEN sizeof(int)
9486d7f5d3SJohn Marino #  endif
9586d7f5d3SJohn Marino struct cluster_ops *init_openais_cluster(void);
9686d7f5d3SJohn Marino #endif
9786d7f5d3SJohn Marino 
9886d7f5d3SJohn Marino #ifdef USE_COROSYNC
9986d7f5d3SJohn Marino #  include <corosync/corotypes.h>
10086d7f5d3SJohn Marino #  define COROSYNC_CSID_LEN (sizeof(int))
10186d7f5d3SJohn Marino #  define COROSYNC_MAX_CLUSTER_MESSAGE         65535
10286d7f5d3SJohn Marino #  define COROSYNC_MAX_CLUSTER_MEMBER_NAME_LEN CS_MAX_NAME_LENGTH
10386d7f5d3SJohn Marino #  ifndef MAX_CLUSTER_MEMBER_NAME_LEN
10486d7f5d3SJohn Marino #    define MAX_CLUSTER_MEMBER_NAME_LEN       CS_MAX_NAME_LENGTH
10586d7f5d3SJohn Marino #  endif
10686d7f5d3SJohn Marino #  ifndef CMAN_MAX_CLUSTER_MESSAGE
10786d7f5d3SJohn Marino #    define CMAN_MAX_CLUSTER_MESSAGE          65535
10886d7f5d3SJohn Marino #  endif
10986d7f5d3SJohn Marino #  ifndef MAX_CSID_LEN
11086d7f5d3SJohn Marino #    define MAX_CSID_LEN sizeof(int)
11186d7f5d3SJohn Marino #  endif
11286d7f5d3SJohn Marino struct cluster_ops *init_corosync_cluster(void);
11386d7f5d3SJohn Marino #endif
11486d7f5d3SJohn Marino 
11586d7f5d3SJohn Marino 
11686d7f5d3SJohn Marino #endif
117