Re: [PATCH] drop evs service

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux