]> git.proxmox.com Git - mirror_corosync.git/commitdiff
Move coroapi out of external headers
authorSteven Dake <sdake@redhat.com>
Fri, 6 Jan 2012 15:14:41 +0000 (08:14 -0700)
committerSteven Dake <sdake@redhat.com>
Sun, 8 Jan 2012 00:47:45 +0000 (17:47 -0700)
Signed-off-by: Steven Dake <sdake@redhat.com>
Reviewed-by: Angus Salkled <asalkeld@redhat.com>
22 files changed:
TODO
corosync.spec.in
exec/apidef.c
exec/apidef.h
exec/evil.c
exec/main.h
exec/mainconfig.h
exec/service.c
exec/vsf_quorum.c
exec/vsf_ykd.c
include/Makefile.am
include/corosync/coroapi.h [new file with mode: 0644]
include/corosync/engine/coroapi.h [deleted file]
services/cfg.c
services/cmap.c
services/cpg.c
services/evs.c
services/mon.c
services/pload.c
services/testquorum.c
services/votequorum.c
services/wd.c

diff --git a/TODO b/TODO
index 6fdc5eccb97bee29ff40cca437f2ca11ef575834..e1e8a4d9ce5f285eb87800b8d50deffc2654b5bb 100644 (file)
--- a/TODO
+++ b/TODO
@@ -10,9 +10,8 @@
  Current priority list for Needle 2.0
 --------------------------------------
 1. quorum debugging and rework
-2. remove external plug-in api
-3. allow a cluster name to autogenerate a mcastaddr
-4. ring status change via corosync-notifyd
+2. allow a cluster name to autogenerate a mcastaddr
+3. ring status change via corosync-notifyd
 
 --------------------------------------
  Current priority list for Needle 2.1
index 36956fdb04995e96cc079ea15dc8c97c9669c182..7e314ec594c21836333ff9abb5d0b13aed9318b8 100644 (file)
@@ -294,7 +294,6 @@ The Corosync Cluster Engine APIs.
 %{_includedir}/corosync/lcr/lcr_ifact.h
 %dir %{_includedir}/corosync/engine
 %{_includedir}/corosync/engine/config.h
-%{_includedir}/corosync/engine/coroapi.h
 %{_includedir}/corosync/engine/icmap.h
 %{_includedir}/corosync/engine/quorum.h
 %{_libdir}/libcfg.so
index 795b59480899b92f30a6a75e93d3b9796f0feb0b..6e14e5595aac436e7ac214f3c83e9caf4e4c2d10 100644 (file)
@@ -54,7 +54,6 @@
 #include "schedwrk.h"
 #include "main.h"
 #include "apidef.h"
-#include <corosync/engine/coroapi.h>
 #include "service.h"
 
 LOGSYS_DECLARE_SUBSYS ("APIDEF");
index efb72ca271298291b64573bab06dbba49c6bed3b..299270ca243f03bd65aca22ce19d8687160145a9 100644 (file)
@@ -35,7 +35,7 @@
 #ifndef APIDEF_H_DEFINED
 #define APIDEF_H_DEFINED
 
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 
 extern struct corosync_api_v1 *apidef_get (void);
 
index ba4bde9668b32f11bb78854ce05df9ec787d030c..092f55db1f97dbac3a24509d69ede8e5731c3cf2 100644 (file)
@@ -71,7 +71,7 @@
 #include <corosync/list.h>
 #include <corosync/lcr/lcr_ifact.h>
 #include <corosync/config.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/logsys.h>
 #include <qb/qbipcs.h>
 #include "sync.h"
index 91a27066e65a9592557f871a87fa9b881379dffd..ad73d8738e808f8f7617ddecb131fae1838b5ed7 100644 (file)
@@ -49,7 +49,7 @@
 #include <qb/qbloop.h>
 #include <corosync/totem/totempg.h>
 #include <corosync/engine/config.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 
 extern unsigned long long *(*main_clm_get_by_nodeid) (unsigned int node_id);
 
