corosync 3.1.7
icmap.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2017 Red Hat, Inc.
3 *
4 * Author: Jan Friesse (jfriesse@redhat.com)
5 *
6 * All rights reserved.
7 *
8 * This software licensed under BSD license, the text of which follows:
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
12 *
13 * - Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * - Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * - Neither the name of the Red Hat, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
33 */
34#ifndef ICMAP_H_DEFINED
35#define ICMAP_H_DEFINED
36
37#include <stdlib.h>
38#include <corosync/corotypes.h>
39#include <qb/qbmap.h>
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
48#define ICMAP_KEYNAME_MAXLEN 255
49
53#define ICMAP_KEYNAME_MINLEN 3
54
58typedef enum {
72
73/*
74 * Tracking values.
75 */
76#define ICMAP_TRACK_ADD 4
77#define ICMAP_TRACK_DELETE 1
78#define ICMAP_TRACK_MODIFY 2
79
85#define ICMAP_TRACK_PREFIX 8
86
93 size_t len;
94 const void *data;
95};
96
103typedef void (*icmap_notify_fn_t) (
104 int32_t event,
105 const char *key_name,
106 struct icmap_notify_value new_value,
107 struct icmap_notify_value old_value,
108 void *user_data);
109
118typedef struct icmap_map *icmap_map_t;
119
123typedef qb_map_iter_t *icmap_iter_t;
124
129
134extern cs_error_t icmap_init(void);
135
142extern cs_error_t icmap_init_r(icmap_map_t *result);
143
147extern void icmap_fini(void);
148
153extern void icmap_fini_r(const icmap_map_t map);
154
160
176extern int icmap_key_value_eq(
177 const icmap_map_t map1,
178 const char *key_name1,
179 const icmap_map_t map2,
180 const char *key_name2);
181
190extern cs_error_t icmap_set(
191 const char *key_name,
192 const void *value,
193 size_t value_len,
195
206 const icmap_map_t map,
207 const char *key_name,
208 const void *value,
209 size_t value_len,
211
212/*
213 * Shortcuts for setting values
214 */
215extern cs_error_t icmap_set_int8(const char *key_name, int8_t value);
216extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value);
217extern cs_error_t icmap_set_int16(const char *key_name, int16_t value);
218extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value);
219extern cs_error_t icmap_set_int32(const char *key_name, int32_t value);
220extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value);
221extern cs_error_t icmap_set_int64(const char *key_name, int64_t value);
222extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value);
223extern cs_error_t icmap_set_float(const char *key_name, float value);
224extern cs_error_t icmap_set_double(const char *key_name, double value);
225extern cs_error_t icmap_set_string(const char *key_name, const char *value);
226
227extern cs_error_t icmap_set_int8_r(const icmap_map_t map, const char *key_name, int8_t value);
228extern cs_error_t icmap_set_uint8_r(const icmap_map_t map, const char *key_name, uint8_t value);
229extern cs_error_t icmap_set_int16_r(const icmap_map_t map, const char *key_name, int16_t value);
230extern cs_error_t icmap_set_uint16_r(const icmap_map_t map, const char *key_name, uint16_t value);
231extern cs_error_t icmap_set_int32_r(const icmap_map_t map, const char *key_name, int32_t value);
232extern cs_error_t icmap_set_uint32_r(const icmap_map_t map, const char *key_name, uint32_t value);
233extern cs_error_t icmap_set_int64_r(const icmap_map_t map, const char *key_name, int64_t value);
234extern cs_error_t icmap_set_uint64_r(const icmap_map_t map, const char *key_name, uint64_t value);
235extern cs_error_t icmap_set_float_r(const icmap_map_t map, const char *key_name, float value);
236extern cs_error_t icmap_set_double_r(const icmap_map_t map, const char *key_name, double value);
237extern cs_error_t icmap_set_string_r(const icmap_map_t map, const char *key_name, const char *value);
238
244extern cs_error_t icmap_delete(const char *key_name);
245
252extern cs_error_t icmap_delete_r(const icmap_map_t map, const char *key_name);
253
269extern cs_error_t icmap_get(
270 const char *key_name,
271 void *value,
272 size_t *value_len,
274
285 const icmap_map_t map,
286 const char *key_name,
287 void *value,
288 size_t *value_len,
290
291/*
292 * Shortcuts for icmap_get
293 */
294extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8);
295extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8);
296extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16);
297extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16);
298extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32);
299extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32);
300extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64);
301extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64);
302extern cs_error_t icmap_get_float(const char *key_name, float *flt);
303extern cs_error_t icmap_get_double(const char *key_name, double *dbl);
304
305/*
306 * Shortcuts for icmap_get_r
307 */
308extern cs_error_t icmap_get_int8_r(const icmap_map_t map, const char *key_name, int8_t *i8);
309extern cs_error_t icmap_get_uint8_r(const icmap_map_t map, const char *key_name, uint8_t *u8);
310extern cs_error_t icmap_get_int16_r(const icmap_map_t map, const char *key_name, int16_t *i16);
311extern cs_error_t icmap_get_uint16_r(const icmap_map_t map, const char *key_name, uint16_t *u16);
312extern cs_error_t icmap_get_int32_r(const icmap_map_t map, const char *key_name, int32_t *i32);
313extern cs_error_t icmap_get_uint32_r(const icmap_map_t map, const char *key_name, uint32_t *u32);
314extern cs_error_t icmap_get_int64_r(const icmap_map_t map, const char *key_name, int64_t *i64);
315extern cs_error_t icmap_get_uint64_r(const icmap_map_t map, const char *key_name, uint64_t *u64);
316extern cs_error_t icmap_get_float_r(const icmap_map_t map, const char *key_name, float *flt);
317extern cs_error_t icmap_get_double_r(const icmap_map_t map, const char *key_name, double *dbl);
318extern cs_error_t icmap_get_string_r(const icmap_map_t map, const char *key_name, char **str);
319
330extern cs_error_t icmap_get_string(const char *key_name, char **str);
331
341extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step);
342
350extern cs_error_t icmap_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step);
351
364extern cs_error_t icmap_fast_adjust_int(const char *key_name, int32_t step);
365
373extern cs_error_t icmap_fast_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step);
374
380extern cs_error_t icmap_inc(const char *key_name);
381
388extern cs_error_t icmap_inc_r(const icmap_map_t map, const char *key_name);
389
395extern cs_error_t icmap_dec(const char *key_name);
396
403extern cs_error_t icmap_dec_r(const icmap_map_t map, const char *key_name);
404
414extern cs_error_t icmap_fast_inc(const char *key_name);
415
422extern cs_error_t icmap_fast_inc_r(const icmap_map_t map, const char *key_name);
423
433extern cs_error_t icmap_fast_dec(const char *key_name);
434
441extern cs_error_t icmap_fast_dec_r(const icmap_map_t map, const char *key_name);
442
448extern icmap_iter_t icmap_iter_init(const char *prefix);
449
456extern icmap_iter_t icmap_iter_init_r(const icmap_map_t map, const char *prefix);
457
469extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type);
470
475extern void icmap_iter_finalize(icmap_iter_t iter);
476
492 const char *key_name,
493 int32_t track_type,
495 void *user_data,
497
504
511
523extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access);
524
530extern int icmap_is_key_ro(const char *key_name);
531
537
544extern cs_error_t icmap_copy_map(icmap_map_t dst_map, const icmap_map_t src_map);
545
546/*
547 * Returns length of value of given type, or 0 for string and binary data type
548 */
550
551/*
552 * Converts track type of icmap to qb
553 */
554int32_t icmap_tt_to_qbtt(int32_t track_type);
555
556/*
557 * Convert track type of qb to icmap
558 */
559int32_t icmap_qbtt_to_tt(int32_t track_type);
560
561#ifdef __cplusplus
562}
563#endif
564
565#endif /* ICMAP_H_DEFINED */
cs_error_t
The cs_error_t enum.
Definition: corotypes.h:98
uint32_t value
int32_t icmap_tt_to_qbtt(int32_t track_type)
Definition: icmap.c:127
cs_error_t icmap_set_int8_r(const icmap_map_t map, const char *key_name, int8_t value)
Definition: icmap.c:497
icmap_iter_t icmap_iter_init_r(const icmap_map_t map, const char *prefix)
icmap_iter_init_r
Definition: icmap.c:1084
cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8)
Definition: icmap.c:868
cs_error_t icmap_get_string_r(const icmap_map_t map, const char *key_name, char **str)
Definition: icmap.c:735
cs_error_t icmap_fast_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step)
icmap_fast_adjust_int_r
Definition: icmap.c:987
cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16)
Definition: icmap.c:880
cs_error_t icmap_get_float_r(const icmap_map_t map, const char *key_name, float *flt)
Definition: icmap.c:844
cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32)
Definition: icmap.c:892
cs_error_t icmap_set_int16_r(const icmap_map_t map, const char *key_name, int16_t value)
Definition: icmap.c:509
cs_error_t icmap_set_uint8(const char *key_name, uint8_t value)
Definition: icmap.c:573
cs_error_t icmap_set_uint16_r(const icmap_map_t map, const char *key_name, uint16_t value)
Definition: icmap.c:515
cs_error_t icmap_set(const char *key_name, const void *value, size_t value_len, icmap_value_types_t type)
Store value with value_len length and type as key_name name in global icmap.
Definition: icmap.c:487
cs_error_t icmap_adjust_int(const char *key_name, int32_t step)
icmap_adjust_int
Definition: icmap.c:979
cs_error_t icmap_get_int64(const char *key_name, int64_t *i64)
Definition: icmap.c:898
cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access)
Set read-only access for given key (key_name) or prefix, If prefix is set.
Definition: icmap.c:1225
cs_error_t icmap_set_uint32_r(const icmap_map_t map, const char *key_name, uint32_t value)
Definition: icmap.c:527
cs_error_t icmap_delete(const char *key_name)
Delete key from map.
Definition: icmap.c:653
cs_error_t icmap_fast_dec_r(const icmap_map_t map, const char *key_name)
icmap_fast_dec_r
Definition: icmap.c:1074
cs_error_t icmap_set_float_r(const icmap_map_t map, const char *key_name, float value)
Definition: icmap.c:545
struct icmap_map * icmap_map_t
icmap type.
Definition: icmap.h:118
cs_error_t icmap_set_int32(const char *key_name, int32_t value)
Definition: icmap.c:591
cs_error_t icmap_delete_r(const icmap_map_t map, const char *key_name)
icmap_delete_r
Definition: icmap.c:633
icmap_value_types_t
Possible types of value.
Definition: icmap.h:58
@ ICMAP_VALUETYPE_UINT64
Definition: icmap.h:66
@ ICMAP_VALUETYPE_BINARY
Definition: icmap.h:70
@ ICMAP_VALUETYPE_UINT8
Definition: icmap.h:60
@ ICMAP_VALUETYPE_INT8
Definition: icmap.h:59
@ ICMAP_VALUETYPE_INT16
Definition: icmap.h:61
@ ICMAP_VALUETYPE_UINT32
Definition: icmap.h:64
@ ICMAP_VALUETYPE_STRING
Definition: icmap.h:69
@ ICMAP_VALUETYPE_FLOAT
Definition: icmap.h:67
@ ICMAP_VALUETYPE_INT64
Definition: icmap.h:65
@ ICMAP_VALUETYPE_DOUBLE
Definition: icmap.h:68
@ ICMAP_VALUETYPE_UINT16
Definition: icmap.h:62
@ ICMAP_VALUETYPE_INT32
Definition: icmap.h:63
cs_error_t icmap_get_uint8_r(const icmap_map_t map, const char *key_name, uint8_t *u8)
Definition: icmap.c:802
cs_error_t icmap_set_uint8_r(const icmap_map_t map, const char *key_name, uint8_t value)
Definition: icmap.c:503
cs_error_t icmap_set_uint16(const char *key_name, uint16_t value)
Definition: icmap.c:585
cs_error_t icmap_dec_r(const icmap_map_t map, const char *key_name)
icmap_dec_r
Definition: icmap.c:1054
cs_error_t icmap_set_int64(const char *key_name, int64_t value)
Definition: icmap.c:603
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)
Add tracking function for given key_name.
Definition: icmap.c:1159
cs_error_t icmap_set_string(const char *key_name, const char *value)
Definition: icmap.c:627
cs_error_t icmap_set_r(const icmap_map_t map, const char *key_name, const void *value, size_t value_len, icmap_value_types_t type)
Reentrant version of icmap_set.
Definition: icmap.c:407
int32_t icmap_qbtt_to_tt(int32_t track_type)
Definition: icmap.c:150
cs_error_t icmap_inc(const char *key_name)
Increase stored value by one.
Definition: icmap.c:1049
cs_error_t icmap_set_int64_r(const icmap_map_t map, const char *key_name, int64_t value)
Definition: icmap.c:533
cs_error_t icmap_set_double(const char *key_name, double value)
Definition: icmap.c:621
cs_error_t icmap_set_int8(const char *key_name, int8_t value)
Definition: icmap.c:567
size_t icmap_get_valuetype_len(icmap_value_types_t type)
Definition: icmap.c:306
int icmap_key_value_eq(const icmap_map_t map1, const char *key_name1, const icmap_map_t map2, const char *key_name2)
Compare value of key with name key_name1 in map1 with key with name key_name2 in map2.
Definition: icmap.c:385
cs_error_t icmap_get_float(const char *key_name, float *flt)
Definition: icmap.c:910
cs_error_t icmap_get_double(const char *key_name, double *dbl)
Definition: icmap.c:916
cs_error_t icmap_get_int8_r(const icmap_map_t map, const char *key_name, int8_t *i8)
Definition: icmap.c:796
cs_error_t icmap_set_uint64_r(const icmap_map_t map, const char *key_name, uint64_t value)
Definition: icmap.c:539
cs_error_t icmap_fast_dec(const char *key_name)
Decrease stored value by one.
Definition: icmap.c:1079
icmap_iter_t icmap_iter_init(const char *prefix)
Initialize iterator with given prefix.
Definition: icmap.c:1089
cs_error_t icmap_set_double_r(const icmap_map_t map, const char *key_name, double value)
Definition: icmap.c:551
cs_error_t icmap_get_uint16_r(const icmap_map_t map, const char *key_name, uint16_t *u16)
Definition: icmap.c:814
cs_error_t icmap_copy_map(icmap_map_t dst_map, const icmap_map_t src_map)
Copy content of src_map icmap to dst_map icmap.
Definition: icmap.c:1298
cs_error_t icmap_init_r(icmap_map_t *result)
Initialize additional (local, reentrant) icmap_map.
Definition: icmap.c:188
cs_error_t icmap_set_int32_r(const icmap_map_t map, const char *key_name, int32_t value)
Definition: icmap.c:521
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)
Prototype for notify callback function.
Definition: icmap.h:103
cs_error_t icmap_get_int64_r(const icmap_map_t map, const char *key_name, int64_t *i64)
Definition: icmap.c:832
void icmap_convert_name_to_valid_name(char *key_name)
Converts given key_name to valid key name (replacing all prohibited characters by _)
Definition: icmap.c:278
cs_error_t icmap_fast_adjust_int(const char *key_name, int32_t step)
icmap_fast_adjust_int
Definition: icmap.c:1036
const char * icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type)
Return next item in iterator iter.
Definition: icmap.c:1095
cs_error_t icmap_fast_inc(const char *key_name)
Increase stored value by one.
Definition: icmap.c:1069
cs_error_t icmap_inc_r(const icmap_map_t map, const char *key_name)
icmap_inc_r
Definition: icmap.c:1044
icmap_map_t icmap_get_global_map(void)
Return global icmap.
Definition: icmap.c:264
cs_error_t icmap_get(const char *key_name, void *value, size_t *value_len, icmap_value_types_t *type)
Retrieve value of key key_name and store it in user preallocated value pointer.
Definition: icmap.c:725
qb_map_iter_t * icmap_iter_t
Itterator type.
Definition: icmap.h:123
cs_error_t icmap_get_double_r(const icmap_map_t map, const char *key_name, double *dbl)
Definition: icmap.c:850
cs_error_t icmap_set_string_r(const icmap_map_t map, const char *key_name, const char *value)
Definition: icmap.c:557
void icmap_iter_finalize(icmap_iter_t iter)
Finalize iterator.
Definition: icmap.c:1116
void icmap_fini_r(const icmap_map_t map)
Finalize local, reentrant icmap.
Definition: icmap.c:238
cs_error_t icmap_get_int32_r(const icmap_map_t map, const char *key_name, int32_t *i32)
Definition: icmap.c:820
cs_error_t icmap_get_r(const icmap_map_t map, const char *key_name, void *value, size_t *value_len, icmap_value_types_t *type)
Same as icmap_get but it's reentrant and operates on given icmap_map.
Definition: icmap.c:692
struct icmap_track * icmap_track_t
Track type.
Definition: icmap.h:128
cs_error_t icmap_get_int32(const char *key_name, int32_t *i32)
Definition: icmap.c:886
cs_error_t icmap_init(void)
Initialize global icmap.
Definition: icmap.c:208
cs_error_t icmap_track_delete(icmap_track_t icmap_track)
Remove previously added track.
Definition: icmap.c:1204
cs_error_t icmap_set_uint64(const char *key_name, uint64_t value)
Definition: icmap.c:609
cs_error_t icmap_dec(const char *key_name)
Decrease stored value by one.
Definition: icmap.c:1059
void icmap_fini(void)
Finalize global icmap.
Definition: icmap.c:247
cs_error_t icmap_get_uint32_r(const icmap_map_t map, const char *key_name, uint32_t *u32)
Definition: icmap.c:826
cs_error_t icmap_get_uint64_r(const icmap_map_t map, const char *key_name, uint64_t *u64)
Definition: icmap.c:838
cs_error_t icmap_get_int16_r(const icmap_map_t map, const char *key_name, int16_t *i16)
Definition: icmap.c:808
cs_error_t icmap_set_uint32(const char *key_name, uint32_t value)
Definition: icmap.c:597
void * icmap_track_get_user_data(icmap_track_t icmap_track)
Return user data associated with given track.
Definition: icmap.c:1220
cs_error_t icmap_set_int16(const char *key_name, int16_t value)
Definition: icmap.c:579
cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64)
Definition: icmap.c:904
cs_error_t icmap_get_string(const char *key_name, char **str)
Shortcut for icmap_get for string type.
Definition: icmap.c:856
cs_error_t icmap_get_int16(const char *key_name, int16_t *i16)
Definition: icmap.c:874
cs_error_t icmap_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step)
icmap_adjust_int_r
Definition: icmap.c:922
int icmap_is_key_ro(const char *key_name)
Check in given key is read only.
Definition: icmap.c:1272
cs_error_t icmap_set_float(const char *key_name, float value)
Definition: icmap.c:615
cs_error_t icmap_get_int8(const char *key_name, int8_t *i8)
Definition: icmap.c:862
cs_error_t icmap_fast_inc_r(const icmap_map_t map, const char *key_name)
icmap_fast_inc_r
Definition: icmap.c:1064
void * user_data
Definition: sam.c:127
Structure passed as new_value and old_value in change callback.
Definition: icmap.h:91
icmap_value_types_t type
Definition: icmap.h:92
const void * data
Definition: icmap.h:94
size_t len
Definition: icmap.h:93
icmap_notify_fn_t notify_fn
Definition: icmap.c:64
char * key_name
Definition: icmap.c:62
int32_t track_type
Definition: icmap.c:63
char type
Definition: totem.h:2