1 /* $NetBSD: clvmd-comms.h,v 1.1.1.3 2009/12/02 00:27:01 haad Exp $ */ 2 3 /* 4 * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved. 5 * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. 6 * 7 * This file is part of LVM2. 8 * 9 * This copyrighted material is made available to anyone wishing to use, 10 * modify, copy, or redistribute it subject to the terms and conditions 11 * of the GNU General Public License v.2. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program; if not, write to the Free Software Foundation, 15 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 16 */ 17 18 /* 19 * Abstraction layer for clvmd cluster communications 20 */ 21 22 #ifndef _CLVMD_COMMS_H 23 #define _CLVMD_COMMS_H 24 25 struct local_client; 26 27 struct cluster_ops { 28 void (*cluster_init_completed) (void); 29 30 int (*cluster_send_message) (const void *buf, int msglen, 31 const char *csid, 32 const char *errtext); 33 int (*name_from_csid) (const char *csid, char *name); 34 int (*csid_from_name) (char *csid, const char *name); 35 int (*get_num_nodes) (void); 36 int (*cluster_fd_callback) (struct local_client *fd, char *buf, int len, 37 const char *csid, 38 struct local_client **new_client); 39 int (*get_main_cluster_fd) (void); /* gets accept FD or cman cluster socket */ 40 int (*cluster_do_node_callback) (struct local_client *client, 41 void (*callback) (struct local_client *, 42 const char *csid, 43 int node_up)); 44 int (*is_quorate) (void); 45 46 void (*get_our_csid) (char *csid); 47 void (*add_up_node) (const char *csid); 48 void (*reread_config) (void); 49 void (*cluster_closedown) (void); 50 51 int (*get_cluster_name)(char *buf, int buflen); 52 53 int (*sync_lock) (const char *resource, int mode, 54 int flags, int *lockid); 55 int (*sync_unlock) (const char *resource, int lockid); 56 57 }; 58 59 #ifdef USE_GULM 60 # include "tcp-comms.h" 61 struct cluster_ops *init_gulm_cluster(void); 62 #define MAX_CSID_LEN GULM_MAX_CSID_LEN 63 #define MAX_CLUSTER_MEMBER_NAME_LEN GULM_MAX_CLUSTER_MEMBER_NAME_LEN 64 #endif 65 66 #ifdef USE_CMAN 67 # include <netinet/in.h> 68 # include "libcman.h" 69 # define CMAN_MAX_CSID_LEN 4 70 # ifndef MAX_CSID_LEN 71 # define MAX_CSID_LEN CMAN_MAX_CSID_LEN 72 # endif 73 # undef MAX_CLUSTER_MEMBER_NAME_LEN 74 # define MAX_CLUSTER_MEMBER_NAME_LEN CMAN_MAX_NODENAME_LEN 75 # define CMAN_MAX_CLUSTER_MESSAGE 1500 76 # define CLUSTER_PORT_CLVMD 11 77 struct cluster_ops *init_cman_cluster(void); 78 #endif 79 80 #ifdef USE_OPENAIS 81 # include <openais/saAis.h> 82 # include <corosync/totem/totem.h> 83 # define OPENAIS_CSID_LEN (sizeof(int)) 84 # define OPENAIS_MAX_CLUSTER_MESSAGE MESSAGE_SIZE_MAX 85 # define OPENAIS_MAX_CLUSTER_MEMBER_NAME_LEN SA_MAX_NAME_LENGTH 86 # ifndef MAX_CLUSTER_MEMBER_NAME_LEN 87 # define MAX_CLUSTER_MEMBER_NAME_LEN SA_MAX_NAME_LENGTH 88 # endif 89 # ifndef CMAN_MAX_CLUSTER_MESSAGE 90 # define CMAN_MAX_CLUSTER_MESSAGE MESSAGE_SIZE_MAX 91 # endif 92 # ifndef MAX_CSID_LEN 93 # define MAX_CSID_LEN sizeof(int) 94 # endif 95 struct cluster_ops *init_openais_cluster(void); 96 #endif 97 98 #ifdef USE_COROSYNC 99 # include <corosync/corotypes.h> 100 # define COROSYNC_CSID_LEN (sizeof(int)) 101 # define COROSYNC_MAX_CLUSTER_MESSAGE 65535 102 # define COROSYNC_MAX_CLUSTER_MEMBER_NAME_LEN CS_MAX_NAME_LENGTH 103 # ifndef MAX_CLUSTER_MEMBER_NAME_LEN 104 # define MAX_CLUSTER_MEMBER_NAME_LEN CS_MAX_NAME_LENGTH 105 # endif 106 # ifndef CMAN_MAX_CLUSTER_MESSAGE 107 # define CMAN_MAX_CLUSTER_MESSAGE 65535 108 # endif 109 # ifndef MAX_CSID_LEN 110 # define MAX_CSID_LEN sizeof(int) 111 # endif 112 struct cluster_ops *init_corosync_cluster(void); 113 #endif 114 115 116 #endif 117