index 3de7a7ef9fbd5c520767514aacdcca016f6dcbc5..2d5c552a0a039b2c951704e9c00831d1245756f4 100644 (file)
@@ -37,7 +37,7 @@
 
 #include <corosync/logsys.h>
 #include <corosync/list.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 
 /**
  * All service handlers in the AIS
index a7be3112321d39e6410c5cf6785c8698c53d0b29..1425bac85ce2a0b3523f948be751888418ab205d 100644 (file)
@@ -52,7 +52,6 @@
 #include <corosync/totem/totempg.h>
 #include <corosync/totem/totemip.h>
 #include "main.h"
-#include <corosync/engine/coroapi.h>
 #include "service.h"
 
 #include <qb/qbipcs.h>
index 79bea03ddf7fc04456ee0e6bbcc6b9a4b32373d9..99ccda467dd6e57b0a72188c1d7e660b30f51c95 100644 (file)
@@ -64,7 +64,7 @@
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/lcr/lcr_ifact.h>
 #include <corosync/mar_gen.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/logsys.h>
 #include <corosync/engine/quorum.h>
 #include <corosync/engine/icmap.h>
index f8cdd0411ca960494afc6e7697209073e4c2ebdc..f9012be3ac791776acfe9f45bb8d5402f04a521c 100644 (file)
@@ -60,7 +60,7 @@
 #include <corosync/corotypes.h>
 #include <qb/qbipc_common.h>
 #include <corosync/mar_gen.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/engine/quorum.h>
 #include <corosync/swab.h>
 #include <corosync/lcr/lcr_comp.h>
index a36cfc08e51cd8ef7f6b5d89223c9c963284704f..a8fbacaed0eb846eec0912daec98ab859c6b745f 100644 (file)
@@ -36,11 +36,12 @@ CS_H                        = hdb.h cs_config.h cpg.h cfg.h evs.h mar_gen.h swab.h  \
                        list.h corotypes.h quorum.h votequorum.h sam.h cmap.h
 
 CS_INTERNAL_H          = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_pload.h ipc_quorum.h        \
-                       jhash.h pload.h quorum.h sq.h ipc_votequorum.h ipc_cmap.h logsys.h
+                       jhash.h pload.h quorum.h sq.h ipc_votequorum.h ipc_cmap.h \
+                       logsys.h coroapi.h
 
 LCR_H                  = lcr_ckpt.h lcr_comp.h lcr_ifact.h
 
-ENGINE_H               = config.h coroapi.h quorum.h icmap.h
+ENGINE_H               = config.h quorum.h icmap.h
 
 TOTEM_H                        = totem.h totemip.h totempg.h
 
diff --git a/include/corosync/coroapi.h b/include/corosync/coroapi.h
new file mode 100644 (file)
index 0000000..fa6a510
--- /dev/null
@@ -0,0 +1,469 @@
+/*
+ * Copyright (c) 2008, 2009 Red Hat, Inc.
+ *
+ * All rights reserved.
+ *
+ * Author: Steven Dake (sdake@redhat.com)
+ *
+ * This software licensed under BSD license, the text of which follows:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the MontaVista Software, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef COROAPI_H_DEFINED
+#define COROAPI_H_DEFINED
+
+#include <stdio.h>
+#ifdef COROSYNC_BSD
+#include <sys/uio.h>
+#endif
+#include <corosync/hdb.h>
+#include <qb/qbloop.h>
+#include <corosync/swab.h>
+
+typedef struct {
+       uint32_t nodeid __attribute__((aligned(8)));
+       void *conn __attribute__((aligned(8)));
+} mar_message_source_t __attribute__((aligned(8)));
+
+static inline void swab_mar_message_source_t (mar_message_source_t *to_swab)
+{
+       swab32 (to_swab->nodeid);
+       /*
+        * if it is from a byteswapped machine, then we can safely
+        * ignore its conn info data structure since this is only
+        * local to the machine
+        */
+       to_swab->conn = NULL;
+}
+
+#ifndef TIMER_HANDLE_T
+typedef qb_loop_timer_handle corosync_timer_handle_t;
+#define TIMER_HANDLE_T 1
+#endif
+
+struct corosync_tpg_group {
+       const void *group;
+       size_t group_len;
+};
+
+#define TOTEMIP_ADDRLEN (sizeof(struct in6_addr))
+
+#define INTERFACE_MAX 2
+
+#ifndef MESSAGE_QUEUE_MAX
+#ifdef HAVE_SMALL_MEMORY_FOOTPRINT
+#define PROCESSOR_COUNT_MAX    16
+#define MESSAGE_SIZE_MAX       1024*64
+#define MESSAGE_QUEUE_MAX      512
+#else
+#define PROCESSOR_COUNT_MAX    384
+#define MESSAGE_SIZE_MAX       1024*1024
+#define MESSAGE_QUEUE_MAX      ((4 * MESSAGE_SIZE_MAX) / totem_config->net_mtu)
+#endif /* HAVE_SMALL_MEMORY_FOOTPRINT */
+#endif /* MESSAGE_QUEUE_MAX */
+
+#define TOTEM_AGREED   0
+#define TOTEM_SAFE     1
+
+#define MILLI_2_NANO_SECONDS 1000000ULL
+
+#if !defined(TOTEM_IP_ADDRESS)
+struct totem_ip_address {
+       unsigned int   nodeid;
+       unsigned short family;
+       unsigned char  addr[TOTEMIP_ADDRLEN];
+} __attribute__((packed));
+#endif
+
+#if !defined(MEMB_RING_ID)
+struct memb_ring_id {
+       struct totem_ip_address rep;
+       unsigned long long seq;
+} __attribute__((packed));
+#endif
+
+#if !defined(TOTEM_CONFIGURATION_TYPE)
+enum totem_configuration_type {
+       TOTEM_CONFIGURATION_REGULAR,
+       TOTEM_CONFIGURATION_TRANSITIONAL
+};
+#endif
+
+#if !defined(TOTEM_CALLBACK_TOKEN_TYPE)
+enum totem_callback_token_type {
+       TOTEM_CALLBACK_TOKEN_RECEIVED = 1,
+       TOTEM_CALLBACK_TOKEN_SENT = 2
+};
+#endif
+
+enum cs_lib_flow_control {
+       CS_LIB_FLOW_CONTROL_REQUIRED = 1,
+       CS_LIB_FLOW_CONTROL_NOT_REQUIRED = 2
+};
+#define corosync_lib_flow_control cs_lib_flow_control
+#define COROSYNC_LIB_FLOW_CONTROL_REQUIRED CS_LIB_FLOW_CONTROL_REQUIRED
+#define COROSYNC_LIB_FLOW_CONTROL_NOT_REQUIRED CS_LIB_FLOW_CONTROL_NOT_REQUIRED
+
+enum cs_lib_allow_inquorate {
+       CS_LIB_DISALLOW_INQUORATE = 0, /* default */
+       CS_LIB_ALLOW_INQUORATE = 1
+};
+
+#if !defined (COROSYNC_FLOW_CONTROL_STATE)
+enum cs_flow_control_state {
+       CS_FLOW_CONTROL_STATE_DISABLED,
+       CS_FLOW_CONTROL_STATE_ENABLED
+};
+#define corosync_flow_control_state cs_flow_control_state
+#define CS_FLOW_CONTROL_STATE_DISABLED CS_FLOW_CONTROL_STATE_DISABLED
+#define CS_FLOW_CONTROL_STATE_ENABLED CS_FLOW_CONTROL_STATE_ENABLED
+
+#endif /* COROSYNC_FLOW_CONTROL_STATE */
+
+enum cs_sync_mode {
+       CS_SYNC_V1       = 0,
+       CS_SYNC_V2       = 1,
+       CS_SYNC_V1_APIV2 = 2
+};
+
+typedef enum {
+       COROSYNC_FATAL_ERROR_EXIT = -1,
+       COROSYNC_LIBAIS_SOCKET = -6,
+       COROSYNC_LIBAIS_BIND = -7,
+       COROSYNC_READKEY = -8,
+       COROSYNC_INVALID_CONFIG = -9,
+       COROSYNC_DYNAMICLOAD = -12,
+       COROSYNC_OUT_OF_MEMORY = -15,
+       COROSYNC_FATAL_ERR = -16
+} cs_fatal_error_t;
+#define corosync_fatal_error_t cs_fatal_error_t;
+
+#ifndef QUORUM_H_DEFINED
+typedef void (*quorum_callback_fn_t) (int quorate, void *context);
+
+struct quorum_callin_functions
+{
+       int (*quorate) (void);
+       int (*register_callback) (quorum_callback_fn_t callback_fn, void *context);
+       int (*unregister_callback) (quorum_callback_fn_t callback_fn, void *context);
+};
+
+typedef void (*sync_callback_fn_t) (
+       const unsigned int *view_list,
+       size_t view_list_entries,
+       int primary_designated,
+       struct memb_ring_id *ring_id);
+
+#endif /* QUORUM_H_DEFINED */
+
+struct corosync_api_v1 {
+       /*
+        * Time and timer APIs
+        */
+       int (*timer_add_duration) (
+               unsigned long long nanoseconds_in_future,
+               void *data,
+               void (*timer_nf) (void *data),
+               corosync_timer_handle_t *handle);
+
+       int (*timer_add_absolute) (
+               unsigned long long nanoseconds_from_epoch,
+               void *data,
+               void (*timer_fn) (void *data),
+               corosync_timer_handle_t *handle);
+
+       void (*timer_delete) (
+               corosync_timer_handle_t timer_handle);
+
+       unsigned long long (*timer_time_get) (void);
+
+       unsigned long long (*timer_expire_time_get) (
+               corosync_timer_handle_t timer_handle);
+
+       /*
+        * IPC APIs
+        */
+       void (*ipc_source_set) (mar_message_source_t *source, void *conn);
+
+       int (*ipc_source_is_local) (const mar_message_source_t *source);
+
+       void *(*ipc_private_data_get) (void *conn);
+
+       int (*ipc_response_send) (void *conn, const void *msg, size_t mlen);
+
+       int (*ipc_response_iov_send) (void *conn,
+                                     const struct iovec *iov, unsigned int iov_len);
+
+       int (*ipc_dispatch_send) (void *conn, const void *msg, size_t mlen);
+
+       int (*ipc_dispatch_iov_send) (void *conn,
+                                     const struct iovec *iov, unsigned int iov_len);
+
+       void (*ipc_refcnt_inc) (void *conn);
+
+       void (*ipc_refcnt_dec) (void *conn);
+
+       /*
+        * Totem APIs
+        */
+       unsigned int (*totem_nodeid_get) (void);
+
+       int (*totem_family_get) (void);
+
+       int (*totem_ring_reenable) (void);
+
+       int (*totem_mcast) (const struct iovec *iovec,
+                           unsigned int iov_len, unsigned int guarantee);
+
+       int (*totem_ifaces_get) (
+               unsigned int nodeid,
+               struct totem_ip_address *interfaces,
+               char ***status,
+               unsigned int *iface_count);
+
+       const char *(*totem_ifaces_print) (unsigned int nodeid);
+
+       const char *(*totem_ip_print) (const struct totem_ip_address *addr);
+
+       int (*totem_crypto_set) (unsigned int type);
+
+       int (*totem_callback_token_create) (
+               void **handle_out,
+               enum totem_callback_token_type type,
+               int delete,
+               int (*callback_fn) (enum totem_callback_token_type type,
+                                   const void *),
+               const void *data);
+
+       /*
+        * Totem open process groups API for those service engines
+        * wanting their own groups
+        */
+       int (*tpg_init) (
+               void **instance,
+
+               void (*deliver_fn) (
+                       unsigned int nodeid,
+                       const void *msg,
+                       unsigned int msg_len,
+                       int endian_conversion_required),
+
+               void (*confchg_fn) (
+                       enum totem_configuration_type configuration_type,
+                       const unsigned int *member_list,
+                       size_t member_list_entries,
+                       const unsigned int *left_list,
+                       size_t left_list_entries,
+                       const unsigned int *joined_list,
+                       size_t joined_list_entries,
+                       const struct memb_ring_id *ring_id));
+
+       int (*tpg_exit) (
+               void *instance);
+
+       int (*tpg_join) (
+               void *instance,
+               const struct corosync_tpg_group *groups,
+               size_t group_cnt);
+
+       int (*tpg_leave) (
+               void *instance,
+               const struct corosync_tpg_group *groups,
+               size_t group_cnt);
+
+       int (*tpg_joined_mcast) (
+               void *totempg_groups_instance,
+               const struct iovec *iovec,
+               unsigned int iov_len,
+               int guarantee);
+
+       int (*tpg_joined_reserve) (
+               void *totempg_groups_instance,
+               const struct iovec *iovec,
+               unsigned int iov_len);
+
+       int (*tpg_joined_release) (
+               int reserved_msgs);
+
+       int (*tpg_groups_mcast) (
+               void *instance,
+               int guarantee,
+               const struct corosync_tpg_group *groups,
+               size_t groups_cnt,
+               const struct iovec *iovec,
+               unsigned int iov_len);
+
+       int (*tpg_groups_reserve) (
+               void *instance,
+               const struct corosync_tpg_group *groups,
+               size_t groups_cnt,
+               const struct iovec *iovec,
+               unsigned int iov_len);
+
+       int (*tpg_groups_release) (
+               int reserved_msgs);
+
+       int (*schedwrk_create) (
+               hdb_handle_t *handle,
+               int (schedwrk_fn) (const void *),
+               const void *context);
+
+       void (*schedwrk_destroy) (hdb_handle_t handle);
+
+       int (*sync_request) (
+               const char *service_name);
+
+       /*
+        * User plugin-callable functions for quorum
+        */
+       int (*quorum_is_quorate) (void);
+       int (*quorum_register_callback) (quorum_callback_fn_t callback_fn, void *context);
+       int (*quorum_unregister_callback) (quorum_callback_fn_t callback_fn, void *context);
+
+       /*
+        * This one is for the quorum management plugin's use
+        */
+       int (*quorum_initialize)(struct quorum_callin_functions *fns);
+
+       /*
+        * Plugin loading and unloading
+        */
+       int (*plugin_interface_reference) (
+               hdb_handle_t *handle,
+               const char *iface_name,
+               int version,
+               void **interface,
+               void *context);
+
+       int (*plugin_interface_release) (hdb_handle_t handle);
+
+       /*
+        * Service loading and unloading APIs
+       */
+       unsigned int (*service_link_and_init) (
+               struct corosync_api_v1 *corosync_api_v1,
+               const char *service_name,
+               unsigned int service_ver);
+
+       unsigned int (*service_unlink_and_exit) (
+               struct corosync_api_v1 *corosync_api_v1,
+               const char *service_name,
+               unsigned int service_ver);
+
+       /*
+        * Error handling APIs
+        */
+       void (*error_memory_failure) (void) __attribute__ ((noreturn));
+
+#define corosync_fatal_error(err) api->fatal_error ((err), __FILE__, __LINE__)
+       void (*fatal_error) (cs_fatal_error_t err,
+               const char *file,
+               unsigned int line) __attribute__ ((noreturn));
+
+       void (*shutdown_request) (void);
+
+       void (*state_dump) (void);
+
+       qb_loop_t *(*poll_handle_get) (void);
+
+       void *(*totem_get_stats)(void);
+
+       int (*schedwrk_create_nolock) (
+               hdb_handle_t *handle,
+               int (schedwrk_fn) (const void *),
+               const void *context);
+
+       int (*poll_dispatch_add) (qb_loop_t * handle,
+               int fd,
+               int events,
+               void *data,
+
+               int (*dispatch_fn) (int fd,
+                       int revents,
+                       void *data));
+
+
+       int (*poll_dispatch_delete) (
+               qb_loop_t * handle,
+               int fd);
+
+};
+
+#define SERVICE_ID_MAKE(a,b) ( ((a)<<16) | (b) )
+
+#define SERVICE_HANDLER_MAXIMUM_COUNT 64
+
+struct corosync_lib_handler {
+       void (*lib_handler_fn) (void *conn, const void *msg);
+       enum cs_lib_flow_control flow_control;
+};
+
+struct corosync_exec_handler {
+       void (*exec_handler_fn) (const void *msg, unsigned int nodeid);
+       void (*exec_endian_convert_fn) (void *msg);
+};
+
+struct corosync_service_engine_iface_ver0 {
+        struct corosync_service_engine *(*corosync_get_service_engine_ver0) (void);
+};
+
+typedef void (*sync_init_v1_fn_t) (
+               const unsigned int *member_list,
+               size_t member_list_entries,
+               const struct memb_ring_id *ring_id) ;
+
+struct corosync_service_engine {
+       const char *name;
+       unsigned short id;
+       unsigned short priority; /* Lower priority are loaded first, unloaded last.
+                                 * 0 is a special case which always loaded _and_ unloaded last
+                                 */
+       unsigned int private_data_size;
+       enum cs_lib_flow_control flow_control;
+       enum cs_lib_allow_inquorate allow_inquorate;
+       int (*exec_init_fn) (struct corosync_api_v1 *);
+       int (*exec_exit_fn) (void);
+       void (*exec_dump_fn) (void);
+       int (*lib_init_fn) (void *conn);
+       int (*lib_exit_fn) (void *conn);
+       struct corosync_lib_handler *lib_engine;
+       int lib_engine_count;
+       struct corosync_exec_handler *exec_engine;
+       int exec_engine_count;
+       int (*config_init_fn) (struct corosync_api_v1 *);
+       void (*confchg_fn) (
+               enum totem_configuration_type configuration_type,
+               const unsigned int *member_list, size_t member_list_entries,
+               const unsigned int *left_list, size_t left_list_entries,
+               const unsigned int *joined_list, size_t joined_list_entries,
+               const struct memb_ring_id *ring_id);
+       enum cs_sync_mode sync_mode;
+       sync_init_v1_fn_t sync_init;
+       int (*sync_process) (void);
+       void (*sync_activate) (void);
+       void (*sync_abort) (void);
+};
+
+#endif /* COROAPI_H_DEFINED */
diff --git a/include/corosync/engine/coroapi.h b/include/corosync/engine/coroapi.h
deleted file mode 100644 (file)
index fa6a510..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * Copyright (c) 2008, 2009 Red Hat, Inc.
- *
- * All rights reserved.
- *
- * Author: Steven Dake (sdake@redhat.com)
- *
- * This software licensed under BSD license, the text of which follows:
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- *   this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the name of the MontaVista Software, Inc. nor the names of its
- *   contributors may be used to endorse or promote products derived from this
- *   software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef COROAPI_H_DEFINED
-#define COROAPI_H_DEFINED
-
-#include <stdio.h>
-#ifdef COROSYNC_BSD
-#include <sys/uio.h>
-#endif
-#include <corosync/hdb.h>
-#include <qb/qbloop.h>
-#include <corosync/swab.h>
-
-typedef struct {
-       uint32_t nodeid __attribute__((aligned(8)));
-       void *conn __attribute__((aligned(8)));
-} mar_message_source_t __attribute__((aligned(8)));
-
-static inline void swab_mar_message_source_t (mar_message_source_t *to_swab)
-{
-       swab32 (to_swab->nodeid);
-       /*
-        * if it is from a byteswapped machine, then we can safely
-        * ignore its conn info data structure since this is only
-        * local to the machine
-        */
-       to_swab->conn = NULL;
-}
-
-#ifndef TIMER_HANDLE_T
-typedef qb_loop_timer_handle corosync_timer_handle_t;
-#define TIMER_HANDLE_T 1
-#endif
-
-struct corosync_tpg_group {
-       const void *group;
-       size_t group_len;
-};
-
-#define TOTEMIP_ADDRLEN (sizeof(struct in6_addr))
-
-#define INTERFACE_MAX 2
-
-#ifndef MESSAGE_QUEUE_MAX
-#ifdef HAVE_SMALL_MEMORY_FOOTPRINT
-#define PROCESSOR_COUNT_MAX    16
-#define MESSAGE_SIZE_MAX       1024*64
-#define MESSAGE_QUEUE_MAX      512
-#else
-#define PROCESSOR_COUNT_MAX    384
-#define MESSAGE_SIZE_MAX       1024*1024
-#define MESSAGE_QUEUE_MAX      ((4 * MESSAGE_SIZE_MAX) / totem_config->net_mtu)
-#endif /* HAVE_SMALL_MEMORY_FOOTPRINT */
-#endif /* MESSAGE_QUEUE_MAX */
-
-#define TOTEM_AGREED   0
-#define TOTEM_SAFE     1
-
-#define MILLI_2_NANO_SECONDS 1000000ULL
-
-#if !defined(TOTEM_IP_ADDRESS)
-struct totem_ip_address {
-       unsigned int   nodeid;
-       unsigned short family;
-       unsigned char  addr[TOTEMIP_ADDRLEN];
-} __attribute__((packed));
-#endif
-
-#if !defined(MEMB_RING_ID)
-struct memb_ring_id {
-       struct totem_ip_address rep;
-       unsigned long long seq;
-} __attribute__((packed));
-#endif
-
-#if !defined(TOTEM_CONFIGURATION_TYPE)
-enum totem_configuration_type {
-       TOTEM_CONFIGURATION_REGULAR,
-       TOTEM_CONFIGURATION_TRANSITIONAL
-};
-#endif
-
-#if !defined(TOTEM_CALLBACK_TOKEN_TYPE)
-enum totem_callback_token_type {
-       TOTEM_CALLBACK_TOKEN_RECEIVED = 1,
-       TOTEM_CALLBACK_TOKEN_SENT = 2
-};
-#endif
-
-enum cs_lib_flow_control {
-       CS_LIB_FLOW_CONTROL_REQUIRED = 1,
-       CS_LIB_FLOW_CONTROL_NOT_REQUIRED = 2
-};
-#define corosync_lib_flow_control cs_lib_flow_control
-#define COROSYNC_LIB_FLOW_CONTROL_REQUIRED CS_LIB_FLOW_CONTROL_REQUIRED
-#define COROSYNC_LIB_FLOW_CONTROL_NOT_REQUIRED CS_LIB_FLOW_CONTROL_NOT_REQUIRED
-
-enum cs_lib_allow_inquorate {
-       CS_LIB_DISALLOW_INQUORATE = 0, /* default */
-       CS_LIB_ALLOW_INQUORATE = 1
-};
-
-#if !defined (COROSYNC_FLOW_CONTROL_STATE)
-enum cs_flow_control_state {
-       CS_FLOW_CONTROL_STATE_DISABLED,
-       CS_FLOW_CONTROL_STATE_ENABLED
-};
-#define corosync_flow_control_state cs_flow_control_state
-#define CS_FLOW_CONTROL_STATE_DISABLED CS_FLOW_CONTROL_STATE_DISABLED
-#define CS_FLOW_CONTROL_STATE_ENABLED CS_FLOW_CONTROL_STATE_ENABLED
-
-#endif /* COROSYNC_FLOW_CONTROL_STATE */
-
-enum cs_sync_mode {
-       CS_SYNC_V1       = 0,
-       CS_SYNC_V2       = 1,
-       CS_SYNC_V1_APIV2 = 2
-};
-
-typedef enum {
-       COROSYNC_FATAL_ERROR_EXIT = -1,
-       COROSYNC_LIBAIS_SOCKET = -6,
-       COROSYNC_LIBAIS_BIND = -7,
-       COROSYNC_READKEY = -8,
-       COROSYNC_INVALID_CONFIG = -9,
-       COROSYNC_DYNAMICLOAD = -12,
-       COROSYNC_OUT_OF_MEMORY = -15,
-       COROSYNC_FATAL_ERR = -16
-} cs_fatal_error_t;
-#define corosync_fatal_error_t cs_fatal_error_t;
-
-#ifndef QUORUM_H_DEFINED
-typedef void (*quorum_callback_fn_t) (int quorate, void *context);
-
-struct quorum_callin_functions
-{
-       int (*quorate) (void);
-       int (*register_callback) (quorum_callback_fn_t callback_fn, void *context);
-       int (*unregister_callback) (quorum_callback_fn_t callback_fn, void *context);
-};
-
-typedef void (*sync_callback_fn_t) (
-       const unsigned int *view_list,
-       size_t view_list_entries,
-       int primary_designated,
-       struct memb_ring_id *ring_id);
-
-#endif /* QUORUM_H_DEFINED */
-
-struct corosync_api_v1 {
-       /*
-        * Time and timer APIs
-        */
-       int (*timer_add_duration) (
-               unsigned long long nanoseconds_in_future,
-               void *data,
-               void (*timer_nf) (void *data),
-               corosync_timer_handle_t *handle);
-
-       int (*timer_add_absolute) (
-               unsigned long long nanoseconds_from_epoch,
-               void *data,
-               void (*timer_fn) (void *data),
-               corosync_timer_handle_t *handle);
-
-       void (*timer_delete) (
-               corosync_timer_handle_t timer_handle);
-
-       unsigned long long (*timer_time_get) (void);
-
-       unsigned long long (*timer_expire_time_get) (
-               corosync_timer_handle_t timer_handle);
-
-       /*
-        * IPC APIs
-        */
-       void (*ipc_source_set) (mar_message_source_t *source, void *conn);
-
-       int (*ipc_source_is_local) (const mar_message_source_t *source);
-
-       void *(*ipc_private_data_get) (void *conn);
-
-       int (*ipc_response_send) (void *conn, const void *msg, size_t mlen);
-
-       int (*ipc_response_iov_send) (void *conn,
-                                     const struct iovec *iov, unsigned int iov_len);
-
-       int (*ipc_dispatch_send) (void *conn, const void *msg, size_t mlen);
-
-       int (*ipc_dispatch_iov_send) (void *conn,
-                                     const struct iovec *iov, unsigned int iov_len);
-
-       void (*ipc_refcnt_inc) (void *conn);
-
-       void (*ipc_refcnt_dec) (void *conn);
-
-       /*
-        * Totem APIs
-        */
-       unsigned int (*totem_nodeid_get) (void);
-
-       int (*totem_family_get) (void);
-
-       int (*totem_ring_reenable) (void);
-
-       int (*totem_mcast) (const struct iovec *iovec,
-                           unsigned int iov_len, unsigned int guarantee);
-
-       int (*totem_ifaces_get) (
-               unsigned int nodeid,
-               struct totem_ip_address *interfaces,
-               char ***status,
-               unsigned int *iface_count);
-
-       const char *(*totem_ifaces_print) (unsigned int nodeid);
-
-       const char *(*totem_ip_print) (const struct totem_ip_address *addr);
-
-       int (*totem_crypto_set) (unsigned int type);
-
-       int (*totem_callback_token_create) (
-               void **handle_out,
-               enum totem_callback_token_type type,
-               int delete,
-               int (*callback_fn) (enum totem_callback_token_type type,
-                                   const void *),
-               const void *data);
-
-       /*
-        * Totem open process groups API for those service engines
-        * wanting their own groups
-        */
-       int (*tpg_init) (
-               void **instance,
-
-               void (*deliver_fn) (
-                       unsigned int nodeid,
-                       const void *msg,
-                       unsigned int msg_len,
-                       int endian_conversion_required),
-
-               void (*confchg_fn) (
-                       enum totem_configuration_type configuration_type,
-                       const unsigned int *member_list,
-                       size_t member_list_entries,
-                       const unsigned int *left_list,
-                       size_t left_list_entries,
-                       const unsigned int *joined_list,
-                       size_t joined_list_entries,
-                       const struct memb_ring_id *ring_id));
-
-       int (*tpg_exit) (
-               void *instance);
-
-       int (*tpg_join) (
-               void *instance,
-               const struct corosync_tpg_group *groups,
-               size_t group_cnt);
-
-       int (*tpg_leave) (
-               void *instance,
-               const struct corosync_tpg_group *groups,
-               size_t group_cnt);
-
-       int (*tpg_joined_mcast) (
-               void *totempg_groups_instance,
-               const struct iovec *iovec,
-               unsigned int iov_len,
-               int guarantee);
-
-       int (*tpg_joined_reserve) (
-               void *totempg_groups_instance,
-               const struct iovec *iovec,
-               unsigned int iov_len);
-
-       int (*tpg_joined_release) (
-               int reserved_msgs);
-
-       int (*tpg_groups_mcast) (
-               void *instance,
-               int guarantee,
-               const struct corosync_tpg_group *groups,
-               size_t groups_cnt,
-               const struct iovec *iovec,
-               unsigned int iov_len);
-
-       int (*tpg_groups_reserve) (
-               void *instance,
-               const struct corosync_tpg_group *groups,
-               size_t groups_cnt,
-               const struct iovec *iovec,
-               unsigned int iov_len);
-
-       int (*tpg_groups_release) (
-               int reserved_msgs);
-
-       int (*schedwrk_create) (
-               hdb_handle_t *handle,
-               int (schedwrk_fn) (const void *),
-               const void *context);
-
-       void (*schedwrk_destroy) (hdb_handle_t handle);
-
-       int (*sync_request) (
-               const char *service_name);
-
-       /*
-        * User plugin-callable functions for quorum
-        */
-       int (*quorum_is_quorate) (void);
-       int (*quorum_register_callback) (quorum_callback_fn_t callback_fn, void *context);
-       int (*quorum_unregister_callback) (quorum_callback_fn_t callback_fn, void *context);
-
-       /*
-        * This one is for the quorum management plugin's use
-        */
-       int (*quorum_initialize)(struct quorum_callin_functions *fns);
-
-       /*
-        * Plugin loading and unloading
-        */
-       int (*plugin_interface_reference) (
-               hdb_handle_t *handle,
-               const char *iface_name,
-               int version,
-               void **interface,
-               void *context);
-
-       int (*plugin_interface_release) (hdb_handle_t handle);
-
-       /*
-        * Service loading and unloading APIs
-       */
-       unsigned int (*service_link_and_init) (
-               struct corosync_api_v1 *corosync_api_v1,
-               const char *service_name,
-               unsigned int service_ver);
-
-       unsigned int (*service_unlink_and_exit) (
-               struct corosync_api_v1 *corosync_api_v1,
-               const char *service_name,
-               unsigned int service_ver);
-
-       /*
-        * Error handling APIs
-        */
-       void (*error_memory_failure) (void) __attribute__ ((noreturn));
-
-#define corosync_fatal_error(err) api->fatal_error ((err), __FILE__, __LINE__)
-       void (*fatal_error) (cs_fatal_error_t err,
-               const char *file,
-               unsigned int line) __attribute__ ((noreturn));
-
-       void (*shutdown_request) (void);
-
-       void (*state_dump) (void);
-
-       qb_loop_t *(*poll_handle_get) (void);
-
-       void *(*totem_get_stats)(void);
-
-       int (*schedwrk_create_nolock) (
-               hdb_handle_t *handle,
-               int (schedwrk_fn) (const void *),
-               const void *context);
-
-       int (*poll_dispatch_add) (qb_loop_t * handle,
-               int fd,
-               int events,
-               void *data,
-
-               int (*dispatch_fn) (int fd,
-                       int revents,
-                       void *data));
-
-
-       int (*poll_dispatch_delete) (
-               qb_loop_t * handle,
-               int fd);
-
-};
-
-#define SERVICE_ID_MAKE(a,b) ( ((a)<<16) | (b) )
-
-#define SERVICE_HANDLER_MAXIMUM_COUNT 64
-
-struct corosync_lib_handler {
-       void (*lib_handler_fn) (void *conn, const void *msg);
-       enum cs_lib_flow_control flow_control;
-};
-
-struct corosync_exec_handler {
-       void (*exec_handler_fn) (const void *msg, unsigned int nodeid);
-       void (*exec_endian_convert_fn) (void *msg);
-};
-
-struct corosync_service_engine_iface_ver0 {
-        struct corosync_service_engine *(*corosync_get_service_engine_ver0) (void);
-};
-
-typedef void (*sync_init_v1_fn_t) (
-               const unsigned int *member_list,
-               size_t member_list_entries,
-               const struct memb_ring_id *ring_id) ;
-
-struct corosync_service_engine {
-       const char *name;
-       unsigned short id;
-       unsigned short priority; /* Lower priority are loaded first, unloaded last.
-                                 * 0 is a special case which always loaded _and_ unloaded last
-                                 */
-       unsigned int private_data_size;
-       enum cs_lib_flow_control flow_control;
-       enum cs_lib_allow_inquorate allow_inquorate;
-       int (*exec_init_fn) (struct corosync_api_v1 *);
-       int (*exec_exit_fn) (void);
-       void (*exec_dump_fn) (void);
-       int (*lib_init_fn) (void *conn);
-       int (*lib_exit_fn) (void *conn);
-       struct corosync_lib_handler *lib_engine;
-       int lib_engine_count;
-       struct corosync_exec_handler *exec_engine;
-       int exec_engine_count;
-       int (*config_init_fn) (struct corosync_api_v1 *);
-       void (*confchg_fn) (
-               enum totem_configuration_type configuration_type,
-               const unsigned int *member_list, size_t member_list_entries,
-               const unsigned int *left_list, size_t left_list_entries,
-               const unsigned int *joined_list, size_t joined_list_entries,
-               const struct memb_ring_id *ring_id);
-       enum cs_sync_mode sync_mode;
-       sync_init_v1_fn_t sync_init;
-       int (*sync_process) (void);
-       void (*sync_activate) (void);
-       void (*sync_abort) (void);
-};
-
-#endif /* COROAPI_H_DEFINED */
index b00ae9379eb2278343e308053cb13ae4d3ccb10c..a4d43f49f39d9a4aa3cdbb4d158625eed2fd0da4 100644 (file)
@@ -60,7 +60,7 @@
 #include <corosync/ipc_cfg.h>
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/engine/icmap.h>
 #include <corosync/corodefs.h>
 
index 076d8db6cc06983e6cc75517eb885c00ef42bbad..62e73e7a31e9e48673925180cd7f06d93d83a0c9 100644 (file)
@@ -53,7 +53,7 @@
 #include <corosync/ipc_cmap.h>
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/engine/icmap.h>
 
 #define hdb_error_to_cs(_result_) qb_to_cs_error(_result_)
index 008a3ea09debf71aaee10cfe93e0932f30b98045..c7c4eaddc399c7eadd64b56717317f3b0a70a804 100644 (file)
@@ -64,7 +64,7 @@
 #include <corosync/jhash.h>
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 
 #include <corosync/cpg.h>
 #include <corosync/ipc_cpg.h>
index e8d5879feb278c07b86dc7a178cee8e31c575971..bad81545e0b31674f0a9710364ace05cf1679b2d 100644 (file)
@@ -57,7 +57,7 @@
 #include <corosync/corodefs.h>
 #include <corosync/mar_gen.h>
 #include <corosync/lcr/lcr_comp.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/logsys.h>
 #include <corosync/list.h>
 
index a0bc7058cf3508e4de552bbe574fc34363f49214..665e768b60dc2b7246c58fb693a9cc3b95c48ed9 100644 (file)
@@ -42,7 +42,7 @@
 #include <corosync/corotypes.h>
 #include <corosync/corodefs.h>
 #include <corosync/lcr/lcr_comp.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/list.h>
 #include <corosync/logsys.h>
 #include <corosync/engine/icmap.h>
