Ugh On 03/10/2012 11:58 PM, Fabio M. Di Nitto wrote: > From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> > > there are several reasons for this: > > 1) evs is only partially implemented with no plans to complete it > > typedef enum { > EVS_TYPE_UNORDERED, /* not implemented */ > EVS_TYPE_FIFO, /* same as agreed */ > EVS_TYPE_AGREED, > EVS_TYPE_SAFE /* not implemented */ > } evs_guarantee_t; > We should implement safe at some point - its pretty easy to do. > 2) evs has no users in any upstream distribution and no search > engine can find any other upstream using it. > proprietary users use this service and I am not a zealot in making their life difficult because they chose the wrong licensing model.. > 3) the only reason (I was told) to carry around evs was that evs > receives the full ring_id struct from totem. This is only > partially correct because while the structures are prepared > to carry around those data, they are never transmitted from > corosync engine down the IPC line to the user. > CPG ring_id contains the exact same information and it's > actually less buggy (due to prototying of the info). > cpg has an entire membership layer - evs uses totem's built in membership layer. That is the major difference. > worst case scenario where a user really absolutely need libevs, > it can be easily reimplemented as libcpg wrapper and avoid > lots of code duplication. > I'd be open to a --enable-evs where evs was disabled by default.. > Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> > --- > AUTHORS | 2 +- > conf/corosync.conf.example | 2 +- > conf/corosync.conf.example.udpu | 2 +- > conf/corosync.xml.example | 2 +- > configure.ac | 1 - > corosync.spec.in | 5 - > exec/Makefile.am | 2 +- > exec/evs.c | 490 --------------------------------- > exec/ipc_glue.c | 3 - > exec/service.c | 9 +- > exec/service.h | 1 - > exec/util.c | 1 - > include/Makefile.am | 4 +- > include/corosync/corodefs.h | 3 +- > include/corosync/evs.h | 202 -------------- > include/corosync/ipc_evs.h | 140 ---------- > lib/Makefile.am | 4 +- > lib/evs.c | 569 --------------------------------------- > lib/libevs.versions | 14 - > lib/libevs.verso | 1 - > man/Makefile.am | 12 - > man/corosync.conf.5 | 4 - > man/corosync_overview.8 | 8 +- > man/evs_context_get.3.in | 64 ----- > man/evs_context_set.3.in | 66 ----- > man/evs_dispatch.3.in | 107 -------- > man/evs_fd_get.3.in | 70 ----- > man/evs_finalize.3.in | 66 ----- > man/evs_initialize.3.in | 121 --------- > man/evs_join.3.in | 105 ------- > man/evs_leave.3.in | 100 ------- > man/evs_mcast_groups.3.in | 164 ----------- > man/evs_mcast_joined.3.in | 137 ---------- > man/evs_membership_get.3.in | 74 ----- > man/evs_overview.8 | 185 ------------- > man/index.html | 43 --- > pkgconfig/Makefile.am | 2 +- > test/.gitignore | 3 - > test/Makefile.am | 11 +- > test/evsbench.c | 197 -------------- > test/evsverify.c | 188 ------------- > test/testevs.c | 193 ------------- > test/testevsth.c | 186 ------------- > 43 files changed, 17 insertions(+), 3546 deletions(-) > delete mode 100644 exec/evs.c > delete mode 100644 include/corosync/evs.h > delete mode 100644 include/corosync/ipc_evs.h > delete mode 100644 lib/evs.c > delete mode 100644 lib/libevs.versions > delete mode 100644 lib/libevs.verso > delete mode 100644 man/evs_context_get.3.in > delete mode 100644 man/evs_context_set.3.in > delete mode 100644 man/evs_dispatch.3.in > delete mode 100644 man/evs_fd_get.3.in > delete mode 100644 man/evs_finalize.3.in > delete mode 100644 man/evs_initialize.3.in > delete mode 100644 man/evs_join.3.in > delete mode 100644 man/evs_leave.3.in > delete mode 100644 man/evs_mcast_groups.3.in > delete mode 100644 man/evs_mcast_joined.3.in > delete mode 100644 man/evs_membership_get.3.in > delete mode 100644 man/evs_overview.8 > delete mode 100644 test/evsbench.c > delete mode 100644 test/evsverify.c > delete mode 100644 test/testevs.c > delete mode 100644 test/testevsth.c > > diff --git a/AUTHORS b/AUTHORS > index fb540f2..7ce2b46 100644 > --- a/AUTHORS > +++ b/AUTHORS > @@ -2,7 +2,7 @@ Last Updated Dec 2009 > > Main Developers > --------------- > -Steven Dake Maintainer, totem implementation, evs, cfg, > +Steven Dake Maintainer, totem implementation, cfg, > logsys, service engine architecture, ipc system > poll, timers, objdb, hdb, sync, coroapi > Christine Caulfield cpg, cfg, quorum, confdb, totem ipv6 support, totem NSS > diff --git a/conf/corosync.conf.example b/conf/corosync.conf.example > index 46be2eb..f856902 100644 > --- a/conf/corosync.conf.example > +++ b/conf/corosync.conf.example > @@ -67,7 +67,7 @@ logging { > # timestamps can be annoying). > timestamp: on > logger_subsys { > - subsys: EVS > + subsys: QUORUM > debug: off > } > } > diff --git a/conf/corosync.conf.example.udpu b/conf/corosync.conf.example.udpu > index 3730813..72613a1 100644 > --- a/conf/corosync.conf.example.udpu > +++ b/conf/corosync.conf.example.udpu > @@ -68,7 +68,7 @@ logging { > debug: off > timestamp: on > logger_subsys { > - subsys: EVS > + subsys: QUORUM > debug: off > } > } > diff --git a/conf/corosync.xml.example b/conf/corosync.xml.example > index c7e5a29..58d28ed 100644 > --- a/conf/corosync.xml.example > +++ b/conf/corosync.xml.example > @@ -103,7 +103,7 @@ > subsys if needed. > --> > > - <logger_subsys subsys="EVS" debug="off" /> > + <logger_subsys subsys="QUORUM" debug="off" /> > </logging> > > </corosync> > diff --git a/configure.ac b/configure.ac > index 721eb2d..b426db9 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -216,7 +216,6 @@ SONAME="${SOMAJOR}.${SOMINOR}.${SOMICRO}" > # specific libraries SONAME > LIB_SONAME_IMPORT([cfg]) > LIB_SONAME_IMPORT([cpg]) > -LIB_SONAME_IMPORT([evs]) > LIB_SONAME_IMPORT([quorum]) > LIB_SONAME_IMPORT([sam]) > LIB_SONAME_IMPORT([votequorum]) > diff --git a/corosync.spec.in b/corosync.spec.in > index 51fb7ad..f73e39e 100644 > --- a/corosync.spec.in > +++ b/corosync.spec.in > @@ -235,7 +235,6 @@ This package contains corosync libraries. > %{_libdir}/libcfg.so.* > %{_libdir}/libcpg.so.* > %{_libdir}/libcmap.so.* > -%{_libdir}/libevs.so.* > %{_libdir}/libtotem_pg.so.* > %{_libdir}/libquorum.so.* > %{_libdir}/libvotequorum.so.* > @@ -267,7 +266,6 @@ The Corosync Cluster Engine APIs. > %{_includedir}/corosync/cmap.h > %{_includedir}/corosync/corotypes.h > %{_includedir}/corosync/cpg.h > -%{_includedir}/corosync/evs.h > %{_includedir}/corosync/hdb.h > %{_includedir}/corosync/sam.h > %{_includedir}/corosync/quorum.h > @@ -279,7 +277,6 @@ The Corosync Cluster Engine APIs. > %{_libdir}/libcfg.so > %{_libdir}/libcpg.so > %{_libdir}/libcmap.so > -%{_libdir}/libevs.so > %{_libdir}/libtotem_pg.so > %{_libdir}/libquorum.so > %{_libdir}/libvotequorum.so > @@ -287,12 +284,10 @@ The Corosync Cluster Engine APIs. > %{_libdir}/libcorosync_common.so > %{_libdir}/pkgconfig/*.pc > %{_mandir}/man3/cpg_*3* > -%{_mandir}/man3/evs_*3* > %{_mandir}/man3/quorum_*3* > %{_mandir}/man3/votequorum_*3* > %{_mandir}/man3/sam_*3* > %{_mandir}/man8/cpg_overview.8* > -%{_mandir}/man8/evs_overview.8* > %{_mandir}/man8/votequorum_overview.8* > %{_mandir}/man8/sam_overview.8* > %{_mandir}/man3/cmap_*3* > diff --git a/exec/Makefile.am b/exec/Makefile.am > index 2e33033..6f739f4 100644 > --- a/exec/Makefile.am > +++ b/exec/Makefile.am > @@ -48,7 +48,7 @@ sbin_PROGRAMS = corosync > libtotem_pg_a_SOURCES = $(TOTEM_SRC) > > corosync_SOURCES = vsf_ykd.c coroparse.c vsf_quorum.c sync.c \ > - logsys.c cfg.c cmap.c cpg.c evs.c mon.c pload.c \ > + logsys.c cfg.c cmap.c cpg.c mon.c pload.c \ > votequorum.c wd.c util.c schedwrk.c main.c \ > apidef.c quorum.c icmap.c timer.c \ > ipc_glue.c service.c mainconfig.c totemconfig.c > diff --git a/exec/evs.c b/exec/evs.c > deleted file mode 100644 > index 6667341..0000000 > --- a/exec/evs.c > +++ /dev/null > @@ -1,490 +0,0 @@ > -/* > - * Copyright (c) 2004-2006 MontaVista Software, Inc. > - * Copyright (c) 2006-2012 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. > - */ > - > -#include <config.h> > - > -#include <sys/types.h> > -#include <sys/socket.h> > -#include <sys/un.h> > -#include <sys/ioctl.h> > -#include <netinet/in.h> > -#include <sys/uio.h> > -#include <unistd.h> > -#include <fcntl.h> > -#include <stdlib.h> > -#include <stdio.h> > -#include <errno.h> > -#include <assert.h> > -#include <time.h> > -#include <netinet/in.h> > -#include <arpa/inet.h> > - > -#include <corosync/swab.h> > -#include <corosync/corotypes.h> > -#include <qb/qbipc_common.h> > -#include <corosync/corodefs.h> > -#include <corosync/mar_gen.h> > -#include <corosync/coroapi.h> > -#include <corosync/logsys.h> > -#include <corosync/list.h> > - > -#include <corosync/evs.h> > -#include <corosync/ipc_evs.h> > - > -#include "service.h" > - > -LOGSYS_DECLARE_SUBSYS ("EVS"); > - > -enum evs_exec_message_req_types { > - MESSAGE_REQ_EXEC_EVS_MCAST = 0 > -}; > - > -/* > - * Service Interfaces required by service_message_handler struct > - */ > -static char *evs_exec_init_fn ( > - struct corosync_api_v1 *corosync_api); > - > -static void evs_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); > - > -static void message_handler_req_exec_mcast (const void *msg, unsigned int nodeid); > - > -static void req_exec_mcast_endian_convert (void *msg); > - > -static void message_handler_req_evs_join (void *conn, const void *msg); > -static void message_handler_req_evs_leave (void *conn, const void *msg); > -static void message_handler_req_evs_mcast_joined (void *conn, const void *msg); > -static void message_handler_req_evs_mcast_groups (void *conn, const void *msg); > -static void message_handler_req_evs_membership_get (void *conn, const void *msg); > - > -static int evs_lib_init_fn (void *conn); > -static int evs_lib_exit_fn (void *conn); > - > -struct evs_pd { > - struct evs_group *groups; > - int group_entries; > - struct list_head list; > - void *conn; > -}; > - > -static struct corosync_api_v1 *api; > - > -static struct corosync_lib_handler evs_lib_engine[] = > -{ > - { /* 0 */ > - .lib_handler_fn = message_handler_req_evs_join, > - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED > - }, > - { /* 1 */ > - .lib_handler_fn = message_handler_req_evs_leave, > - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED > - }, > - { /* 2 */ > - .lib_handler_fn = message_handler_req_evs_mcast_joined, > - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED > - }, > - { /* 3 */ > - .lib_handler_fn = message_handler_req_evs_mcast_groups, > - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED > - }, > - { /* 4 */ > - .lib_handler_fn = message_handler_req_evs_membership_get, > - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED > - } > -}; > - > -static struct corosync_exec_handler evs_exec_engine[] = > -{ > - { > - .exec_handler_fn = message_handler_req_exec_mcast, > - .exec_endian_convert_fn = req_exec_mcast_endian_convert > - } > -}; > - > -struct corosync_service_engine evs_service_engine = { > - .name = "corosync extended virtual synchrony service", > - .id = EVS_SERVICE, > - .priority = 1, > - .private_data_size = sizeof (struct evs_pd), > - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED, > - .lib_init_fn = evs_lib_init_fn, > - .lib_exit_fn = evs_lib_exit_fn, > - .lib_engine = evs_lib_engine, > - .lib_engine_count = sizeof (evs_lib_engine) / sizeof (struct corosync_lib_handler), > - .exec_engine = evs_exec_engine, > - .exec_engine_count = sizeof (evs_exec_engine) / sizeof (struct corosync_exec_handler), > - .confchg_fn = evs_confchg_fn, > - .exec_init_fn = evs_exec_init_fn, > - .exec_dump_fn = NULL > -}; > - > -static DECLARE_LIST_INIT (confchg_notify); > - > -struct corosync_service_engine *evs_get_service_engine_ver0 (void) > -{ > - return (&evs_service_engine); > -} > - > -static char *evs_exec_init_fn ( > - struct corosync_api_v1 *corosync_api) > -{ > -#ifdef COROSYNC_SOLARIS > - logsys_subsys_init(); > -#endif > - > - api = corosync_api; > - > - return NULL; > -} > - > -struct res_evs_confchg_callback res_evs_confchg_callback; > - > -static void evs_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) > -{ > - struct list_head *list; > - struct evs_pd *evs_pd; > - > - /* > - * Build configuration change message > - */ > - res_evs_confchg_callback.header.size = sizeof (struct res_evs_confchg_callback); > - res_evs_confchg_callback.header.id = MESSAGE_RES_EVS_CONFCHG_CALLBACK; > - res_evs_confchg_callback.header.error = CS_OK; > - > - memcpy (res_evs_confchg_callback.member_list, > - member_list, member_list_entries * sizeof(*member_list)); > - res_evs_confchg_callback.member_list_entries = member_list_entries; > - > - memcpy (res_evs_confchg_callback.left_list, > - left_list, left_list_entries * sizeof(*left_list)); > - res_evs_confchg_callback.left_list_entries = left_list_entries; > - > - memcpy (res_evs_confchg_callback.joined_list, > - joined_list, joined_list_entries * sizeof(*joined_list)); > - res_evs_confchg_callback.joined_list_entries = joined_list_entries; > - > - /* > - * Send configuration change message to every EVS library user > - */ > - for (list = confchg_notify.next; list != &confchg_notify; list = list->next) { > - evs_pd = list_entry (list, struct evs_pd, list); > - api->ipc_dispatch_send (evs_pd->conn, > - &res_evs_confchg_callback, > - sizeof (res_evs_confchg_callback)); > - } > -} > - > -static int evs_lib_init_fn (void *conn) > -{ > - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); > - > - log_printf (LOGSYS_LEVEL_DEBUG, "Got request to initalize evs service."); > - > - evs_pd->groups = NULL; > - evs_pd->group_entries = 0; > - evs_pd->conn = conn; > - list_init (&evs_pd->list); > - list_add (&evs_pd->list, &confchg_notify); > - > - api->ipc_dispatch_send (conn, &res_evs_confchg_callback, > - sizeof (res_evs_confchg_callback)); > - > - return (0); > -} > - > -static int evs_lib_exit_fn (void *conn) > -{ > - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); > - > - list_del (&evs_pd->list); > - return (0); > -} > - > -static void message_handler_req_evs_join (void *conn, const void *msg) > -{ > - cs_error_t error = CS_OK; > - const struct req_lib_evs_join *req_lib_evs_join = msg; > - struct res_lib_evs_join res_lib_evs_join; > - void *addr; > - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); > - > - if (req_lib_evs_join->group_entries > 50) { > - error = CS_ERR_TOO_MANY_GROUPS; > - goto exit_error; > - } > - > - addr = realloc (evs_pd->groups, sizeof (struct evs_group) * > - (evs_pd->group_entries + req_lib_evs_join->group_entries)); > - if (addr == NULL) { > - error = CS_ERR_NO_MEMORY; > - goto exit_error; > - } > - evs_pd->groups = addr; > - > - memcpy (&evs_pd->groups[evs_pd->group_entries], > - req_lib_evs_join->groups, > - sizeof (struct evs_group) * req_lib_evs_join->group_entries); > - > - evs_pd->group_entries += req_lib_evs_join->group_entries; > - > -exit_error: > - res_lib_evs_join.header.size = sizeof (struct res_lib_evs_join); > - res_lib_evs_join.header.id = MESSAGE_RES_EVS_JOIN; > - res_lib_evs_join.header.error = error; > - > - api->ipc_response_send (conn, &res_lib_evs_join, > - sizeof (struct res_lib_evs_join)); > -} > - > -static void message_handler_req_evs_leave (void *conn, const void *msg) > -{ > - const struct req_lib_evs_leave *req_lib_evs_leave = msg; > - struct res_lib_evs_leave res_lib_evs_leave; > - cs_error_t error = CS_OK; > - int i, j; > - int found; > - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); > - > - for (i = 0; i < req_lib_evs_leave->group_entries; i++) { > - found = 0; > - for (j = 0; j < evs_pd->group_entries;) { > - > - if (memcmp (&req_lib_evs_leave->groups[i], > - &evs_pd->groups[j], sizeof (struct evs_group)) == 0) { > - > - /* > - * Delete entry > - */ > - memmove (&evs_pd->groups[j], &evs_pd->groups[j + 1], > - (evs_pd->group_entries - j - 1) * sizeof (struct evs_group)); > - > - evs_pd->group_entries -= 1; > - > - found = 1; > - break; > - } else { > - j++; > - } > - } > - if (found == 0) { > - error = CS_ERR_NOT_EXIST; > - break; > - } > - } > - > - res_lib_evs_leave.header.size = sizeof (struct res_lib_evs_leave); > - res_lib_evs_leave.header.id = MESSAGE_RES_EVS_LEAVE; > - res_lib_evs_leave.header.error = error; > - > - api->ipc_response_send (conn, &res_lib_evs_leave, > - sizeof (struct res_lib_evs_leave)); > -} > - > -static void message_handler_req_evs_mcast_joined (void *conn, const void *msg) > -{ > - cs_error_t error = CS_ERR_TRY_AGAIN; > - const struct req_lib_evs_mcast_joined *req_lib_evs_mcast_joined = msg; > - struct res_lib_evs_mcast_joined res_lib_evs_mcast_joined; > - struct iovec req_exec_evs_mcast_iovec[3]; > - struct req_exec_evs_mcast req_exec_evs_mcast; > - int res; > - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); > - > - req_exec_evs_mcast.header.size = sizeof (struct req_exec_evs_mcast) + > - evs_pd->group_entries * sizeof (struct evs_group) + > - req_lib_evs_mcast_joined->msg_len; > - > - req_exec_evs_mcast.header.id = > - SERVICE_ID_MAKE (EVS_SERVICE, MESSAGE_REQ_EXEC_EVS_MCAST); > - req_exec_evs_mcast.msg_len = req_lib_evs_mcast_joined->msg_len; > - req_exec_evs_mcast.group_entries = evs_pd->group_entries; > - > - req_exec_evs_mcast_iovec[0].iov_base = (char *)&req_exec_evs_mcast; > - req_exec_evs_mcast_iovec[0].iov_len = sizeof (req_exec_evs_mcast); > - req_exec_evs_mcast_iovec[1].iov_base = (char *)evs_pd->groups; > - req_exec_evs_mcast_iovec[1].iov_len = evs_pd->group_entries * sizeof (struct evs_group); > - req_exec_evs_mcast_iovec[2].iov_base = (char *)&req_lib_evs_mcast_joined->msg; > - req_exec_evs_mcast_iovec[2].iov_len = req_lib_evs_mcast_joined->msg_len; > - > - res = api->totem_mcast (req_exec_evs_mcast_iovec, 3, TOTEM_AGREED); > - // TODO > - if (res == 0) { > - error = CS_OK; > - } > - > - res_lib_evs_mcast_joined.header.size = sizeof (struct res_lib_evs_mcast_joined); > - res_lib_evs_mcast_joined.header.id = MESSAGE_RES_EVS_MCAST_JOINED; > - res_lib_evs_mcast_joined.header.error = error; > - > - api->ipc_response_send (conn, &res_lib_evs_mcast_joined, > - sizeof (struct res_lib_evs_mcast_joined)); > -} > - > -static void message_handler_req_evs_mcast_groups (void *conn, const void *msg) > -{ > - cs_error_t error = CS_ERR_TRY_AGAIN; > - const struct req_lib_evs_mcast_groups *req_lib_evs_mcast_groups = msg; > - struct res_lib_evs_mcast_groups res_lib_evs_mcast_groups; > - struct iovec req_exec_evs_mcast_iovec[3]; > - struct req_exec_evs_mcast req_exec_evs_mcast; > - const char *msg_addr; > - int res; > - > - req_exec_evs_mcast.header.size = sizeof (struct req_exec_evs_mcast) + > - sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries + > - req_lib_evs_mcast_groups->msg_len; > - > - req_exec_evs_mcast.header.id = > - SERVICE_ID_MAKE (EVS_SERVICE, MESSAGE_REQ_EXEC_EVS_MCAST); > - req_exec_evs_mcast.msg_len = req_lib_evs_mcast_groups->msg_len; > - req_exec_evs_mcast.group_entries = req_lib_evs_mcast_groups->group_entries; > - > - msg_addr = (const char *)req_lib_evs_mcast_groups + > - sizeof (struct req_lib_evs_mcast_groups) + > - (sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries); > - > - req_exec_evs_mcast_iovec[0].iov_base = (char *)&req_exec_evs_mcast; > - req_exec_evs_mcast_iovec[0].iov_len = sizeof (req_exec_evs_mcast); > - req_exec_evs_mcast_iovec[1].iov_base = (char *)&req_lib_evs_mcast_groups->groups; > - req_exec_evs_mcast_iovec[1].iov_len = sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries; > - req_exec_evs_mcast_iovec[2].iov_base = (void *) msg_addr; /* discard const */ > - req_exec_evs_mcast_iovec[2].iov_len = req_lib_evs_mcast_groups->msg_len; > - > - res = api->totem_mcast (req_exec_evs_mcast_iovec, 3, TOTEM_AGREED); > - if (res == 0) { > - error = CS_OK; > - } > - > - res_lib_evs_mcast_groups.header.size = sizeof (struct res_lib_evs_mcast_groups); > - res_lib_evs_mcast_groups.header.id = MESSAGE_RES_EVS_MCAST_GROUPS; > - res_lib_evs_mcast_groups.header.error = error; > - > - api->ipc_response_send (conn, &res_lib_evs_mcast_groups, > - sizeof (struct res_lib_evs_mcast_groups)); > -} > - > -static void message_handler_req_evs_membership_get (void *conn, const void *msg) > -{ > - struct res_lib_evs_membership_get res_lib_evs_membership_get; > - > - res_lib_evs_membership_get.header.size = sizeof (struct res_lib_evs_membership_get); > - res_lib_evs_membership_get.header.id = MESSAGE_RES_EVS_MEMBERSHIP_GET; > - res_lib_evs_membership_get.header.error = CS_OK; > - res_lib_evs_membership_get.local_nodeid = api->totem_nodeid_get (); > - memcpy (&res_lib_evs_membership_get.member_list, > - &res_evs_confchg_callback.member_list, > - sizeof (res_lib_evs_membership_get.member_list)); > - > - res_lib_evs_membership_get.member_list_entries = > - res_evs_confchg_callback.member_list_entries; > - > - api->ipc_response_send (conn, &res_lib_evs_membership_get, > - sizeof (struct res_lib_evs_membership_get)); > -} > - > -static void req_exec_mcast_endian_convert (void *msg) > -{ > - struct req_exec_evs_mcast *req_exec_evs_mcast = > - (struct req_exec_evs_mcast *)msg; > - req_exec_evs_mcast->group_entries = > - swab32 (req_exec_evs_mcast->group_entries); > - req_exec_evs_mcast->msg_len = swab32 (req_exec_evs_mcast->msg_len); > -} > - > -static void message_handler_req_exec_mcast ( > - const void *msg, > - unsigned int nodeid) > -{ > - const struct req_exec_evs_mcast *req_exec_evs_mcast = msg; > - struct res_evs_deliver_callback res_evs_deliver_callback; > - const char *msg_addr; > - struct list_head *list; > - int found = 0; > - int i, j; > - struct evs_pd *evs_pd; > - struct iovec iov[2]; > - > - res_evs_deliver_callback.header.size = sizeof (struct res_evs_deliver_callback) + > - req_exec_evs_mcast->msg_len; > - res_evs_deliver_callback.header.id = MESSAGE_RES_EVS_DELIVER_CALLBACK; > - res_evs_deliver_callback.header.error = CS_OK; > - res_evs_deliver_callback.msglen = req_exec_evs_mcast->msg_len; > - > - msg_addr = (const char *)req_exec_evs_mcast + sizeof (struct req_exec_evs_mcast) + > - (sizeof (struct evs_group) * req_exec_evs_mcast->group_entries); > - > - for (list = confchg_notify.next; list != &confchg_notify; list = list->next) { > - found = 0; > - evs_pd = list_entry (list, struct evs_pd, list); > - > - for (i = 0; i < evs_pd->group_entries; i++) { > - for (j = 0; j < req_exec_evs_mcast->group_entries; j++) { > - > - if (memcmp (&evs_pd->groups[i], &req_exec_evs_mcast->groups[j], > - sizeof (struct evs_group)) == 0) { > - > - found = 1; > - break; > - } > - } > - if (found) { > - break; > - } > - } > - > - if (found) { > - res_evs_deliver_callback.local_nodeid = nodeid; > - iov[0].iov_base = (void *)&res_evs_deliver_callback; > - iov[0].iov_len = sizeof (struct res_evs_deliver_callback); > - iov[1].iov_base = (void *) msg_addr; /* discard const */ > - iov[1].iov_len = req_exec_evs_mcast->msg_len; > - > - api->ipc_dispatch_iov_send ( > - evs_pd->conn, > - iov, > - 2); > - } > - } > -} > diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c > index 9d00d7b..2aca988 100644 > --- a/exec/ipc_glue.c > +++ b/exec/ipc_glue.c > @@ -118,9 +118,6 @@ static const char* cs_ipcs_serv_short_name(int32_t service_id) > { > const char *name; > switch (service_id) { > - case EVS_SERVICE: > - name = "evs"; > - break; > case CFG_SERVICE: > name = "cfg"; > break; > diff --git a/exec/service.c b/exec/service.c > index fed75c3..c8adae7 100644 > --- a/exec/service.c > +++ b/exec/service.c > @@ -60,9 +60,9 @@ LOGSYS_DECLARE_SUBSYS ("SERV"); > > static struct default_service default_services[] = { > { > - .name = "corosync_evs", > + .name = "corosync_cmap", > .ver = 0, > - .loader = evs_get_service_engine_ver0 > + .loader = cmap_get_service_engine_ver0 > }, > { > .name = "corosync_cfg", > @@ -98,11 +98,6 @@ static struct default_service default_services[] = { > .ver = 0, > .loader = vsf_quorum_get_service_engine_ver0 > }, > - { > - .name = "corosync_cmap", > - .ver = 0, > - .loader = cmap_get_service_engine_ver0 > - }, > }; > > /* > diff --git a/exec/service.h b/exec/service.h > index 1d255f3..647d0e0 100644 > --- a/exec/service.h > +++ b/exec/service.h > @@ -85,7 +85,6 @@ struct corosync_service_engine *vsf_quorum_get_service_engine_ver0 (void); > struct corosync_service_engine *quorum_get_service_handler_ver0 (void); > struct corosync_service_engine *pload_get_service_engine_ver0 (void); > struct corosync_service_engine *cfg_get_service_engine_ver0 (void); > -struct corosync_service_engine *evs_get_service_engine_ver0 (void); > struct corosync_service_engine *cpg_get_service_engine_ver0 (void); > struct corosync_service_engine *mon_get_service_engine_ver0 (void); > struct corosync_service_engine *wd_get_service_engine_ver0 (void); > diff --git a/exec/util.c b/exec/util.c > index c0d5c8b..343759d 100644 > --- a/exec/util.c > +++ b/exec/util.c > @@ -58,7 +58,6 @@ struct service_names { > > static struct service_names servicenames[] = > { > - { "EVS", EVS_SERVICE }, > { "CFG", CFG_SERVICE }, > { "CPG", CPG_SERVICE }, > { "QUORUM", QUORUM_SERVICE }, > diff --git a/include/Makefile.am b/include/Makefile.am > index e15d36c..780d012 100644 > --- a/include/Makefile.am > +++ b/include/Makefile.am > @@ -31,10 +31,10 @@ > > MAINTAINERCLEANFILES = Makefile.in corosync/config.h.in > > -CS_H = hdb.h cpg.h cfg.h evs.h corodefs.h \ > +CS_H = hdb.h cpg.h cfg.h corodefs.h \ > corotypes.h quorum.h votequorum.h sam.h cmap.h > > -CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_quorum.h \ > +CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_quorum.h \ > quorum.h sq.h ipc_votequorum.h ipc_cmap.h \ > logsys.h coroapi.h icmap.h mar_gen.h list.h swab.h cs_config.h > > diff --git a/include/corosync/corodefs.h b/include/corosync/corodefs.h > index c391c57..93904f5 100644 > --- a/include/corosync/corodefs.h > +++ b/include/corosync/corodefs.h > @@ -38,7 +38,7 @@ > #include <netinet/in.h> > > enum corosync_service_types { > - EVS_SERVICE = 0, > + CMAP_SERVICE = 0, > CFG_SERVICE = 1, > CPG_SERVICE = 2, > QUORUM_SERVICE = 3, > @@ -46,7 +46,6 @@ enum corosync_service_types { > VOTEQUORUM_SERVICE = 5, > MON_SERVICE = 6, > WD_SERVICE = 7, > - CMAP_SERVICE = 8, > }; > > #ifdef HAVE_SMALL_MEMORY_FOOTPRINT > diff --git a/include/corosync/evs.h b/include/corosync/evs.h > deleted file mode 100644 > index 881414c..0000000 > --- a/include/corosync/evs.h > +++ /dev/null > @@ -1,202 +0,0 @@ > -/* > - * Copyright (c) 2004 MontaVista Software, Inc. > - * Copyright (c) 2006-2011 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 COROSYNC_EVS_H_DEFINED > -#define COROSYNC_EVS_H_DEFINED > - > -#include <inttypes.h> > -#include <netinet/in.h> > -#include <corosync/corotypes.h> > -#include <corosync/hdb.h> > - > -#ifdef __cplusplus > -extern "C" { > -#endif > - > -/** > - * @defgroup corosync Other API services provided by corosync > - */ > -/** > - * @addtogroup evs_corosync > - * > - * @{ > - */ > - > -typedef uint64_t evs_handle_t; > - > -typedef enum { > - EVS_TYPE_UNORDERED, /* not implemented */ > - EVS_TYPE_FIFO, /* same as agreed */ > - EVS_TYPE_AGREED, > - EVS_TYPE_SAFE /* not implemented */ > -} evs_guarantee_t; > - > -#define TOTEMIP_ADDRLEN (sizeof(struct in6_addr)) > - > -/** These are the things that get passed around */ > -struct evs_group { > - char key[32]; > -}; > - > -struct evs_ring_id { > - unsigned int nodeid; > - unsigned long long seq; > -}; > - > -typedef void (*evs_deliver_fn_t) ( > - hdb_handle_t handle, > - unsigned int nodeid, > - const void *msg, > - size_t msg_len); > - > -typedef void (*evs_confchg_fn_t) ( > - hdb_handle_t handle, > - 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 evs_ring_id *ring_id); > - > -typedef struct { > - evs_deliver_fn_t evs_deliver_fn; > - evs_confchg_fn_t evs_confchg_fn; > -} evs_callbacks_t; > - > -/** @} */ > - > -/** > - * Create a new evs connection > - */ > -cs_error_t evs_initialize ( > - evs_handle_t *handle, > - evs_callbacks_t *callbacks); > - > -/** > - * Close the evs handle > - */ > -cs_error_t evs_finalize ( > - evs_handle_t handle); > - > -/** > - * Get a file descriptor on which to poll. > - * > - * evs_handle_t is NOT a file descriptor and may not be used directly. > - */ > -cs_error_t evs_fd_get ( > - evs_handle_t handle, > - int *fd); > - > -/** > - * Get contexts for a EVS handle > - */ > -cs_error_t evs_context_get ( > - evs_handle_t handle, > - void **context); > - > -/** > - * Set contexts for a EVS handle > - */ > -cs_error_t evs_context_set ( > - evs_handle_t handle, > - void *context); > - > -/** > - * Dispatch messages and configuration changes > - */ > -cs_error_t evs_dispatch ( > - evs_handle_t handle, > - cs_dispatch_flags_t dispatch_types); > - > -/** > - * Join one or more groups. > - * > - * messages multicasted with evs_mcast_joined will be sent to every > - * group that has been joined on handle handle. Any message multicasted > - * to a group that has been previously joined will be delivered in evs_dispatch > - */ > -cs_error_t evs_join ( > - evs_handle_t handle, > - const struct evs_group *groups, > - size_t group_cnt); > - > -/** > - * Leave one or more groups > - */ > -cs_error_t evs_leave ( > - evs_handle_t handle, > - const struct evs_group *groups, > - size_t group_cnt); > - > -/** > - * Multicast to groups joined with evs_join. > - * > - * @param handle > - * @param guarantee > - * @param iovec This iovec will be multicasted to all groups joined with > - * the evs_join interface for handle. > - * @param iov_len > - */ > -cs_error_t evs_mcast_joined ( > - evs_handle_t handle, > - evs_guarantee_t guarantee, > - const struct iovec *iovec, > - unsigned int iov_len); > - > -/** > - * Multicast to specified groups. > - * > - * Messages will be multicast to groups specified in the api call and not those > - * that have been joined (unless they are in the groups parameter). > - */ > -cs_error_t evs_mcast_groups ( > - evs_handle_t handle, > - evs_guarantee_t guarantee, > - const struct evs_group *groups, > - size_t group_cnt, > - const struct iovec *iovec, > - unsigned int iov_len); > - > -/** > - * Get membership information from evs > - */ > -cs_error_t evs_membership_get ( > - evs_handle_t handle, > - unsigned int *local_nodeid, > - unsigned int *member_list, > - size_t *member_list_entries); > - > -#ifdef __cplusplus > -} > -#endif > - > -#endif /* COROSYNC_EVS_H_DEFINED */ > diff --git a/include/corosync/ipc_evs.h b/include/corosync/ipc_evs.h > deleted file mode 100644 > index 9df5e5b..0000000 > --- a/include/corosync/ipc_evs.h > +++ /dev/null > @@ -1,140 +0,0 @@ > -/* > - * Copyright (c) 2002-2004 MontaVista Software, Inc. > - * Copyright (c) 2006-2012 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 IPC_EVS_H_DEFINED > -#define IPC_EVS_H_DEFINED > - > -#include <inttypes.h> > -#include <corosync/corotypes.h> > -#include <qb/qbipc_common.h> > -#include <corosync/mar_gen.h> > - > -enum req_lib_evs_types { > - MESSAGE_REQ_EVS_JOIN = 0, > - MESSAGE_REQ_EVS_LEAVE = 1, > - MESSAGE_REQ_EVS_MCAST_JOINED = 2, > - MESSAGE_REQ_EVS_MCAST_GROUPS = 3, > - MESSAGE_REQ_EVS_MEMBERSHIP_GET = 4 > -}; > - > -enum res_lib_evs_types { > - MESSAGE_RES_EVS_DELIVER_CALLBACK = 0, > - MESSAGE_RES_EVS_CONFCHG_CALLBACK = 1, > - MESSAGE_RES_EVS_JOIN = 2, > - MESSAGE_RES_EVS_LEAVE = 3, > - MESSAGE_RES_EVS_MCAST_JOINED = 4, > - MESSAGE_RES_EVS_MCAST_GROUPS = 5, > - MESSAGE_RES_EVS_MEMBERSHIP_GET = 6 > -}; > - > -struct res_evs_deliver_callback { > - struct qb_ipc_response_header header; > - unsigned int local_nodeid; > - size_t msglen; > - char msg[0]; > -}; > - > -struct res_evs_confchg_callback { > - struct qb_ipc_response_header header; > - size_t member_list_entries; > - size_t left_list_entries; > - size_t joined_list_entries; > - unsigned int member_list[PROCESSOR_COUNT_MAX]; > - unsigned int left_list[PROCESSOR_COUNT_MAX]; > - unsigned int joined_list[PROCESSOR_COUNT_MAX]; > -}; > - > -struct req_lib_evs_join { > - struct qb_ipc_response_header header; > - size_t group_entries; > - struct evs_group groups[0]; > -}; > - > -struct res_lib_evs_join { > - struct qb_ipc_response_header header; > -}; > - > -struct req_lib_evs_leave { > - struct qb_ipc_response_header header; > - size_t group_entries; > - struct evs_group groups[0]; > -}; > - > -struct res_lib_evs_leave { > - struct qb_ipc_response_header header; > -}; > - > -struct req_lib_evs_mcast_joined { > - struct qb_ipc_response_header header; > - evs_guarantee_t guarantee; > - size_t msg_len; > - char msg[0]; > -}; > - > -struct res_lib_evs_mcast_joined { > - struct qb_ipc_response_header header; > -}; > - > -struct req_lib_evs_mcast_groups { > - struct qb_ipc_response_header header; > - evs_guarantee_t guarantee; > - size_t msg_len; > - size_t group_entries; > - struct evs_group groups[0]; > -}; > - > -struct res_lib_evs_mcast_groups { > - struct qb_ipc_response_header header; > -}; > - > - > -struct req_exec_evs_mcast { > - struct qb_ipc_request_header header; > - size_t group_entries; > - size_t msg_len; > - struct evs_group groups[0]; > - /* data goes here */ > -}; > - > -struct req_lib_evs_membership_get { > - struct qb_ipc_request_header header; > -}; > - > -struct res_lib_evs_membership_get { > - struct qb_ipc_response_header header; > - unsigned int local_nodeid; > - unsigned int member_list[PROCESSOR_COUNT_MAX]; > - size_t member_list_entries; > -}; > -#endif /* IPC_EVS_H_DEFINED */ > diff --git a/lib/Makefile.am b/lib/Makefile.am > index 58c7b78..5883fe6 100644 > --- a/lib/Makefile.am > +++ b/lib/Makefile.am > @@ -46,13 +46,12 @@ AM_LDFLAGS = -lpthread -L../common_lib -lcorosync_common > > INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include > > -lib_LIBRARIES = libcpg.a libquorum.a libevs.a libcfg.a \ > +lib_LIBRARIES = libcpg.a libquorum.a libcfg.a \ > libvotequorum.a libsam.a libcmap.a > SHARED_LIBS_SO = $(lib_LIBRARIES:%.a=%.so) > > libcpg_a_SOURCES = cpg.c > libcfg_a_SOURCES = cfg.c > -libevs_a_SOURCES = evs.c > libquorum_a_SOURCES = quorum.c > libvotequorum_a_SOURCES = votequorum.c > libcmap_a_SOURCES = cmap.c > @@ -62,7 +61,6 @@ libsam_a_SOURCES = sam.c > noinst_HEADERS = util.h \ > libcfg.versions \ > libcpg.versions \ > - libevs.versions \ > libquorum.versions libvotequorum.versions \ > libsam.versions libcmap.versions > > diff --git a/lib/evs.c b/lib/evs.c > deleted file mode 100644 > index a5d0b3a..0000000 > --- a/lib/evs.c > +++ /dev/null > @@ -1,569 +0,0 @@ > -/* > - * vi: set autoindent tabstop=4 shiftwidth=4 : > - > - * Copyright (c) 2004-2005 MontaVista Software, Inc. > - * Copyright (c) 2006-2012 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. > - */ > -/* > - * Provides an extended virtual synchrony API using the corosync executive > - */ > - > -#include <config.h> > - > -#include <stdlib.h> > -#include <string.h> > -#include <unistd.h> > -#include <sys/types.h> > -#include <sys/socket.h> > -#include <errno.h> > - > -#include <qb/qbipcc.h> > - > -#include <corosync/corotypes.h> > -#include <corosync/corodefs.h> > -#include <corosync/hdb.h> > - > -#include <corosync/evs.h> > -#include <corosync/ipc_evs.h> > - > -#include "util.h" > - > -struct evs_inst { > - qb_ipcc_connection_t *c; > - int finalize; > - evs_callbacks_t callbacks; > - void *context; > -}; > - > -DECLARE_HDB_DATABASE (evs_handle_t_db,NULL); > - > -/* > - * Clean up function for an evt instance (saEvtInitialize) handle > - */ > - > - > -/** > - * @defgroup evs_coroipcc The extended virtual synchrony passthrough API > - * @ingroup coroipcc > - * > - * @{ > - */ > -/** > - * test > - * @param handle The handle of evs initialize > - * @param callbacks The callbacks for evs_initialize > - * @returns CS_OK > - */ > -cs_error_t evs_initialize ( > - evs_handle_t *handle, > - evs_callbacks_t *callbacks) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - > - error = hdb_error_to_cs(hdb_handle_create (&evs_handle_t_db, sizeof (struct evs_inst), handle)); > - if (error != CS_OK) { > - goto error_no_destroy; > - } > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, *handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - goto error_destroy; > - } > - > - evs_inst->c = qb_ipcc_connect ("evs", IPC_REQUEST_SIZE); > - if (evs_inst->c == NULL) { > - error = qb_to_cs_error(-errno); > - goto error_put_destroy; > - } > - > - if (callbacks) { > - memcpy (&evs_inst->callbacks, callbacks, sizeof (evs_callbacks_t)); > - } > - > - hdb_handle_put (&evs_handle_t_db, *handle); > - > - return (CS_OK); > - > -error_put_destroy: > - hdb_handle_put (&evs_handle_t_db, *handle); > -error_destroy: > - hdb_handle_destroy (&evs_handle_t_db, *handle); > -error_no_destroy: > - return (error); > -} > - > -cs_error_t evs_finalize ( > - evs_handle_t handle) > -{ > - struct evs_inst *evs_inst; > - cs_error_t error; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - /* > - * Another thread has already started finalizing > - */ > - if (evs_inst->finalize) { > - hdb_handle_put (&evs_handle_t_db, handle); > - return (CS_ERR_BAD_HANDLE); > - } > - > - evs_inst->finalize = 1; > - > - qb_ipcc_disconnect (evs_inst->c); > - > - hdb_handle_destroy (&evs_handle_t_db, handle); > - > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (CS_OK); > -} > - > -cs_error_t evs_fd_get ( > - evs_handle_t handle, > - int *fd) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - qb_ipcc_fd_get (evs_inst->c, fd); > - > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (CS_OK); > -} > - > -cs_error_t evs_context_get ( > - evs_handle_t handle, > - void **context) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - > - error = hdb_error_to_cs (hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - *context = evs_inst->context; > - > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (CS_OK); > -} > - > -cs_error_t evs_context_set ( > - evs_handle_t handle, > - void *context) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - > - error = hdb_error_to_cs (hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - evs_inst->context = context; > - > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (CS_OK); > -} > - > -cs_error_t evs_dispatch ( > - evs_handle_t handle, > - cs_dispatch_flags_t dispatch_types) > -{ > - int timeout = -1; > - cs_error_t error; > - int cont = 1; /* always continue do loop except when set to 0 */ > - struct evs_inst *evs_inst; > - struct res_evs_confchg_callback *res_evs_confchg_callback; > - struct res_evs_deliver_callback *res_evs_deliver_callback; > - evs_callbacks_t callbacks; > - struct qb_ipc_response_header *dispatch_data; > - char dispatch_buf[IPC_DISPATCH_SIZE]; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - /* > - * Timeout instantly for CS_DISPATCH_ONE_NONBLOCKING or CS_DISPATCH_ALL and > - * wait indefinately for CS_DISPATCH_ONE or CS_DISPATCH_BLOCKING > - */ > - if (dispatch_types == CS_DISPATCH_ALL || dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { > - timeout = 0; > - } > - > - dispatch_data = (struct qb_ipc_response_header *)dispatch_buf; > - do { > - error = qb_to_cs_error(qb_ipcc_event_recv ( > - evs_inst->c, > - dispatch_buf, > - IPC_DISPATCH_SIZE, > - timeout)); > - if (error == CS_ERR_BAD_HANDLE) { > - error = CS_OK; > - goto error_put; > - } > - if (error == CS_ERR_TRY_AGAIN) { > - if (dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { > - /* > - * Don't mask error > - */ > - goto error_put; > - } > - error = CS_OK; > - if (dispatch_types == CS_DISPATCH_ALL) { > - break; /* exit do while cont is 1 loop */ > - } else { > - continue; /* next poll */ > - } > - } > - if (error != CS_OK) { > - goto error_put; > - } > - > - /* > - * Make copy of callbacks, message data, unlock instance, and call callback > - * A risk of this dispatch method is that the callback routines may > - * operate at the same time that evsFinalize has been called. > - */ > - memcpy (&callbacks, &evs_inst->callbacks, sizeof (evs_callbacks_t)); > - > - /* > - * Dispatch incoming message > - */ > - switch (dispatch_data->id) { > - case MESSAGE_RES_EVS_DELIVER_CALLBACK: > - if (callbacks.evs_deliver_fn == NULL) { > - break; > - } > - > - res_evs_deliver_callback = (struct res_evs_deliver_callback *)dispatch_data; > - callbacks.evs_deliver_fn ( > - handle, > - res_evs_deliver_callback->local_nodeid, > - &res_evs_deliver_callback->msg, > - res_evs_deliver_callback->msglen); > - break; > - > - case MESSAGE_RES_EVS_CONFCHG_CALLBACK: > - if (callbacks.evs_confchg_fn == NULL) { > - break; > - } > - > - res_evs_confchg_callback = (struct res_evs_confchg_callback *)dispatch_data; > - callbacks.evs_confchg_fn ( > - handle, > - res_evs_confchg_callback->member_list, > - res_evs_confchg_callback->member_list_entries, > - res_evs_confchg_callback->left_list, > - res_evs_confchg_callback->left_list_entries, > - res_evs_confchg_callback->joined_list, > - res_evs_confchg_callback->joined_list_entries, > - NULL); > - break; > - > - default: > - error = CS_ERR_LIBRARY; > - goto error_put; > - break; > - } > - > - /* > - * Determine if more messages should be processed > - */ > - if (dispatch_types == CS_DISPATCH_ONE || dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { > - cont = 0; > - } > - } while (cont); > - > -error_put: > - hdb_handle_put (&evs_handle_t_db, handle); > - return (error); > -} > - > -cs_error_t evs_join ( > - evs_handle_t handle, > - const struct evs_group *groups, > - size_t group_entries) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - struct iovec iov[2]; > - struct req_lib_evs_join req_lib_evs_join; > - struct res_lib_evs_join res_lib_evs_join; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - req_lib_evs_join.header.size = sizeof (struct req_lib_evs_join) + > - (group_entries * sizeof (struct evs_group)); > - req_lib_evs_join.header.id = MESSAGE_REQ_EVS_JOIN; > - req_lib_evs_join.group_entries = group_entries; > - > - iov[0].iov_base = (void *)&req_lib_evs_join; > - iov[0].iov_len = sizeof (struct req_lib_evs_join); > - iov[1].iov_base = (void*) groups; /* cast away const */ > - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); > - > - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, 2, > - &res_lib_evs_join, sizeof (struct res_lib_evs_join), CS_IPC_TIMEOUT_MS)); > - > - if (error != CS_OK) { > - goto error_exit; > - } > - > - error = res_lib_evs_join.header.error; > - > -error_exit: > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (error); > -} > - > -cs_error_t evs_leave ( > - evs_handle_t handle, > - const struct evs_group *groups, > - size_t group_entries) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - struct iovec iov[2]; > - struct req_lib_evs_leave req_lib_evs_leave; > - struct res_lib_evs_leave res_lib_evs_leave; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - req_lib_evs_leave.header.size = sizeof (struct req_lib_evs_leave) + > - (group_entries * sizeof (struct evs_group)); > - req_lib_evs_leave.header.id = MESSAGE_REQ_EVS_LEAVE; > - req_lib_evs_leave.group_entries = group_entries; > - > - iov[0].iov_base = (void *)&req_lib_evs_leave; > - iov[0].iov_len = sizeof (struct req_lib_evs_leave); > - iov[1].iov_base = (void *) groups; /* cast away const */ > - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); > - > - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, 2, > - &res_lib_evs_leave, sizeof (struct res_lib_evs_leave), CS_IPC_TIMEOUT_MS)); > - > - if (error != CS_OK) { > - goto error_exit; > - } > - > - error = res_lib_evs_leave.header.error; > - > -error_exit: > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (error); > -} > - > -cs_error_t evs_mcast_joined ( > - evs_handle_t handle, > - evs_guarantee_t guarantee, > - const struct iovec *iovec, > - unsigned int iov_len) > -{ > - int i; > - cs_error_t error; > - struct evs_inst *evs_inst; > - struct iovec iov[64]; > - struct req_lib_evs_mcast_joined req_lib_evs_mcast_joined; > - struct res_lib_evs_mcast_joined res_lib_evs_mcast_joined; > - size_t msg_len = 0; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - for (i = 0; i < iov_len; i++ ) { > - msg_len += iovec[i].iov_len; > - } > - > - req_lib_evs_mcast_joined.header.size = sizeof (struct req_lib_evs_mcast_joined) + > - msg_len; > - > - req_lib_evs_mcast_joined.header.id = MESSAGE_REQ_EVS_MCAST_JOINED; > - req_lib_evs_mcast_joined.guarantee = guarantee; > - req_lib_evs_mcast_joined.msg_len = msg_len; > - > - iov[0].iov_base = (void *)&req_lib_evs_mcast_joined; > - iov[0].iov_len = sizeof (struct req_lib_evs_mcast_joined); > - memcpy (&iov[1], iovec, iov_len * sizeof (struct iovec)); > - > - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, > - iov_len + 1, > - &res_lib_evs_mcast_joined, > - sizeof (struct res_lib_evs_mcast_joined), CS_IPC_TIMEOUT_MS)); > - > - if (error != CS_OK) { > - goto error_exit; > - } > - > - error = res_lib_evs_mcast_joined.header.error; > - > -error_exit: > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (error); > -} > - > -cs_error_t evs_mcast_groups ( > - evs_handle_t handle, > - evs_guarantee_t guarantee, > - const struct evs_group *groups, > - size_t group_entries, > - const struct iovec *iovec, > - unsigned int iov_len) > -{ > - int i; > - cs_error_t error; > - struct evs_inst *evs_inst; > - struct iovec iov[64]; /* FIXME: what if iov_len > 62 ? use malloc */ > - struct req_lib_evs_mcast_groups req_lib_evs_mcast_groups; > - struct res_lib_evs_mcast_groups res_lib_evs_mcast_groups; > - size_t msg_len = 0; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - for (i = 0; i < iov_len; i++) { > - msg_len += iovec[i].iov_len; > - } > - req_lib_evs_mcast_groups.header.size = sizeof (struct req_lib_evs_mcast_groups) + > - (group_entries * sizeof (struct evs_group)) + msg_len; > - req_lib_evs_mcast_groups.header.id = MESSAGE_REQ_EVS_MCAST_GROUPS; > - req_lib_evs_mcast_groups.guarantee = guarantee; > - req_lib_evs_mcast_groups.msg_len = msg_len; > - req_lib_evs_mcast_groups.group_entries = group_entries; > - > - iov[0].iov_base = (void *)&req_lib_evs_mcast_groups; > - iov[0].iov_len = sizeof (struct req_lib_evs_mcast_groups); > - iov[1].iov_base = (void *) groups; /* cast away const */ > - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); > - memcpy (&iov[2], iovec, iov_len * sizeof (struct iovec)); > - > - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, > - iov_len + 2, > - &res_lib_evs_mcast_groups, > - sizeof (struct res_lib_evs_mcast_groups), CS_IPC_TIMEOUT_MS)); > - > - if (error != CS_OK) { > - goto error_exit; > - } > - > - error = res_lib_evs_mcast_groups.header.error; > - > -error_exit: > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (error); > -} > - > -cs_error_t evs_membership_get ( > - evs_handle_t handle, > - unsigned int *local_nodeid, > - unsigned int *member_list, > - size_t *member_list_entries) > -{ > - cs_error_t error; > - struct evs_inst *evs_inst; > - struct iovec iov; > - struct req_lib_evs_membership_get req_lib_evs_membership_get; > - struct res_lib_evs_membership_get res_lib_evs_membership_get; > - > - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); > - if (error != CS_OK) { > - return (error); > - } > - > - req_lib_evs_membership_get.header.size = sizeof (struct req_lib_evs_membership_get); > - req_lib_evs_membership_get.header.id = MESSAGE_REQ_EVS_MEMBERSHIP_GET; > - > - iov.iov_base = (void *)&req_lib_evs_membership_get; > - iov.iov_len = sizeof (struct req_lib_evs_membership_get); > - > - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, > - &iov, > - 1, > - &res_lib_evs_membership_get, > - sizeof (struct res_lib_evs_membership_get), CS_IPC_TIMEOUT_MS)); > - > - if (error != CS_OK) { > - goto error_exit; > - } > - > - error = res_lib_evs_membership_get.header.error; > - > - /* > - * Copy results to caller > - */ > - if (local_nodeid) { > - *local_nodeid = res_lib_evs_membership_get.local_nodeid; > - } > - *member_list_entries = QB_MIN (*member_list_entries, > - res_lib_evs_membership_get.member_list_entries); > - if (member_list) { > - memcpy (member_list, &res_lib_evs_membership_get.member_list, > - *member_list_entries * sizeof (struct in_addr)); > - } > - > -error_exit: > - hdb_handle_put (&evs_handle_t_db, handle); > - > - return (error); > -} > - > -/** @} */ > diff --git a/lib/libevs.versions b/lib/libevs.versions > deleted file mode 100644 > index abcaf50..0000000 > --- a/lib/libevs.versions > +++ /dev/null > @@ -1,14 +0,0 @@ > -# Version and symbol export for libSaClm.so > - > -COROSYNC_EVS_2.0 { > - global: > - evs_initialize; > - evs_finalize; > - evs_fd_get; > - evs_dispatch; > - evs_join; > - evs_leave; > - evs_mcast_joined; > - evs_mcast_groups; > - evs_membership_get; > -}; > diff --git a/lib/libevs.verso b/lib/libevs.verso > deleted file mode 100644 > index fcdb2e1..0000000 > --- a/lib/libevs.verso > +++ /dev/null > @@ -1 +0,0 @@ > -4.0.0 > diff --git a/man/Makefile.am b/man/Makefile.am > index 54b1e19..b4be1c6 100644 > --- a/man/Makefile.am > +++ b/man/Makefile.am > @@ -57,17 +57,6 @@ autogen_man = cpg_context_get.3 \ > cpg_iteration_finalize.3 \ > cpg_iteration_initialize.3 \ > cpg_iteration_next.3 \ > - evs_dispatch.3 \ > - evs_fd_get.3 \ > - evs_finalize.3 \ > - evs_initialize.3 \ > - evs_join.3 \ > - evs_leave.3 \ > - evs_mcast_groups.3 \ > - evs_mcast_joined.3 \ > - evs_membership_get.3 \ > - evs_context_get.3 \ > - evs_context_set.3 \ > quorum_initialize.3 \ > quorum_finalize.3 \ > quorum_fd_get.3 \ > @@ -139,7 +128,6 @@ dist_man_MANS = corosync.conf.5 \ > corosync-quorumtool.8 \ > corosync_overview.8 \ > cpg_overview.8 \ > - evs_overview.8 \ > quorum_overview.8 \ > votequorum_overview.8 \ > sam_overview.8 \ > diff --git a/man/corosync.conf.5 b/man/corosync.conf.5 > index 3fe4da5..7cd1824 100644 > --- a/man/corosync.conf.5 > +++ b/man/corosync.conf.5 > @@ -214,10 +214,6 @@ of 8982 seems to work for the few large frame devices that have been tested. > Some manufacturers claim large frame support when in fact they support frame > sizes of 4500 bytes. > > -Increasing the MTU from 1500 to 8982 doubles throughput performance from 30MB/sec > -to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth > -directive set to off. > - > When sending multicast traffic, if the network frequently reconfigures, chances are > that some device in the network doesn't support large frames. > > diff --git a/man/corosync_overview.8 b/man/corosync_overview.8 > index fb3766f..999ced9 100644 > --- a/man/corosync_overview.8 > +++ b/man/corosync_overview.8 > @@ -56,9 +56,9 @@ Corosync. Corosync is designed for applications to replicate their state to > up to 16 processors. The processors all contain a replica of the application > state. > > -The corosync project provides two group message APIs called CPG and EVS. > +The corosync project provides a group message API called CPG. > The project developers recommend CPG be used for most applications. The CPG > -service implmeents a closed group messaging model presenting extended virtual > +service implements a closed group messaging model presenting extended virtual > synchrony guarantees. > > To manage conditions where the process executing the CPG application exchange > @@ -168,8 +168,7 @@ The default is /etc/corosync/authkey. > The corosync executive optionally encrypts all messages sent over the network > using the SOBER-128 stream cipher. The corosync executive uses HMAC and SHA1 to > authenticate all messages. The corosync executive library uses SOBER-128 > -as a pseudo random number generator. The EVS library feeds the PRNG using > -the /dev/random Linux device. > +as a pseudo random number generator. > > If membership messages can be captured by intruders, it is possible to execute > a denial of service attack on the cluster. In this scenario, the cluster is > @@ -191,7 +190,6 @@ None that are known. > .SH "SEE ALSO" > .BR corosync.conf (5), > .BR corosync-keygen (8), > -.BR evs_overview (8), > .BR cpg_overview (8), > .BR sam_overview (8) > .PP > diff --git a/man/evs_context_get.3.in b/man/evs_context_get.3.in > deleted file mode 100644 > index 9ef4d3a..0000000 > --- a/man/evs_context_get.3.in > +++ /dev/null > @@ -1,64 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2007 Red Hat, Inc. > -.\" * > -.\" * All rights reserved. > -.\" * > -.\" * Author: Patrick Caulfield <pcaulfie@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. > -.\" */ > -.TH EVS_CONTEXT_GET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_context_get \- Gets the context variable for a EVS instance > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_context_get(evs_handle_t " handle ", void **" context "); > -.SH DESCRIPTION > -The > -.B evs_context_get > -function is used to retrieve the context variable previously stored using > -.B evs_context_set(3) > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_context_set.3.in b/man/evs_context_set.3.in > deleted file mode 100644 > index 19d279f..0000000 > --- a/man/evs_context_set.3.in > +++ /dev/null > @@ -1,66 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2007 Red Hat, Inc. > -.\" * > -.\" * All rights reserved. > -.\" * > -.\" * Author: Patrick Caulfield <pcaulfie@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. > -.\" */ > -.TH EVS_CONTEXT_SET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_context_set \- Sets the context variable for a EVS instance > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_context_set(evs_handle_t " handle ", void *" context "); > -.SH DESCRIPTION > -The > -.B evs_context_set > -function is used to set the context variable for a evs instance. It has no > -meaning insire libevs itself and will not be touched by the library. It can > -be retrieved using > -.B evs_context_get(3) > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_dispatch.3.in b/man/evs_dispatch.3.in > deleted file mode 100644 > index 2624a42..0000000 > --- a/man/evs_dispatch.3.in > +++ /dev/null > @@ -1,107 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_DISPATCH 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_dispatch \- Dispatches callbacks from the EVS service > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_dispatch(evs_handle_t " handle ", evs_dispatch_t *" dispatch_types "); > -.SH DESCRIPTION > -The > -.B evs_dispatch > -function is used to dispatch configuration changes or messages from the > -extended virtual synchrony API. > -.PP > -Each application may have several connections to the EVS API. Each application > -uses the > -.I handle > -argument to uniquely identify the connection. > -.PP > -The > -.I dispatch_types > -argument is used to identify the type of dispatch to execute. The possible types are > -defined by the structure: > - > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef enum { > - CS_DISPATCH_ONE, > - CS_DISPATCH_ALL, > - CS_DISPATCH_BLOCKING > -} cs_dispatch_flags_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The dispatch values have the following meanings: > -.TP > -.B CS_DISPATCH_ONE > -Dispatch atleast one callback, blocking until the callback is dispatched. > -.TP > -.B CS_DISPATCH_ALL > -Dispatch all waiting callbacks without blocking to wait for any callbacks. > -.TP > -.B CS_DISPATCH_BLOCKING > -Dispatch all callbacks blocking indefinately. This is used in a threaded > -program where a thread is created, and then evs_dispatch() is called immediately > -from the created thread to execute callbacks. > -.TP > -.B CS_DISPATCH_ONE_NONBLOCKING > -Dispatch at most one callback. If there is no pending callback, > -CS_ERR_TRY_AGAIN is returned. > - > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_fd_get.3.in b/man/evs_fd_get.3.in > deleted file mode 100644 > index ece9036..0000000 > --- a/man/evs_fd_get.3.in > +++ /dev/null > @@ -1,70 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_FD_GET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_fd_get \- Dispatches callbacks from the EVS service > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_fd_get(evs_handle_t " handle ", int *" fd "); > -.SH DESCRIPTION > -The > -.B evs_fd_get > -function is used to retrieve the file descriptor that may be used with the poll > -system call to determine when > -.B evs_dispatch(3) > -won't block. The > -.I handle > -argument may not be used directly with > -.B poll > -because it is not the file descriptor, but instead an internal identifier used > -by the EVS library. > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_finalize.3.in b/man/evs_finalize.3.in > deleted file mode 100644 > index cc2c697..0000000 > --- a/man/evs_finalize.3.in > +++ /dev/null > @@ -1,66 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_FINALIZE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_finalize \- Terminate a connection to the EVS service > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_finalize(evs_handle_t " handle "); > -.SH DESCRIPTION > -The > -.B evs_finalize > -function is used to close a connection to the extended virtual synchrony API. > -Once the connection is finalized, the handle may not be used again by applications. > -No more callbacks will be dispatched from the > -.B evs_dispatch function. > -.PP > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_initialize.3.in b/man/evs_initialize.3.in > deleted file mode 100644 > index c5bd4dd..0000000 > --- a/man/evs_initialize.3.in > +++ /dev/null > @@ -1,121 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_INITIALIZE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_initialize \- Create a new connection to the EVS service > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_initialize(evs_handle_t *" handle ", evs_callbacks_t *" callbacks "); > -.SH DESCRIPTION > -The > -.B evs_initialize > -function is used to initialize a connection to the extended virtual synchrony API. > -.PP > -Each application may have several connections to the EVS API. Each application > -uses the > -.I handle > -argument to uniquely identify the connection. The > -.I handle > -argument is then used in other function calls to identify the connection to be used > -for communication with the EVS service. > -.PP > -Every time an EVS event occurs, one of the callbacks specified by the argument > -.I callbacks > -is called. The callback functions are described by the following type definitions: > -.PP > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 20n 32n > -typedef void (*evs_deliver_fn_t) ( > - unsigned int nodeid, > - const void *msg, > - size_t msg_len); > - > -typedef void (*evs_confchg_fn_t) ( > - unsigned int *member_list, size_t member_list_entries, > - unsigned int *left_list, size_t left_list_entries, > - unsigned int *joined_list, size_t joined_list_entries); > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The > -.I callbacks > -argument is of the type: > -.IP > -.RS > -.ne 18 > -.nf > -.PP > -typedef struct { > - evs_deliver_fn_t evs_deliver_fn; > - evs_confchg_fn_t evs_confchg_fn; > -} evs_callbacks_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -When a configuration change occurs or a message is to be delivered one of the callbacks > -is called from the > -.B evs_dispatch() > -function. If a configuration change occurs, > -.I evs_confchg_fn > -is called. If a delivery of a message occurs, > -.I evs_deliver_fn > -is called. > - > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_join.3.in b/man/evs_join.3.in > deleted file mode 100644 > index e6338d4..0000000 > --- a/man/evs_join.3.in > +++ /dev/null > @@ -1,105 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_JOIN 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_join \- Joins one or more groups in the EVS library > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_join(evs_handle_t " handle ", evs_group_t *" groups ", int " group_entries "); > -.SH DESCRIPTION > -The > -.B evs_join > -function is used to join one or more groups. When a group is joined, using the > -.B evs_mcast_joined(3) > -function will multicast to the groups joined in the argument > -.I handle. > -Messages that are sent to any of the groups joined to the parameter > -.I handle > -will be delivered by > -.B evs_dispatch(3). > -.PP > -This call may be used more then once on a handle, in which case the joined groups will > -be all of the groups passed to the > -.B evs_join(3) > -function during the lifecycle of the parameter > -.I handle. > -.PP > - > -The argument > -.I groups > -is used to specify the groups to join. A group is a 32 byte key. The key is > -not a string, hence, the entire key is used when joining the channel. For that reason > -the entire group should be initialized. > -.PP > -The argument > -.I group_entries > -specifies how many entries are located in the groups argument. > - > -The > -.I groups > -argument is of the type evs_group_t which is defined by the structure: > - > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef struct { > - char key[32]; > -} evs_groups_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_leave.3.in b/man/evs_leave.3.in > deleted file mode 100644 > index 09ffe8e..0000000 > --- a/man/evs_leave.3.in > +++ /dev/null > @@ -1,100 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_LEAVE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_leave \- Leave one or more groups in the EVS library > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_leave(evs_handle_t " handle ", evs_group_t *" groups ", int group_entries); > -.SH DESCRIPTION > -The > -.B evs_leave > -function is used to leave one or more groups. The joined groups are used with > -.B evs_mcast_joined(3) > -function to multicast to the groups joined in the argument > -.I handle. > -Messages that are sent to any of the joined groups to the parameter > -.I handle > -will be delivered by > -.B evs_dispatch(3). > -.PP > -This call may be used more then once on a handle. > -.PP > - > -The argument > -.I groups > -is used to specify the groups to leave. A group is a 32 byte key. The key is > -not a string, hence, the entire key is used when leaveing the channel. For that reason > -the entire group should be initialized. > -.PP > -The argument > -.I group_entries > -specifies how many entries are located in the groups argument. > - > -The > -.I groups > -argument is of the type evs_group_t which is defined by the structure: > - > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef struct { > - char key[32]; > -} evs_groups_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_mcast_groups.3.in b/man/evs_mcast_groups.3.in > deleted file mode 100644 > index 4bb5c00..0000000 > --- a/man/evs_mcast_groups.3.in > +++ /dev/null > @@ -1,164 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_MCAST_GROUPS 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_join \- Multicast a message to selected groups > -.SH SYNOPSIS > -.B #include <sys/uio.h> > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_mcast_groups(evs_handle_t " handle ", evs_guraantee_t " guarantee ", evs_group_t *" groups ", int group_entries, struct iovec *" iovec ", int " iov_len "); > -.SH DESCRIPTION > -The > -.B evs_mcast_groups(3) > -function multicasts a message to all the groups specified in the arguemnt > -.I groups. > -Messages are delivered to all processors in the system that are described by the current > -configuration. > -.PP > -The argument > -.I handle > -describes a handle created with > -.B evs_initialize(3). > -.PP > -The argument > -.I guarantee > -requests a delivery guarantee for the message to be sent. The evs_guarantee_t type is > -defined by: > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef enum { > - EVS_TYPE_UNORDERED, /* not implemented */ > - EVS_TYPE_FIFO, /* same as agreed */ > - EVS_TYPE_AGREED, /* implemented */ > - EVS_TYPE_SAFE /* not implemented */ > -} evs_guarantee_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The meanings of the evs_guarantee_t typedef are: > -.TP > -.B EVS_GUARANTEE_UNORDERED > -Messages are guaranteed to be delivered, but with no particular order. This > -mode is unimplemented in the EVS library. > -.TP > -.B EVS_GUARANTEE_FIFO > -Messages are guaranteed to be delivered in first sent first delivery order > -from one one. In fact, this guarantee is actually the AGREED guarantee. > -.TP > -.B EVS_GUARANTEE_AGREED > -All processors must agree on the order of delivery. If a message is sent > -from two or more processors at about the same time, the delivery will occur > -in the same order to all processors. > -.TP > -.B EVS_GUARANTEE_SAFE > -All processors must agree on the order of delivery. Further all processors > -must have a copy of the message before any delivery takes place. This mode is > -unimplemented in the EVS library. > -.PP > -The > -.I groups > -argument is of the type evs_group_t which is defined by the structure: > - > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef struct { > - char key[32]; > -} evs_groups_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The > -.I group_entries > -argument describes the number of entries in the > -.I group > -argument. > -.PP > - > -The > -.I iovec > -argument describes the scatter/gather list which is used to transmit a message. This > -is a standard socket structure described by: > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -struct iovec > -{ > - void *iov_base; /* Pointer to data. */ > - unsigned int iov_len; /* Length of data. */ > -}; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The > -.I iovlen > -argument describes the number of entires in the > -.I iovec > -argument. > - > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_leave (3), > -.BR evs_join (3), > -.BR evs_mcast_joined (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_mcast_joined.3.in b/man/evs_mcast_joined.3.in > deleted file mode 100644 > index 4d7d78e..0000000 > --- a/man/evs_mcast_joined.3.in > +++ /dev/null > @@ -1,137 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_MCAST_JOINED 3 3004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_join \- Multicasts to all groups joined to an handle > -.SH SYNOPSIS > -.B #include <sys/uio.h> > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_mcast_joined(evs_handle_t " handle ", evs_guraantee_t " guarantee ", struct iovec *" iovec ", int " iov_len "); > -.SH DESCRIPTION > -The > -.B evs_mcast_joined > -function is multicast a message to all the groups that have been joined with the > -.B evs_join(3) > -function for the argument > -.I handle. > -Messages that are sent to any of the groups joined to the parameter > -.I handle > -will be delivered to all processors in the system. > -.PP > -The argument > -.I guarantee > -requests a delivery guarantee for the message to be sent. The evs_guarantee_t type is > -defined by: > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -typedef enum { > - EVS_TYPE_UNORDERED, /* not implemented */ > - EVS_TYPE_FIFO, /* same as agreed */ > - EVS_TYPE_AGREED, /* implemented */ > - EVS_TYPE_SAFE /* not implemented */ > -} evs_guarantee_t; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The meanings of the evs_guarantee_t typedef are: > -.TP > -.B EVS_GUARANTEE_UNORDERED > -Messages are guaranteed to be delivered, but with no particular order. This > -mode is unimplemented in the EVS library. > -.TP > -.B EVS_GUARANTEE_FIFO > -Messages are guaranteed to be delivered in first sent first delivery order > -from one one. In fact, this guarantee is actually the AGREED guarantee. > -.TP > -.B EVS_GUARANTEE_AGREED > -All processors must agree on the order of delivery. If a message is sent > -from two or more processors at about the same time, the delivery will occur > -in the same order to all processors. > -.TP > -.B EVS_GUARANTEE_SAFE > -All processors must agree on the order of delivery. Further all processors > -must have a copy of the message before any delivery takes place. This mode is > -unimplemented in the EVS library. > -.PP > -The > -.I iovec > -argument describes the scatter/gather list which is used to transmit a message. This > -is a standard socket structure described by: > -.IP > -.RS > -.ne 18 > -.nf > -.ta 4n 30n 33n > -struct iovec > -{ > - void *iov_base; /* Pointer to data. */ > - unsigned int iov_len; /* Length of data. */ > -}; > -.ta > -.fi > -.RE > -.IP > -.PP > -.PP > -The > -.I iovlen > -argument describes the number of entires in the > -.I iovec > -argument. > - > -.SH RETURN VALUE > -This call returns the CS_OK value if successful, otherwise an error is returned. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_leave (3), > -.BR evs_join (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_membership_get.3.in b/man/evs_membership_get.3.in > deleted file mode 100644 > index 657b243..0000000 > --- a/man/evs_membership_get.3.in > +++ /dev/null > @@ -1,74 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_JOIN 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_join \- Joins one or more groups in the EVS library > -.SH SYNOPSIS > -.B #include <corosync/evs.h> > -.sp > -.BI "int evs_membership_get(evs_handle_t " handle ", unsigned int *" local_nodeid ", unsigned int *" member_list ", int *" member_list_entries "); > -.SH DESCRIPTION > -The > -.B evs_membership_get > -function is used to determine the current processors in the configuration and also > -the local processor identifier. > -The argument > -.I handle > -is used to reference the evs instantiation. > -The argument > -.I local_nodeid > -will return the local node id of the processor. > -The argument > -.I member_list > -will return the list of processors in the current membership. > -The argument > -.I member_list_entries > -should be set with the size of member_list and will return the size of the > -member_list after return from the function. > -.PP > -.SH ERRORS > -The errors are undocumented. > -.SH "SEE ALSO" > -.BR evs_overview (8), > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > -.PP > diff --git a/man/evs_overview.8 b/man/evs_overview.8 > deleted file mode 100644 > index d12c0c1..0000000 > --- a/man/evs_overview.8 > +++ /dev/null > @@ -1,185 +0,0 @@ > -.\"/* > -.\" * Copyright (c) 2004 MontaVista Software, 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. > -.\" */ > -.TH EVS_OVERVIEW 8 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" > -.SH NAME > -evs_overview \- EvS Library Overview > -.SH OVERVIEW > -The EVS library is delivered with the corosync project. This library is used > -to create distributed applications that operate properly during partitions, merges, > -and faults. > -.PP > -The library provides a mechanism to: > -* handle abstraction for multiple instances of an EVS library in one application > -* Deliver messages > -* Deliver configuration changes > -* join one or more groups > -* leave one or more groups > -* send messages to one or more groups > -* send messages to currently joined groups > -.PP > -The EVS library implements a messaging model known as Extended Virtual Synchrony. > -This model allows one sender to transmit to many receivers using standard UDP/IP. > -UDP/IP is unreliable and unordered, so the EVS library applies ordering and reliability > -to messages. Hardware multicast is used to avoid duplicated packets with two or more > -receivers. Erroneous messages are corrected automatically by the library. > -.PP > -Certain guarantees are provided by the EVS library. These guarantees are related to > -message delivery and configuration change delivery. > -.SH DEFINITIONS > -.TP > -.B multicast > -A multicast occurs when a network interface card sends a UDP packet to multiple > -receivers simulatenously. > -.TP > -.B processor > -A processor is the entity that executes the extended virtual synchrony algorithms. > -.TP > -.B configuration > -A configuration is the current description of the processors executing the extended > -virtual syncrhony algorithm. > -.TP > -.B configuration change > -A configuration change occurs when a new configuration is delivered. > -.TP > -.B partition > -A partition occurs when a configuration splits into two or more configurations, or > -a processor fails or is stopped and leaves the configuration. > -.TP > -.B merge > -A merge occurs when two or more configurations join into a larger new configuration. When > -a new processor starts up, it is treated as a configuration with only one processor > -and a merge occurs. > -.TP > -.B fifo ordering > -A message is FIFO ordered when one sender and one receiver agree on the order of the > -messages sent. > -.TP > -.B agreed ordering > -A message is AGREED ordered when all processors agree on the order of the messages sent. > -.TP > -.B safe ordering > -A message is SAFE ordered when all processors agree on the order of messages sent and > -those messages are not delivered until all processors have a copy of the message to > -deliver. > -.TP > -.B virtual syncrhony > -Virtual syncrhony is obtained when all processors agree on the order of messages > -sent and configuration changes sent for each new configuration. > -.SH USING VIRTUAL SYNCHRONY > -The virtual synchrony messaging model has many benefits for developing distributed > -applications. Applications designed using replication have the most benefits. Applications > -that must be able to partition and merge also benefit from the virtual synchrony messaging > -model. > -.PP > -All applications receive a copy of transmitted messages even if there are errors on the > -transmission media. This allows optimiziations when every processor must receive a copy > -of the message for replication. > -.PP > -All messages are ordered according to agreed ordering. This mechanism allows the avoidance > -of race conditions. Consider a lock service implemented over several processors. Two > -requests occur at the same time on two seperate processors. The requests are ordered for > -every processor in the same order and delivered to the processors. Then all processors > -will get request A before request B and can reject request B. Any type of creation or > -deletion of a shared data structure can benefit from this mechanism. > -.PP > -Self delivery ensures that messages that are sent by a processor are also delivered back > -to that processor. This allows the processor sending the message to execute logic when > -the message is self delivered according to agreed ordering and the virtual synchrony rules. > -It also permits all logic to be placed in one message handler instead of two seperate places. > -.PP > -Virtual Synchrony allows the current configuration to be used to make decisions in partitions > -and merges. Since the configuration is sent in the stream of messages to the application, > -the application can alter its behavior based upon the configuration changes. > -.SH ARCHITECTURE AND ALGORITHM > -The EVS library is a thin IPC interface to the corosync executive. The corosync executive > -provides services for the SA Forum AIS libraries as well as the EVS library. > -.PP > -The corosync executive uses a ring protocol and membership protocol to send messages > -according to the semantics required by extended virtual synchrony. The ring protocol > -creates a virtual ring of processors. A token is rotated around the ring of processors. > -When the token is possessed by a processor, that processor may multicast messages to > -other processors in the system. > -.PP > -The token is called the ORF token (for ordering, reliability, flow control). The ORF > -token orders all messages by increasing a sequence number every time a message is > -multicasted. In this way, an ordering is placed on all messages that all processors > -agree to. The token also contains a retransmission list. If a token is received by > -a processor that has not yet received a message it should have, a message sequence > -number is added to the retransmission list. A processor that has a copy of the message > -then retransmits the message. The ORF token provides configuration-wide flow control > -by tracking the number of messages sent and limiting the number of messages that may > -be sent by one processor on each posession of the token. > -.PP > -The membership protocol is responsible for ring formation and detecting when a processor > -within a ring has failed. If the token fails to make a rotation within a timeout period > -known as the token rotation timeout, the membership protocol will form a new ring. > -If a new processor starts, it will also form a new ring. Two or more configurations > -may be used to form a new ring, allowing many partitions to merge together into one > -new configuration. > -.SH PERFORMANCE > -The EVS library obtains 8.5MB/sec throughput on 100 mbit network links with > -many processors. Larger messages obtain better throughput results because the > -time to access Ethernet is about the same for a small message as it is for a > -larger message. Smaller messages obtain better messages per second, because the > -time to send a message is not exactly the same. > -.PP > -80% of CPU utilization occurs because of encryption and authentication. The corosync > -can be built without encryption and authentication for those with no security > -requirements and low CPU utilization requirements. Even without encryption or > -authentication, under heavy load, processor utilization can reach 25% on 1.5 GHZ > -CPU processors. > -.PP > -The current corosync executive supports 16 processors, however, support for more processors is possible by changing defines in the corosync executive. This is untested, however. > -.SH SECURITY > -The EVS library encrypts all messages sent over the network using the SOBER-128 > -stream cipher. The EVS library uses HMAC and SHA1 to authenticate all messages. > -The EVS library uses SOBER-128 as a pseudo random number generator. The EVS > -library feeds the PRNG using the /dev/random Linux device. > -.SH BUGS > -This software is not yet production, so there may still be some bugs. But it appears > -there are very few since nobody reports any unknown bugs at this point. > -.SH "SEE ALSO" > -.BR evs_initialize (3), > -.BR evs_finalize (3), > -.BR evs_fd_get (3), > -.BR evs_dispatch (3), > -.BR evs_join (3), > -.BR evs_leave (3), > -.BR evs_mcast_joined (3), > -.BR evs_mcast_groups (3), > -.BR evs_mmembership_get (3) > -.BR evs_context_get (3) > -.BR evs_context_set (3) > - > -.PP > diff --git a/man/index.html b/man/index.html > index 793d511..6ce0ac7 100644 > --- a/man/index.html > +++ b/man/index.html > @@ -138,49 +138,6 @@ > Description of the cpg_iteration_finalize interface. > <br> > > - <h3>EVS service</h3> > - > - <a href="evs_overview.8.html">evs_overview(8)</a>: > - Overview of the evs extended virtual synchrony group > - communication toolkit. > - <br> > - > - <a href="evs_initialize.3.html">evs_initialize(3)</a>: > - Description of the evs_initialize interface. > - <br> > - > - <a href="evs_finalize.3.html">evs_finalize(3)</a>: > - Description of the evs_finalize interface. > - <br> > - > - <a href="evs_dispatch.3.html">evs_dispatch(3)</a>: > - Description of the evs_dispatch interface. > - <br> > - > - <a href="evs_fd_get.3.html">evs_fd_get(3)</a>: > - Description of the evs_fd_get interface. > - <br> > - > - <a href="evs_join.3.html">evs_join(3)</a>: > - Description of the evs_join interface. > - <br> > - > - <a href="evs_leave.3.html">evs_leave(3)</a>: > - Description of the evs_leave interface. > - <br> > - > - <a href="evs_mcast_groups.3.html">evs_mcast_groups(3)</a>: > - Description of the evs_mcast_groups interface. > - <br> > - > - <a href="evs_mcast_joined.3.html">evs_mcast_joined(3)</a>: > - Description of the evs_mcast_joined interface. > - <br> > - > - <a href="evs_membership_get.3.html">evs_membership_get(3)</a>: > - Description of the evs_membership_get interface. > - <br> > - > <h3>SAM service</h3> > > <a href="sam_overview.8.html">sam_overview(8)</a>: > diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am > index ac2f974..b3db16c 100644 > --- a/pkgconfig/Makefile.am > +++ b/pkgconfig/Makefile.am > @@ -32,7 +32,7 @@ MAINTAINERCLEANFILES = Makefile.in > > EXTRA_DIST = libtemplate.pc.in corosync.pc.in > > -LIBS = cfg cpg evs quorum \ > +LIBS = cfg cpg quorum \ > totem_pg votequorum sam cmap corosync_common > > target_LIBS = $(LIBS:%=lib%.pc) > diff --git a/test/.gitignore b/test/.gitignore > index d0b2f27..11771ff 100644 > --- a/test/.gitignore > +++ b/test/.gitignore > @@ -1,8 +1,6 @@ > cpgbench > cpgbound > cpgverify > -evsbench > -evsverify > logsys_s > logsys_t1 > logsys_t2 > @@ -12,7 +10,6 @@ stress_cpgcontext > stress_cpgfdget > testcpg > testcpg2 > -testevs > testquorum > testsam > testvotequorum1 > diff --git a/test/Makefile.am b/test/Makefile.am > index 647aad2..a7895f3 100644 > --- a/test/Makefile.am > +++ b/test/Makefile.am > @@ -35,7 +35,7 @@ INCLUDES = -I$(top_builddir)/include/corosync -I$(top_srcdir)/include > > EXTRA_DIST = ploadstart.sh > > -noinst_PROGRAMS = testevs evsbench evsverify cpgverify testcpg testcpg2 cpgbench \ > +noinst_PROGRAMS = cpgverify testcpg testcpg2 cpgbench \ > testquorum testvotequorum1 testvotequorum2 \ > stress_cpgfdget stress_cpgcontext cpgbound testsam \ > testcpgzc cpgbenchzc testzcgc stress_cpgzc > @@ -44,8 +44,6 @@ noinst_SCRIPTS = ploadstart > > COMMON_OPTS = -L../lib -L../common_lib -Wl,-rpath,../common_lib > > -testevs_LDADD = -levs $(LIBQB_LIBS) > -testevs_LDFLAGS = $(COMMON_OPTS) > testcpg_LDADD = -lcpg $(LIBQB_LIBS) > testcpg_LDFLAGS = $(COMMON_OPTS) > testcpg2_LDADD = -lcpg $(LIBQB_LIBS) > @@ -66,14 +64,10 @@ testvotequorum1_LDADD = -lvotequorum $(LIBQB_LIBS) > testvotequorum1_LDFLAGS = $(COMMON_OPTS) > testvotequorum2_LDADD = -lvotequorum $(LIBQB_LIBS) > testvotequorum2_LDFLAGS = $(COMMON_OPTS) > -evsverify_LDADD = -levs -ltotem_pg $(LIBQB_LIBS) > -evsverify_LDFLAGS = $(COMMON_OPTS) -L../exec > cpgverify_LDADD = -lcpg -ltotem_pg $(LIBQB_LIBS) > cpgverify_LDFLAGS = $(COMMON_OPTS) -L../exec > cpgbound_LDADD = -lcpg $(LIBQB_LIBS) > cpgbound_LDFLAGS = $(COMMON_OPTS) > -evsbench_LDADD = -levs $(LIBQB_LIBS) > -evsbench_LDFLAGS = $(COMMON_OPTS) > cpgbench_LDADD = -lcpg $(LIBQB_LIBS) > cpgbench_LDFLAGS = $(COMMON_OPTS) > cpgbenchzc_LDADD = -lcpg -lcorosync_common $(LIBQB_LIBS) > @@ -86,8 +80,7 @@ ploadstart: ploadstart.sh > chmod 755 $@ > > LINT_FILES1:=$(filter-out sa_error.c, $(wildcard *.c)) > -LINT_FILES2:=$(filter-out testevsth.c, $(LINT_FILES1)) > -LINT_FILES:=$(filter-out testparse.c, $(LINT_FILES2)) > +LINT_FILES:=$(filter-out testparse.c, $(LINT_FILES1)) > > lint: > -for f in $(LINT_FILES) ; do echo Splint $$f ; splint $(INCLUDES) $(LINT_FLAGS) $(CFLAGS) $$f ; done > diff --git a/test/evsbench.c b/test/evsbench.c > deleted file mode 100644 > index 786e019..0000000 > --- a/test/evsbench.c > +++ /dev/null > @@ -1,197 +0,0 @@ > -#define _BSD_SOURCE > -/* > - * Copyright (c) 2004 MontaVista Software, 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. > - */ > - > -#include <config.h> > - > -#include <stdio.h> > -#include <stdlib.h> > -#include <signal.h> > -#include <unistd.h> > -#include <errno.h> > -#include <unistd.h> > -#include <time.h> > -#include <sys/time.h> > -#include <sys/types.h> > -#include <sys/socket.h> > -#include <sys/select.h> > -#include <sys/un.h> > -#include <sys/socket.h> > -#include <netinet/in.h> > -#include <arpa/inet.h> > - > -#include <corosync/corotypes.h> > -#include <corosync/evs.h> > - > -#ifdef COROSYNC_SOLARIS > -#define timersub(a, b, result) \ > - do { \ > - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ > - (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ > - if ((result)->tv_usec < 0) { \ > - --(result)->tv_sec; \ > - (result)->tv_usec += 1000000; \ > - } \ > - } while (0) > -#endif > - > -volatile static int alarm_notice = 0; > - > -static void evs_deliver_fn ( > - hdb_handle_t handle, > - unsigned int nodeid, > - const void *msg, > - size_t msg_len) > -{ > -} > - > -static void evs_confchg_fn ( > - hdb_handle_t handle, > - 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 evs_ring_id *ring_id) > -{ > - int i; > - > - printf ("CONFIGURATION CHANGE\n"); > - printf ("--------------------\n"); > - printf ("New configuration\n"); > - for (i = 0; i < member_list_entries; i++) { > - printf ("%x\n", member_list[i]); > - } > - printf ("Members Left:\n"); > - for (i = 0; i < left_list_entries; i++) { > - printf ("%x\n", left_list[i]); > - } > - printf ("Members Joined:\n"); > - for (i = 0; i < joined_list_entries; i++) { > - printf ("%x\n", joined_list[i]); > - } > -} > - > -static evs_callbacks_t callbacks = { > - evs_deliver_fn, > - evs_confchg_fn > -}; > - > -struct evs_group groups[3] = { > - { "key1" }, > - { "key2" }, > - { "key3" } > -}; > - > -static char buffer[200000]; > - > -static struct iovec iov = { > - .iov_base = buffer, > - .iov_len = sizeof (buffer) > -}; > - > -static void evs_benchmark (evs_handle_t handle, > - int write_size) > -{ > - struct timeval tv1, tv2, tv_elapsed; > - cs_error_t result; > - int write_count = 0; > - > - /* > - * Run benchmark for 10 seconds > - */ > - alarm (10); > - gettimeofday (&tv1, NULL); > - > - iov.iov_len = write_size; > - do { > - sprintf (buffer, "This is message %d\n", write_count); > - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, &iov, 1); > - > - if (result != CS_ERR_TRY_AGAIN) { > - write_count += 1; > - } > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } while (alarm_notice == 0); > - gettimeofday (&tv2, NULL); > - timersub (&tv2, &tv1, &tv_elapsed); > - > - printf ("%5d Writes ", write_count); > - printf ("%5d bytes per write ", write_size); > - printf ("%7.3f Seconds runtime ", > - (tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0))); > - printf ("%9.3f TP/s ", > - ((float)write_count) / (tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0))); > - printf ("%7.3f MB/s.\n", > - ((float)write_count) * ((float)write_size) / ((tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0)) * 1000000.0)); > - > - alarm_notice = 0; > -} > - > -static void sigalrm_handler (int num) > -{ > - alarm_notice = 1; > -} > - > -static void sigintr_handler (int num) __attribute__((__noreturn__)); > -static void sigintr_handler (int num) > -{ > - exit (1); > -} > - > -int main (void) { > - int size; > - int i; > - cs_error_t result; > - evs_handle_t handle; > - > - signal (SIGALRM, sigalrm_handler); > - signal (SIGINT, sigintr_handler); > - > - > - result = evs_initialize (&handle, &callbacks); > - printf ("Init result %d\n", result); > - result = evs_join (handle, groups, 3); > - printf ("Join result %d\n", result); > - > - size = 1; > - > - for (i = 0; i < 225; i++) { /* number of repetitions - up to 50k */ > - evs_benchmark (handle, size); > - /* > - * Adjust count to 95% of previous count > - * Adjust bytes to write per checkpoint up by 1500 > - */ > - size += 1000; > - } > - return (0); > -} > diff --git a/test/evsverify.c b/test/evsverify.c > deleted file mode 100644 > index 709bdd6..0000000 > --- a/test/evsverify.c > +++ /dev/null > @@ -1,188 +0,0 @@ > -/* > - * Copyright (c) 2004 MontaVista Software, Inc. > - * Copyright (c) 2006-2007, 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. > - */ > - > -#include <config.h> > - > -#include <stdio.h> > -#include <stdlib.h> > -#include <sys/socket.h> > -#include <netinet/in.h> > -#include <arpa/inet.h> > -#include <errno.h> > -#include <string.h> > -#include <corosync/corotypes.h> > -#include <corosync/evs.h> > -#include "../exec/crypto.h" > - > -const char *delivery_string; > -struct my_msg { > - unsigned int msg_size; > - unsigned char sha1[20]; > - unsigned char buffer[0]; > -}; > - > -static int deliveries = 0; > -static void evs_deliver_fn ( > - hdb_handle_t handle, > - unsigned int nodeid, > - const void *m, > - size_t msg_len) > -{ > - const struct my_msg *msg2 = m; > - unsigned char sha1_compare[20]; > - hash_state sha1_hash; > - unsigned int i; > - > - printf ("API '%s' msg '%s'\n", delivery_string, msg2->buffer); > - sha1_init (&sha1_hash); > - sha1_process (&sha1_hash, msg2->buffer, msg2->msg_size); > - sha1_done (&sha1_hash, sha1_compare); > -printf ("SIZE %d HASH: ", msg2->msg_size); > -for (i = 0; i < 20; i++) { > -printf ("%x", sha1_compare[i]); > -} > -printf ("\n"); > - if (memcmp (sha1_compare, msg2->sha1, 20) != 0) { > - printf ("incorrect hash\n"); > - exit (1); > - } > - deliveries++; > -} > - > -static void evs_confchg_fn ( > - hdb_handle_t handle, > - 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 evs_ring_id *ring_id) > -{ > - int i; > - > - printf ("CONFIGURATION CHANGE\n"); > - printf ("--------------------\n"); > - printf ("New configuration\n"); > - for (i = 0; i < member_list_entries; i++) { > - printf ("%x\n", member_list[i]); > - } > - printf ("Members Left:\n"); > - for (i = 0; i < left_list_entries; i++) { > - printf ("%x\n", left_list[i]); > - } > - printf ("Members Joined:\n"); > - for (i = 0; i < joined_list_entries; i++) { > - printf ("%x\n", joined_list[i]); > - } > -} > - > -static evs_callbacks_t callbacks = { > - evs_deliver_fn, > - evs_confchg_fn > -}; > - > -struct evs_group groups[3] = { > - { "key1" }, > - { "key2" }, > - { "key3" } > -}; > - > -static unsigned char buffer[200000]; > -int main (void) > -{ > - evs_handle_t handle; > - cs_error_t result; > - unsigned int i = 0, j; > - int fd; > - unsigned int member_list[32]; > - unsigned int local_nodeid; > - size_t member_list_entries = 32; > - struct my_msg msg; > - hash_state sha1_hash; > - struct iovec iov[2]; > - > - result = evs_initialize (&handle, &callbacks); > - if (result != CS_OK) { > - printf ("Couldn't initialize EVS service %d\n", result); > - exit (0); > - } > - > - result = evs_membership_get (handle, &local_nodeid, > - member_list, &member_list_entries); > - printf ("Current membership from evs_membership_get entries %lu\n", > - (unsigned long int) member_list_entries); > - for (i = 0; i < member_list_entries; i++) { > - printf ("member [%d] is %x\n", i, member_list[i]); > - } > - printf ("local processor from evs_membership_get %x\n", local_nodeid); > - > - printf ("Init result %d\n", result); > - result = evs_join (handle, groups, 3); > - printf ("Join result %d\n", result); > - result = evs_leave (handle, &groups[0], 1); > - printf ("Leave result %d\n", result); > - delivery_string = "evs_mcast_joined"; > - > - iov[0].iov_base = (void *)&msg; > - iov[0].iov_len = sizeof (struct my_msg); > - iov[1].iov_base = (void *)buffer; > - > - /* > - * Demonstrate evs_mcast_joined > - */ > - for (i = 0; i < 1000000000; i++) { > - msg.msg_size = 100 + rand() % 100000; > - iov[1].iov_len = msg.msg_size; > - for (j = 0; j < msg.msg_size; j++) { > - buffer[j] = j; > - } > - sprintf ((char *)buffer, > - "evs_mcast_joined: This is message %12d", i); > - sha1_init (&sha1_hash); > - sha1_process (&sha1_hash, buffer, msg.msg_size); > - sha1_done (&sha1_hash, msg.sha1); > -try_again_one: > - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, > - iov, 2); > - if (result == CS_ERR_TRY_AGAIN) { > - goto try_again_one; > - } > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } > - > - evs_fd_get (handle, &fd); > - > - evs_finalize (handle); > - > - return (0); > -} > diff --git a/test/testevs.c b/test/testevs.c > deleted file mode 100644 > index 0730ac6..0000000 > --- a/test/testevs.c > +++ /dev/null > @@ -1,193 +0,0 @@ > -/* > - * Copyright (c) 2004 MontaVista Software, Inc. > - * Copyright (c) 2006-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. > - */ > - > -#include <config.h> > - > -#include <stdio.h> > -#include <stdlib.h> > -#include <sys/socket.h> > -#include <netinet/in.h> > -#include <arpa/inet.h> > -#include <errno.h> > -#include <corosync/corotypes.h> > -#include <corosync/evs.h> > - > -#include <qb/qblog.h> > - > -static const char *delivery_string; > - > -static int deliveries = 0; > -static void evs_deliver_fn ( > - hdb_handle_t handle, > - unsigned int nodeid, > - const void *msg, > - size_t msg_len) > -{ > - const char *buf = msg; > - > - printf ("API '%s' msg '%s'\n", delivery_string, buf); > - deliveries++; > -} > - > -static void evs_confchg_fn ( > - hdb_handle_t handle, > - 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 evs_ring_id *ring_id) > -{ > - int i; > - > - printf ("CONFIGURATION CHANGE\n"); > - printf ("--------------------\n"); > - printf ("New configuration\n"); > - for (i = 0; i < member_list_entries; i++) { > - printf ("%x\n", member_list[i]); > - } > - printf ("Members Left:\n"); > - for (i = 0; i < left_list_entries; i++) { > - printf ("%x\n", left_list[i]); > - } > - printf ("Members Joined:\n"); > - for (i = 0; i < joined_list_entries; i++) { > - printf ("%x\n", joined_list[i]); > - } > -} > - > -static evs_callbacks_t callbacks = { > - evs_deliver_fn, > - evs_confchg_fn > -}; > - > -static struct evs_group groups[3] = { > - { "key1" }, > - { "key2" }, > - { "key3" } > -}; > - > -static char buffer[2000]; > -struct iovec iov = { > - .iov_base = buffer, > - .iov_len = sizeof (buffer) > -}; > - > -int main (void) > -{ > - evs_handle_t handle; > - cs_error_t result; > - int i = 0; > - int fd; > - unsigned int member_list[32]; > - unsigned int local_nodeid; > - size_t member_list_entries = 32; > - > - qb_log_init("testevs", LOG_USER, LOG_ERR); > - qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE); > - qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD, > - QB_LOG_FILTER_FILE, "*", LOG_TRACE); > - qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_ENABLED, QB_TRUE); > - qb_log_format_set(QB_LOG_STDERR, "[%p] %f %b"); > - > - result = evs_initialize (&handle, &callbacks); > - if (result != CS_OK) { > - printf ("Couldn't initialize EVS service %d\n", result); > - exit (0); > - } > - > - result = evs_membership_get (handle, &local_nodeid, > - member_list, &member_list_entries); > - printf ("Current membership from evs_membership_get entries %lu\n", > - (unsigned long int) member_list_entries); > - for (i = 0; i < member_list_entries; i++) { > - printf ("member [%d] is %x\n", i, member_list[i]); > - } > - printf ("local processor from evs_membership_get %x\n", local_nodeid); > - > - printf ("Init result %d\n", result); > - result = evs_join (handle, groups, 3); > - printf ("Join result %d\n", result); > - delivery_string = "evs_mcast_joined"; > - > - /* > - * Demonstrate evs_mcast_joined > - */ > - for (i = 0; i < 500; i++) { > - sprintf (buffer, "evs_mcast_joined: This is message %d", i); > -#ifdef COMPILE_OUT > - sprintf (buffer, > - "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", > - i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, > - i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i); > -#endif > -try_again_one: > - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, > - &iov, 1); > - if (result == CS_ERR_TRY_AGAIN) { > - goto try_again_one; > - } > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } > - > - do { > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } while (deliveries < 20); > - /* > - * Demonstrate evs_mcast_joined > - */ > - delivery_string = "evs_mcast_groups"; > - for (i = 0; i < 500; i++) { > - sprintf (buffer, "evs_mcast_groups: This is message %d", i); > -try_again_two: > - result = evs_mcast_groups (handle, EVS_TYPE_AGREED, > - &groups[1], 1, &iov, 1); > - if (result == CS_ERR_TRY_AGAIN) { > - goto try_again_two; > - } > - > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } > - /* > - * Flush any pending callbacks > - */ > - do { > - result = evs_dispatch (handle, CS_DISPATCH_ALL); > - } while (deliveries < 500); > - > - evs_fd_get (handle, &fd); > - > - evs_finalize (handle); > - > - return (0); > -} > diff --git a/test/testevsth.c b/test/testevsth.c > deleted file mode 100644 > index 14da44f..0000000 > --- a/test/testevsth.c > +++ /dev/null > @@ -1,186 +0,0 @@ > -/* > - * Copyright (c) 2004 MontaVista Software, 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. > - */ > - > -#include <config.h> > - > -#include <stdio.h> > -#include <stdlib.h> > -#include <sys/socket.h> > -#include <netinet/in.h> > -#include <arpa/inet.h> > -#include <errno.h> > -#include <pthread.h> > -#include "../include/evs.h" > - > -char *delivery_string; > - > -#define CALLBACKS 200000 > -int callback_count = 0; > -void evs_deliver_fn (struct in_addr source_addr, const void *msg, size_t msg_len) > -{ > -#ifdef PRINT_OUTPUT > - char *buf; > - buf += 100000; > - printf ("Delivery callback\n"); > - printf ("callback %d '%s' msg '%s'\n", callback_count, delivery_string, buf); > -#endif > - callback_count += 1; > - if (callback_count % 50 == 0) { > - printf ("Callback %d\n", callback_count); > - } > -} > - > -void evs_confchg_fn ( > - const struct in_addr *member_list, size_t member_list_entries, > - const struct in_addr *left_list, size_t left_list_entries, > - const struct in_addr *joined_list, size_t joined_list_entries) > -{ > - int i; > - > - printf ("CONFIGURATION CHANGE\n"); > - printf ("--------------------\n"); > - printf ("New configuration\n"); > - for (i = 0; i < member_list_entries; i++) { > - printf ("%s\n", inet_ntoa (member_list[i])); > - } > - printf ("Members Left:\n"); > - for (i = 0; i < left_list_entries; i++) { > - printf ("%s\n", inet_ntoa (left_list[i])); > - } > - printf ("Members Joined:\n"); > - for (i = 0; i < joined_list_entries; i++) { > - printf ("%s\n", inet_ntoa (joined_list[i])); > - } > -} > - > -evs_callbacks_t callbacks = { > - evs_deliver_fn, > - evs_confchg_fn > -}; > - > -struct evs_group groups[3] = { > - { "key1" }, > - { "key2" }, > - { "key3" } > -}; > - > -char buffer[1000]; > -struct iovec iov = { > - .iov_base = buffer, > - .iov_len = sizeof (buffer) > -}; > - > -void *th_dispatch (void *arg) > -{ > - cs_error_t result; > - evs_handle_t handle = *(evs_handle_t *)arg; > - > - printf ("THREAD DISPATCH starting.\n"); > - result = evs_dispatch (handle, CS_DISPATCH_BLOCKING); > - printf ("THREAD DISPATCH return result is %d\n", result); > - return (0); > -} > - > -static struct sched_param sched_param = { > - sched_priority: 99 > -}; > - > -int main (void) > -{ > - evs_handle_t handle; > - cs_error_t result; > - int i = 0; > - pthread_t dispatch_thread; > - pthread_attr_t dispatch_thread_attribute; > - > - result = evs_initialize (&handle, &callbacks); > - if (result != CS_OK) { > - printf ("Couldn't initialize EVS service %d\n", result); > - exit (0); > - } > - > - pthread_attr_init (&dispatch_thread_attribute); > - pthread_attr_setschedpolicy (&dispatch_thread_attribute, SCHED_FIFO); > - pthread_attr_setschedparam (&dispatch_thread_attribute, &sched_param); > - > - pthread_create (&dispatch_thread, NULL, th_dispatch, &handle); > - > - printf ("Init result %d\n", result); > - result = evs_join (handle, groups, 3); > - printf ("Join result %d\n", result); > - result = evs_leave (handle, &groups[0], 1); > - printf ("Leave result %d\n", result); > - delivery_string = "evs_mcast_joined"; > - > - /* > - * Demonstrate evs_mcast_joined > - */ > - for (i = 0; i < CALLBACKS/2; i++) { > - sprintf (buffer, "evs_mcast_joined: This is message %d", i); > -try_again_one: > - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, &iov, 1); > - if (result == CS_ERR_TRY_AGAIN) { > - goto try_again_one; > - } else > - if (result != CS_OK) { > - printf ("Got error result, exiting %d\n", result); > - exit (1); > - } > - } > - > - /* > - * Demonstrate evs_mcast_joined > - */ > - delivery_string = "evs_mcast_groups"; > - for (i = 0; i < CALLBACKS/2; i++) { > - sprintf (buffer, "evs_mcast_groups: This is message %d", i); > -try_again_two: > - result = evs_mcast_groups (handle, EVS_TYPE_AGREED, > - &groups[1], 1, &iov, 1); > - if (result == CS_ERR_TRY_AGAIN) { > - goto try_again_two; > - } > - } > - > - /* > - * Wait until all callbacks have been executed by dispatch thread > - */ > - for (;;) { > - if (callback_count == CALLBACKS) { > - printf ("Test completed successfully\n"); > - exit (0); > - } > - } > - return (0); > -} _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss