On 01/06/2012 08:15 AM, Steven Dake wrote: > Signed-off-by: Steven Dake <sdake@xxxxxxxxxx> > --- > TODO | 5 +- > corosync.spec.in | 1 - > exec/apidef.c | 1 - > exec/apidef.h | 2 +- > exec/evil.c | 2 +- > exec/main.h | 2 +- > exec/mainconfig.h | 2 +- > exec/service.c | 1 - > exec/vsf_quorum.c | 2 +- > exec/vsf_ykd.c | 2 +- > include/Makefile.am | 5 +- > include/corosync/coroapi.h | 469 +++++++++++++++++++++++++++++++++++++ > include/corosync/engine/coroapi.h | 469 ------------------------------------- > services/cfg.c | 2 +- > services/cmap.c | 2 +- > services/cpg.c | 2 +- > services/evs.c | 2 +- > services/mon.c | 2 +- > services/pload.c | 2 +- > services/testquorum.c | 2 +- > services/votequorum.c | 2 +- > services/wd.c | 2 +- > 22 files changed, 489 insertions(+), 492 deletions(-) > create mode 100644 include/corosync/coroapi.h > delete mode 100644 include/corosync/engine/coroapi.h > > diff --git a/TODO b/TODO > index 6fdc5ec..e1e8a4d 100644 > --- 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 > diff --git a/corosync.spec.in b/corosync.spec.in > index 36956fd..7e314ec 100644 > --- a/corosync.spec.in > +++ b/corosync.spec.in > @@ -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 > diff --git a/exec/apidef.c b/exec/apidef.c > index 795b594..6e14e55 100644 > --- a/exec/apidef.c > +++ b/exec/apidef.c > @@ -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"); > diff --git a/exec/apidef.h b/exec/apidef.h > index efb72ca..299270c 100644 > --- a/exec/apidef.h > +++ b/exec/apidef.h > @@ -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); > > diff --git a/exec/evil.c b/exec/evil.c > index ba4bde9..092f55d 100644 > --- a/exec/evil.c > +++ b/exec/evil.c > @@ -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" > diff --git a/exec/main.h b/exec/main.h > index 91a2706..ad73d87 100644 > --- a/exec/main.h > +++ b/exec/main.h > @@ -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); > > diff --git a/exec/mainconfig.h b/exec/mainconfig.h > index 3de7a7e..2d5c552 100644 > --- a/exec/mainconfig.h > +++ b/exec/mainconfig.h > @@ -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 > diff --git a/exec/service.c b/exec/service.c > index a7be311..1425bac 100644 > --- a/exec/service.c > +++ b/exec/service.c > @@ -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> > diff --git a/exec/vsf_quorum.c b/exec/vsf_quorum.c > index 79bea03..99ccda4 100644 > --- a/exec/vsf_quorum.c > +++ b/exec/vsf_quorum.c > @@ -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> > diff --git a/exec/vsf_ykd.c b/exec/vsf_ykd.c > index f8cdd04..f9012be 100644 > --- a/exec/vsf_ykd.c > +++ b/exec/vsf_ykd.c > @@ -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> > diff --git a/include/Makefile.am b/include/Makefile.am > index a36cfc0..a8fbaca 100644 > --- a/include/Makefile.am > +++ b/include/Makefile.am > @@ -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 > index 0000000..fa6a510 > --- /dev/null > +++ b/include/corosync/coroapi.h > @@ -0,0 +1,469 @@ > +/* > + * Copyright (c) 2008, 2009 Red Hat, Inc. > + * > + * All rights reserved. > + * > + * Author: Steven Dake (sdake@xxxxxxxxxx) > + * > + * 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 > index fa6a510..0000000 > --- a/include/corosync/engine/coroapi.h > +++ /dev/null > @@ -1,469 +0,0 @@ > -/* > - * Copyright (c) 2008, 2009 Red Hat, Inc. > - * > - * All rights reserved. > - * > - * Author: Steven Dake (sdake@xxxxxxxxxx) > - * > - * 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/services/cfg.c b/services/cfg.c > index b00ae93..a4d43f4 100644 > --- a/services/cfg.c > +++ b/services/cfg.c > @@ -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> > > diff --git a/services/cmap.c b/services/cmap.c > index 076d8db..62e73e7 100644 > --- a/services/cmap.c > +++ b/services/cmap.c > @@ -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_) > diff --git a/services/cpg.c b/services/cpg.c > index 008a3ea..c7c4ead 100644 > --- a/services/cpg.c > +++ b/services/cpg.c > @@ -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> > diff --git a/services/evs.c b/services/evs.c > index e8d5879..bad8154 100644 > --- a/services/evs.c > +++ b/services/evs.c > @@ -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> > > diff --git a/services/mon.c b/services/mon.c > index a0bc705..665e768 100644 > --- a/services/mon.c > +++ b/services/mon.c > @@ -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> > diff --git a/services/pload.c b/services/pload.c > index 85a485f..c8f64ce 100644 > --- a/services/pload.c > +++ b/services/pload.c > @@ -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> > diff --git a/services/testquorum.c b/services/testquorum.c > index 3cdf9cd..5122054 100644 > --- a/services/testquorum.c > +++ b/services/testquorum.c > @@ -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> > > diff --git a/services/votequorum.c b/services/votequorum.c > index d9930fb..126354f 100644 > --- a/services/votequorum.c > +++ b/services/votequorum.c > @@ -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> > diff --git a/services/wd.c b/services/wd.c > index 72544ae..055cc8a 100644 > --- a/services/wd.c > +++ b/services/wd.c > @@ -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> _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss