[PATCH] unshare exec/icmap.so

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

 



Signed-off-by: Steven Dake <sdake@xxxxxxxxxx>
---
 corosync.spec.in                |    3 -
 exec/Makefile.am                |   24 +---
 exec/coroparse.c                |    2 +-
 exec/icmap.c                    |    2 +-
 exec/ipc_glue.c                 |    2 +-
 exec/main.c                     |    2 +-
 exec/mainconfig.c               |    2 +-
 exec/service.c                  |    2 +-
 exec/totemconfig.c              |    2 +-
 exec/vsf_quorum.c               |    2 +-
 include/Makefile.am             |    4 +-
 include/corosync/engine/icmap.h |  262 ---------------------------------------
 include/corosync/icmap.h        |  262 +++++++++++++++++++++++++++++++++++++++
 services/cfg.c                  |    2 +-
 services/cmap.c                 |    2 +-
 services/mon.c                  |    2 +-
 services/testquorum.c           |    2 +-
 services/votequorum.c           |    2 +-
 services/wd.c                   |    2 +-
 19 files changed, 283 insertions(+), 300 deletions(-)
 delete mode 100644 include/corosync/engine/icmap.h
 create mode 100644 include/corosync/icmap.h

diff --git a/corosync.spec.in b/corosync.spec.in
index c996d87..53b9216 100644
--- a/corosync.spec.in
+++ b/corosync.spec.in
@@ -247,7 +247,6 @@ This package contains corosync libraries.
 %{_libdir}/libcmap.so.*
 %{_libdir}/libevs.so.*
 %{_libdir}/libtotem_pg.so.*
-%{_libdir}/libicmap.so.*
 %{_libdir}/libquorum.so.*
 %{_libdir}/libvotequorum.so.*
 %{_libdir}/libpload.so.*
@@ -297,7 +296,6 @@ The Corosync Cluster Engine APIs.
 %{_includedir}/corosync/lcr/lcr_ifact.h
 %dir %{_includedir}/corosync/engine
 %{_includedir}/corosync/engine/config.h
-%{_includedir}/corosync/engine/icmap.h
 %{_includedir}/corosync/engine/quorum.h
 %{_libdir}/libcfg.so
 %{_libdir}/libcpg.so
@@ -308,7 +306,6 @@ The Corosync Cluster Engine APIs.
 %{_libdir}/libvotequorum.so
 %{_libdir}/libpload.so
 %{_libdir}/libsam.so
-%{_libdir}/libicmap.so
 %{_libdir}/pkgconfig/*.pc
 %{_mandir}/man3/cpg_*3*
 %{_mandir}/man3/evs_*3*
diff --git a/exec/Makefile.am b/exec/Makefile.am
index c738570..a0ca646 100644
--- a/exec/Makefile.am
+++ b/exec/Makefile.am
@@ -42,22 +42,20 @@ if BUILD_RDMA
 TOTEM_SRC		+= totemiba.c
 endif
 
-ICMAP_SRC		= icmap.c
 LCRSO_SRC		= vsf_ykd.c coroparse.c vsf_quorum.c
 LCRSO_OBJS		= $(LCRSO_SRC:%.c=%.o)
 LCRSO			= $(LCRSO_SRC:%.c=%.lcrso)
 
-lib_LIBRARIES		= libtotem_pg.a libicmap.a
+lib_LIBRARIES		= libtotem_pg.a
 sbin_PROGRAMS		= corosync
 
 libtotem_pg_a_SOURCES	= $(TOTEM_SRC)
-libicmap_a_SOURCES	= $(ICMAP_SRC)
 
 corosync_SOURCES 	= main.c ipc_glue.c util.c sync.c apidef.c service.c \
 			  timer.c totemconfig.c mainconfig.c quorum.c schedwrk.c \
-			  ../lcr/lcr_ifact.c evil.c syncv2.c logsys.c
-corosync_LDADD	  	= -ltotem_pg -licmap $(LIBQB_LIBS) $(statgrab_LIBS)
-corosync_DEPENDENCIES	= libtotem_pg.so.$(SONAME) libicmap.so.$(SONAME)
+			  ../lcr/lcr_ifact.c evil.c syncv2.c logsys.c icmap.c
+corosync_LDADD	  	= -ltotem_pg $(LIBQB_LIBS) $(statgrab_LIBS)
+corosync_DEPENDENCIES	= libtotem_pg.so.$(SONAME)
 corosync_LDFLAGS	= $(OS_DYFLAGS) -L./
 
 TOTEM_OBJS		= $(TOTEM_SRC:%.c=%.o)
@@ -78,18 +76,13 @@ EXTRA_DIST		= $(LCRSO_SRC)
 
 if BUILD_DARWIN
 %.lcrso: %.o
-	$(CC) $(LDFLAGS) $(CFLAGS) -L$(top_builddir)/exec -licmap -bundle -bind_at_load -bundle_loader ./corosync $^ -o $@
+	$(CC) $(LDFLAGS) $(CFLAGS) -L$(top_builddir)/exec -bundle -bind_at_load -bundle_loader ./corosync $^ -o $@
 
 libtotem_pg.so.$(SONAME): $(TOTEM_OBJS)
 	$(CC) $(LDFLAGS) $(DARWIN_OPTS) $(TOTEM_OBJS) -o $@ -lpthread
 	ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so
 	ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so.$(SOMAJOR)
 
-libicmap.so.$(SONAME): $(ICMAP_OBJS)
-	$(CC) $(LDFLAGS) $(DARWIN_OPTS) $(ICMAP_OBJS) -o $@ -lpthread
-	ln -sf libicmap.so.$(SONAME) libicmap.so
-	ln -sf libicmap.so.$(SONAME) libicmap.so.$(SOMAJOR)
-
 else
 
 if BUILD_SOLARIS
@@ -113,13 +106,6 @@ libtotem_pg.so.$(SONAME): $(TOTEM_OBJS)
 	ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so
 	ln -sf libtotem_pg.so.$(SONAME) libtotem_pg.so.$(SOMAJOR)
 
-libicmap.so.$(SONAME): $(ICMAP_OBJS)
-	$(CC) -shared -o $@ \
-		-Wl,-soname=libicmap.so.$(SOMAJOR) \
-		$(LDFLAGS) $^ -lpthread
-	ln -sf libicmap.so.$(SONAME) libicmap.so
-	ln -sf libicmap.so.$(SONAME) libicmap.so.$(SOMAJOR)
-
 endif
 
 endif
diff --git a/exec/coroparse.c b/exec/coroparse.c
index e84e6f2..417f584 100644
--- a/exec/coroparse.c
+++ b/exec/coroparse.c
@@ -59,7 +59,7 @@
 #include <qb/qbutil.h>
 #define LOGSYS_UTILS_ONLY 1
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 #include <corosync/engine/config.h>
 
 #include "util.h"
diff --git a/exec/icmap.c b/exec/icmap.c
index 14390d4..c1d9bf1 100644
--- a/exec/icmap.c
+++ b/exec/icmap.c
@@ -41,7 +41,7 @@
 
 #include <qb/qbdefs.h>
 #include <corosync/list.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #define ICMAP_MAX_VALUE_LEN	(16*1024)
 
diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c
index 5f5951f..e18ac55 100644
--- a/exec/ipc_glue.c
+++ b/exec/ipc_glue.c
@@ -52,7 +52,7 @@
 #include <corosync/corodefs.h>
 #include <corosync/totem/totempg.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #include "mainconfig.h"
 #include "sync.h"
diff --git a/exec/main.c b/exec/main.c
index a39fb83..9585998 100644
--- a/exec/main.c
+++ b/exec/main.c
@@ -109,7 +109,7 @@
 #include <corosync/totem/totempg.h>
 #include <corosync/engine/config.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #include "quorum.h"
 #include "totemsrp.h"
diff --git a/exec/mainconfig.c b/exec/mainconfig.c
index 282f02c..9ca3d92 100644
--- a/exec/mainconfig.c
+++ b/exec/mainconfig.c
@@ -50,7 +50,7 @@
 #include <corosync/list.h>
 #include <corosync/totem/totem.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #include "util.h"
 #include "mainconfig.h"
diff --git a/exec/service.c b/exec/service.c
index d70ffd4..d9bc1b9 100644
--- a/exec/service.c
+++ b/exec/service.c
@@ -46,7 +46,7 @@
 #include "mainconfig.h"
 #include "util.h"
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #include "timer.h"
 #include <corosync/totem/totempg.h>
diff --git a/exec/totemconfig.c b/exec/totemconfig.c
index e5893b9..3a043c5 100644
--- a/exec/totemconfig.c
+++ b/exec/totemconfig.c
@@ -55,7 +55,7 @@
 #include <corosync/totem/totem.h>
 #include <corosync/config.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #ifdef HAVE_LIBNSS
 #include <nss.h>
diff --git a/exec/vsf_quorum.c b/exec/vsf_quorum.c
index ebe8147..6c2fd42 100644
--- a/exec/vsf_quorum.c
+++ b/exec/vsf_quorum.c
@@ -67,7 +67,7 @@
 #include <corosync/coroapi.h>
 #include <corosync/logsys.h>
 #include <corosync/engine/quorum.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 LOGSYS_DECLARE_SUBSYS ("QUORUM");
 
diff --git a/include/Makefile.am b/include/Makefile.am
index a8fbaca..a8f3477 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -37,11 +37,11 @@ CS_H			= hdb.h cs_config.h cpg.h cfg.h evs.h mar_gen.h swab.h 	\
 
 CS_INTERNAL_H		= ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_pload.h ipc_quorum.h 	\
 			jhash.h pload.h quorum.h sq.h ipc_votequorum.h ipc_cmap.h \
-			logsys.h coroapi.h
+			logsys.h coroapi.h icmap.h
 
 LCR_H			= lcr_ckpt.h lcr_comp.h	lcr_ifact.h
 
-ENGINE_H		= config.h quorum.h icmap.h
+ENGINE_H		= config.h quorum.h
 
 TOTEM_H			= totem.h totemip.h totempg.h
 
diff --git a/include/corosync/engine/icmap.h b/include/corosync/engine/icmap.h
deleted file mode 100644
index 896800b..0000000
--- a/include/corosync/engine/icmap.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2011 Red Hat, Inc.
- *
- * Author: Jan Friesse (jfriesse@xxxxxxxxxx)
- *
- * All rights reserved.
- *
- * 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 Red Hat, 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 ICMAP_H_DEFINED
-#define ICMAP_H_DEFINED
-
-#include <stdlib.h>
-#include <corosync/corotypes.h>
-#include <qb/qbmap.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Maximum length of key in icmap
- */
-#define ICMAP_KEYNAME_MAXLEN		255
-
-/*
- * Minimum lenght of key in icmap
- */
-#define ICMAP_KEYNAME_MINLEN		3
-
-/*
- * Possible types of value. Binary is raw data without trailing zero with given length
- */
-typedef enum {
-    ICMAP_VALUETYPE_INT8	=  1,
-    ICMAP_VALUETYPE_UINT8	=  2,
-    ICMAP_VALUETYPE_INT16	=  3,
-    ICMAP_VALUETYPE_UINT16	=  4,
-    ICMAP_VALUETYPE_INT32	=  5,
-    ICMAP_VALUETYPE_UINT32	=  6,
-    ICMAP_VALUETYPE_INT64	=  7,
-    ICMAP_VALUETYPE_UINT64	=  8,
-    ICMAP_VALUETYPE_FLOAT	=  9,
-    ICMAP_VALUETYPE_DOUBLE	= 10,
-    ICMAP_VALUETYPE_STRING	= 11,
-    ICMAP_VALUETYPE_BINARY	= 12,
-} icmap_value_types_t;
-
-/*
- * Tracking values.
- */
-#define ICMAP_TRACK_ADD		4
-#define ICMAP_TRACK_DELETE	1
-#define ICMAP_TRACK_MODIFY	2
-/*
- * Whole prefix is tracked, instead of key only (so "totem." tracking means that
- * "totem.nodeid", "totem.version", ... applies). This value is also never returned
- * inside of callback and is used only in adding track
- */
-#define ICMAP_TRACK_PREFIX	8
-
-/*
- * Structure passed as new_value and old_value in change callback. It contains type of
- * key, length of key and pointer to value of key
- */
-struct icmap_notify_value {
-	icmap_value_types_t type;
-	size_t len;
-	const void *data;
-};
-
-/*
- * Prototype for notify callback function. Even is one of ICMAP_TRACK_* event, key_name is
- * changed key, new and old_value contains values or are zeroed (in other words, type is non
- * existing 0 type) if there were no old (creating of key) or new (deleting of key) value.
- * user_data are passed when adding tracking.
- */
-typedef void (*icmap_notify_fn_t) (
-	int32_t event,
-	const char *key_name,
-	struct icmap_notify_value new_value,
-	struct icmap_notify_value old_value,
-	void *user_data);
-
-/*
- * Itterator type
- */
-typedef qb_map_iter_t *icmap_iter_t;
-
-/*
- * Track type
- */
-typedef struct icmap_track *icmap_track_t;
-
-/*
- * Initialize icmap
- */
-extern cs_error_t icmap_init(void);
-
-/*
- * Store value with value_len length and type as key_name name in icmap.
- */
-extern cs_error_t icmap_set(
-	const char *key_name,
-	const void *value,
-	size_t value_len,
-        icmap_value_types_t type);
-
-/*
- * Shortcuts for setting values
- */
-extern cs_error_t icmap_set_int8(const char *key_name, int8_t value);
-extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value);
-extern cs_error_t icmap_set_int16(const char *key_name, int16_t value);
-extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value);
-extern cs_error_t icmap_set_int32(const char *key_name, int32_t value);
-extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value);
-extern cs_error_t icmap_set_int64(const char *key_name, int64_t value);
-extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value);
-extern cs_error_t icmap_set_float(const char *key_name, float value);
-extern cs_error_t icmap_set_double(const char *key_name, double value);
-extern cs_error_t icmap_set_string(const char *key_name, const char *value);
-
-/*
- * Delete key from map
- */
-extern cs_error_t icmap_delete(const char *key_name);
-
-/*
- * Retrieve value of key key_name and store it in user preallocated value pointer.
- * value can be NULL, and then only value_len and/or type is returned (both of them
- * can also be NULL). If value is not NULL, actual length of value in map is checked
- * against value_len. If *value_len is shorter then length of value in map, error
- * CS_ERR_INVALID_PARAM is returned. After successful copy of value, value_len is
- * set to actual length of value in map.
- */
-extern cs_error_t icmap_get(
-	const char *key_name,
-	void *value,
-	size_t *value_len,
-        icmap_value_types_t *type);
-
-/*
- * Shortcuts for icmap_get
- */
-extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8);
-extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8);
-extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16);
-extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16);
-extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32);
-extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32);
-extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64);
-extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64);
-extern cs_error_t icmap_get_float(const char *key_name, float *flt);
-extern cs_error_t icmap_get_double(const char *key_name, double *dbl);
-/*
- * Shortcut for icmap_get for string type. Returned string is newly allocated and
- * caller is responsible for freeing memory
- */
-extern cs_error_t icmap_get_string(const char *key_name, char **str);
-
-/*
- * Defined only for [u]int* values. It adds step to current value.
- */
-extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step);
-
-/*
- * Increase stored value by one
- */
-extern cs_error_t icmap_inc(const char *key_name);
-
-/*
- * Decrease stored value by one
- */
-extern cs_error_t icmap_dec(const char *key_name);
-
-/*
- * Initialize iterator with given prefix
- */
-extern icmap_iter_t icmap_iter_init(const char *prefix);
-
-/*
- * Return next item in iterator iter. value_len and type are optional (= can be NULL), but if set,
- * length of returned value and/or type is returned. Function returns following key_name or NULL if
- * iteration is over.
- */
-extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type);
-
-/*
- * Finalize iterator
- */
-extern void icmap_iter_finalize(icmap_iter_t iter);
-
-/*
- * Add tracking function for given key_name. Tracked changes (add|modify|delete) depend on track_type,
- * which is bitwise or of ICMAP_TRACK_* values. notify_fn is called on change, where user_data pointer
- * is passed (unchanged). Value which can be used to delete tracking is passed as icmap_track.
- */
-extern cs_error_t icmap_track_add(
-	const char *key_name,
-	int32_t track_type,
-	icmap_notify_fn_t notify_fn,
-	void *user_data,
-	icmap_track_t *icmap_track);
-
-/*
- * Return user data associated with given track
- */
-extern void *icmap_track_get_user_data(icmap_track_t icmap_track);
-
-/*
- * Remove previously added track
- */
-extern cs_error_t icmap_track_delete(icmap_track_t icmap_track);
-
-/*
- * Set read-only access for given key (key_name) or prefix, if prefix is set. ro_access
- * can be !0, which means, that old information about ro of this key is deleted.
- * Read-only access is used only in CMAP service! (in other word it prevents users
- * from deleting/changing key, but doesn't guarantee anything for internal icmap users.
- */
-extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access);
-
-/*
- * Check in given key is read only. Returns !0 if so, otherwise (key is rw) 0.
- */
-extern int icmap_is_key_ro(const char *key_name);
-
-/*
- * Converts given key_name to valid key name (replacing all prohibited characters by _)
- */
-extern void icmap_convert_name_to_valid_name(char *key_name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ICMAP_H_DEFINED */
diff --git a/include/corosync/icmap.h b/include/corosync/icmap.h
new file mode 100644
index 0000000..896800b
--- /dev/null
+++ b/include/corosync/icmap.h
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2011 Red Hat, Inc.
+ *
+ * Author: Jan Friesse (jfriesse@xxxxxxxxxx)
+ *
+ * All rights reserved.
+ *
+ * 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 Red Hat, 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 ICMAP_H_DEFINED
+#define ICMAP_H_DEFINED
+
+#include <stdlib.h>
+#include <corosync/corotypes.h>
+#include <qb/qbmap.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Maximum length of key in icmap
+ */
+#define ICMAP_KEYNAME_MAXLEN		255
+
+/*
+ * Minimum lenght of key in icmap
+ */
+#define ICMAP_KEYNAME_MINLEN		3
+
+/*
+ * Possible types of value. Binary is raw data without trailing zero with given length
+ */
+typedef enum {
+    ICMAP_VALUETYPE_INT8	=  1,
+    ICMAP_VALUETYPE_UINT8	=  2,
+    ICMAP_VALUETYPE_INT16	=  3,
+    ICMAP_VALUETYPE_UINT16	=  4,
+    ICMAP_VALUETYPE_INT32	=  5,
+    ICMAP_VALUETYPE_UINT32	=  6,
+    ICMAP_VALUETYPE_INT64	=  7,
+    ICMAP_VALUETYPE_UINT64	=  8,
+    ICMAP_VALUETYPE_FLOAT	=  9,
+    ICMAP_VALUETYPE_DOUBLE	= 10,
+    ICMAP_VALUETYPE_STRING	= 11,
+    ICMAP_VALUETYPE_BINARY	= 12,
+} icmap_value_types_t;
+
+/*
+ * Tracking values.
+ */
+#define ICMAP_TRACK_ADD		4
+#define ICMAP_TRACK_DELETE	1
+#define ICMAP_TRACK_MODIFY	2
+/*
+ * Whole prefix is tracked, instead of key only (so "totem." tracking means that
+ * "totem.nodeid", "totem.version", ... applies). This value is also never returned
+ * inside of callback and is used only in adding track
+ */
+#define ICMAP_TRACK_PREFIX	8
+
+/*
+ * Structure passed as new_value and old_value in change callback. It contains type of
+ * key, length of key and pointer to value of key
+ */
+struct icmap_notify_value {
+	icmap_value_types_t type;
+	size_t len;
+	const void *data;
+};
+
+/*
+ * Prototype for notify callback function. Even is one of ICMAP_TRACK_* event, key_name is
+ * changed key, new and old_value contains values or are zeroed (in other words, type is non
+ * existing 0 type) if there were no old (creating of key) or new (deleting of key) value.
+ * user_data are passed when adding tracking.
+ */
+typedef void (*icmap_notify_fn_t) (
+	int32_t event,
+	const char *key_name,
+	struct icmap_notify_value new_value,
+	struct icmap_notify_value old_value,
+	void *user_data);
+
+/*
+ * Itterator type
+ */
+typedef qb_map_iter_t *icmap_iter_t;
+
+/*
+ * Track type
+ */
+typedef struct icmap_track *icmap_track_t;
+
+/*
+ * Initialize icmap
+ */
+extern cs_error_t icmap_init(void);
+
+/*
+ * Store value with value_len length and type as key_name name in icmap.
+ */
+extern cs_error_t icmap_set(
+	const char *key_name,
+	const void *value,
+	size_t value_len,
+        icmap_value_types_t type);
+
+/*
+ * Shortcuts for setting values
+ */
+extern cs_error_t icmap_set_int8(const char *key_name, int8_t value);
+extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value);
+extern cs_error_t icmap_set_int16(const char *key_name, int16_t value);
+extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value);
+extern cs_error_t icmap_set_int32(const char *key_name, int32_t value);
+extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value);
+extern cs_error_t icmap_set_int64(const char *key_name, int64_t value);
+extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value);
+extern cs_error_t icmap_set_float(const char *key_name, float value);
+extern cs_error_t icmap_set_double(const char *key_name, double value);
+extern cs_error_t icmap_set_string(const char *key_name, const char *value);
+
+/*
+ * Delete key from map
+ */
+extern cs_error_t icmap_delete(const char *key_name);
+
+/*
+ * Retrieve value of key key_name and store it in user preallocated value pointer.
+ * value can be NULL, and then only value_len and/or type is returned (both of them
+ * can also be NULL). If value is not NULL, actual length of value in map is checked
+ * against value_len. If *value_len is shorter then length of value in map, error
+ * CS_ERR_INVALID_PARAM is returned. After successful copy of value, value_len is
+ * set to actual length of value in map.
+ */
+extern cs_error_t icmap_get(
+	const char *key_name,
+	void *value,
+	size_t *value_len,
+        icmap_value_types_t *type);
+
+/*
+ * Shortcuts for icmap_get
+ */
+extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8);
+extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8);
+extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16);
+extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16);
+extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32);
+extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32);
+extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64);
+extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64);
+extern cs_error_t icmap_get_float(const char *key_name, float *flt);
+extern cs_error_t icmap_get_double(const char *key_name, double *dbl);
+/*
+ * Shortcut for icmap_get for string type. Returned string is newly allocated and
+ * caller is responsible for freeing memory
+ */
+extern cs_error_t icmap_get_string(const char *key_name, char **str);
+
+/*
+ * Defined only for [u]int* values. It adds step to current value.
+ */
+extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step);
+
+/*
+ * Increase stored value by one
+ */
+extern cs_error_t icmap_inc(const char *key_name);
+
+/*
+ * Decrease stored value by one
+ */
+extern cs_error_t icmap_dec(const char *key_name);
+
+/*
+ * Initialize iterator with given prefix
+ */
+extern icmap_iter_t icmap_iter_init(const char *prefix);
+
+/*
+ * Return next item in iterator iter. value_len and type are optional (= can be NULL), but if set,
+ * length of returned value and/or type is returned. Function returns following key_name or NULL if
+ * iteration is over.
+ */
+extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type);
+
+/*
+ * Finalize iterator
+ */
+extern void icmap_iter_finalize(icmap_iter_t iter);
+
+/*
+ * Add tracking function for given key_name. Tracked changes (add|modify|delete) depend on track_type,
+ * which is bitwise or of ICMAP_TRACK_* values. notify_fn is called on change, where user_data pointer
+ * is passed (unchanged). Value which can be used to delete tracking is passed as icmap_track.
+ */
+extern cs_error_t icmap_track_add(
+	const char *key_name,
+	int32_t track_type,
+	icmap_notify_fn_t notify_fn,
+	void *user_data,
+	icmap_track_t *icmap_track);
+
+/*
+ * Return user data associated with given track
+ */
+extern void *icmap_track_get_user_data(icmap_track_t icmap_track);
+
+/*
+ * Remove previously added track
+ */
+extern cs_error_t icmap_track_delete(icmap_track_t icmap_track);
+
+/*
+ * Set read-only access for given key (key_name) or prefix, if prefix is set. ro_access
+ * can be !0, which means, that old information about ro of this key is deleted.
+ * Read-only access is used only in CMAP service! (in other word it prevents users
+ * from deleting/changing key, but doesn't guarantee anything for internal icmap users.
+ */
+extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access);
+
+/*
+ * Check in given key is read only. Returns !0 if so, otherwise (key is rw) 0.
+ */
+extern int icmap_is_key_ro(const char *key_name);
+
+/*
+ * Converts given key_name to valid key name (replacing all prohibited characters by _)
+ */
+extern void icmap_convert_name_to_valid_name(char *key_name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ICMAP_H_DEFINED */
diff --git a/services/cfg.c b/services/cfg.c
index a4d43f4..6703885 100644
--- a/services/cfg.c
+++ b/services/cfg.c
@@ -61,7 +61,7 @@
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
 #include <corosync/coroapi.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 #include <corosync/corodefs.h>
 
 LOGSYS_DECLARE_SUBSYS ("CFG");
diff --git a/services/cmap.c b/services/cmap.c
index 62e73e7..3081173 100644
--- a/services/cmap.c
+++ b/services/cmap.c
@@ -54,7 +54,7 @@
 #include <corosync/lcr/lcr_comp.h>
 #include <corosync/logsys.h>
 #include <corosync/coroapi.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #define hdb_error_to_cs(_result_) qb_to_cs_error(_result_)
 
diff --git a/services/mon.c b/services/mon.c
index 665e768..42735b0 100644
--- a/services/mon.c
+++ b/services/mon.c
@@ -45,7 +45,7 @@
 #include <corosync/coroapi.h>
 #include <corosync/list.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 #include "../exec/fsm.h"
 
 
diff --git a/services/testquorum.c b/services/testquorum.c
index 5122054..7f35159 100644
--- a/services/testquorum.c
+++ b/services/testquorum.c
@@ -58,7 +58,7 @@
 #include <qb/qbipc_common.h>
 #include <corosync/corodefs.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 
 #include <corosync/mar_gen.h>
 #include <corosync/lcr/lcr_comp.h>
diff --git a/services/votequorum.c b/services/votequorum.c
index b21577b..c0de834 100644
--- a/services/votequorum.c
+++ b/services/votequorum.c
@@ -69,7 +69,7 @@
 #include <corosync/mar_gen.h>
 #include <corosync/coroapi.h>
 #include <corosync/engine/quorum.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 #include <corosync/ipc_votequorum.h>
 
 #define VOTEQUORUM_MAJOR_VERSION 7
diff --git a/services/wd.c b/services/wd.c
index 055cc8a..9c45e32 100644
--- a/services/wd.c
+++ b/services/wd.c
@@ -47,7 +47,7 @@
 #include <corosync/coroapi.h>
 #include <corosync/list.h>
 #include <corosync/logsys.h>
-#include <corosync/engine/icmap.h>
+#include <corosync/icmap.h>
 #include "../exec/fsm.h"
 
 
-- 
1.7.7.4

_______________________________________________
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