index 85a485f5d092eb7fcaa738fa1094541ed57db9f7..c8f64ce0490ea83a5de54a4b7be9da81d8ab8e71 100644 (file)
@@ -61,7 +61,7 @@
 #include <corosync/corodefs.h>
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/mar_gen.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/ipc_pload.h>
 #include <corosync/list.h>
 #include <corosync/logsys.h>
index 3cdf9cda5195fcd15b10196452dc5c4315ccae1f..512205404c72c297ab946bbf37dc84973bbfbdf2 100644 (file)
@@ -62,7 +62,7 @@
 
 #include <corosync/mar_gen.h>
 #include <corosync/lcr/lcr_comp.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 
 #include <corosync/engine/quorum.h>
 
index d9930fb414b04f7552f82dd803598e63a25ae1d9..126354f35318b6c18806285417c98f59cf4cf82b 100644 (file)
@@ -66,7 +66,7 @@
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
 #include <corosync/mar_gen.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/engine/quorum.h>
 #include <corosync/engine/icmap.h>
 #include <corosync/ipc_votequorum.h>
index 72544ae21afc95620c0938c2accf7266aa1c97fe..055cc8af4488096f65deea903e0071d2718beca1 100644 (file)
@@ -44,7 +44,7 @@
 #include <corosync/corotypes.h>
 #include <corosync/corodefs.h>
 #include <corosync/lcr/lcr_comp.h>
-#include <corosync/engine/coroapi.h>
+#include <corosync/coroapi.h>
 #include <corosync/list.h>
 #include <corosync/logsys.h>
 #include <corosync/engine/icmap.h>