corosync  2.4.4
icmap.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2012 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
42 extern "C" {
43 #endif
44 
48 #define ICMAP_KEYNAME_MAXLEN 255
49 
53 #define ICMAP_KEYNAME_MINLEN 3
54 
58 typedef 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 
103 typedef 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 
118 typedef struct icmap_map *icmap_map_t;
119 
123 typedef qb_map_iter_t *icmap_iter_t;
124 
128 typedef struct icmap_track *icmap_track_t;
129 
134 extern cs_error_t icmap_init(void);
135 
142 extern cs_error_t icmap_init_r(icmap_map_t *result);
143 
147 extern void icmap_fini(void);
148 
153 extern void icmap_fini_r(const icmap_map_t map);
154 
159 extern icmap_map_t icmap_get_global_map(void);
160 
176 extern 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 
190 extern cs_error_t icmap_set(
191  const char *key_name,
192  const void *value,
193  size_t value_len,
195 
205 extern cs_error_t icmap_set_r(
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  */
215 extern cs_error_t icmap_set_int8(const char *key_name, int8_t value);
216 extern cs_error_t icmap_set_uint8(const char *key_name, uint8_t value);
217 extern cs_error_t icmap_set_int16(const char *key_name, int16_t value);
218 extern cs_error_t icmap_set_uint16(const char *key_name, uint16_t value);
219 extern cs_error_t icmap_set_int32(const char *key_name, int32_t value);
220 extern cs_error_t icmap_set_uint32(const char *key_name, uint32_t value);
221 extern cs_error_t icmap_set_int64(const char *key_name, int64_t value);
222 extern cs_error_t icmap_set_uint64(const char *key_name, uint64_t value);
223 extern cs_error_t icmap_set_float(const char *key_name, float value);
224 extern cs_error_t icmap_set_double(const char *key_name, double value);
225 extern cs_error_t icmap_set_string(const char *key_name, const char *value);
226 
227 extern cs_error_t icmap_set_int8_r(const icmap_map_t map, const char *key_name, int8_t value);
228 extern cs_error_t icmap_set_uint8_r(const icmap_map_t map, const char *key_name, uint8_t value);
229 extern cs_error_t icmap_set_int16_r(const icmap_map_t map, const char *key_name, int16_t value);
230 extern cs_error_t icmap_set_uint16_r(const icmap_map_t map, const char *key_name, uint16_t value);
231 extern cs_error_t icmap_set_int32_r(const icmap_map_t map, const char *key_name, int32_t value);
232 extern cs_error_t icmap_set_uint32_r(const icmap_map_t map, const char *key_name, uint32_t value);
233 extern cs_error_t icmap_set_int64_r(const icmap_map_t map, const char *key_name, int64_t value);
234 extern cs_error_t icmap_set_uint64_r(const icmap_map_t map, const char *key_name, uint64_t value);
235 extern cs_error_t icmap_set_float_r(const icmap_map_t map, const char *key_name, float value);
236 extern cs_error_t icmap_set_double_r(const icmap_map_t map, const char *key_name, double value);
237 extern cs_error_t icmap_set_string_r(const icmap_map_t map, const char *key_name, const char *value);
238 
244 extern cs_error_t icmap_delete(const char *key_name);
245 
252 extern cs_error_t icmap_delete_r(const icmap_map_t map, const char *key_name);
253 
269 extern cs_error_t icmap_get(
270  const char *key_name,
271  void *value,
272  size_t *value_len,
274 
284 extern cs_error_t icmap_get_r(
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  */
294 extern cs_error_t icmap_get_int8(const char *key_name, int8_t *i8);
295 extern cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8);
296 extern cs_error_t icmap_get_int16(const char *key_name, int16_t *i16);
297 extern cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16);
298 extern cs_error_t icmap_get_int32(const char *key_name, int32_t *i32);
299 extern cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32);
300 extern cs_error_t icmap_get_int64(const char *key_name, int64_t *i64);
301 extern cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64);
302 extern cs_error_t icmap_get_float(const char *key_name, float *flt);
303 extern cs_error_t icmap_get_double(const char *key_name, double *dbl);
304 
305 /*
306  * Shortcuts for icmap_get_r
307  */
308 extern cs_error_t icmap_get_int8_r(const icmap_map_t map, const char *key_name, int8_t *i8);
309 extern cs_error_t icmap_get_uint8_r(const icmap_map_t map, const char *key_name, uint8_t *u8);
310 extern cs_error_t icmap_get_int16_r(const icmap_map_t map, const char *key_name, int16_t *i16);
311 extern cs_error_t icmap_get_uint16_r(const icmap_map_t map, const char *key_name, uint16_t *u16);
312 extern cs_error_t icmap_get_int32_r(const icmap_map_t map, const char *key_name, int32_t *i32);
313 extern cs_error_t icmap_get_uint32_r(const icmap_map_t map, const char *key_name, uint32_t *u32);
314 extern cs_error_t icmap_get_int64_r(const icmap_map_t map, const char *key_name, int64_t *i64);
315 extern cs_error_t icmap_get_uint64_r(const icmap_map_t map, const char *key_name, uint64_t *u64);
316 extern cs_error_t icmap_get_float_r(const icmap_map_t map, const char *key_name, float *flt);
317 extern cs_error_t icmap_get_double_r(const icmap_map_t map, const char *key_name, double *dbl);
318 
329 extern cs_error_t icmap_get_string(const char *key_name, char **str);
330 
340 extern cs_error_t icmap_adjust_int(const char *key_name, int32_t step);
341 
349 extern cs_error_t icmap_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step);
350 
363 extern cs_error_t icmap_fast_adjust_int(const char *key_name, int32_t step);
364 
372 extern cs_error_t icmap_fast_adjust_int_r(const icmap_map_t map, const char *key_name, int32_t step);
373 
379 extern cs_error_t icmap_inc(const char *key_name);
380 
387 extern cs_error_t icmap_inc_r(const icmap_map_t map, const char *key_name);
388 
394 extern cs_error_t icmap_dec(const char *key_name);
395 
402 extern cs_error_t icmap_dec_r(const icmap_map_t map, const char *key_name);
403 
413 extern cs_error_t icmap_fast_inc(const char *key_name);
414 
421 extern cs_error_t icmap_fast_inc_r(const icmap_map_t map, const char *key_name);
422 
432 extern cs_error_t icmap_fast_dec(const char *key_name);
433 
440 extern cs_error_t icmap_fast_dec_r(const icmap_map_t map, const char *key_name);
441 
447 extern icmap_iter_t icmap_iter_init(const char *prefix);
448 
455 extern icmap_iter_t icmap_iter_init_r(const icmap_map_t map, const char *prefix);
456 
468 extern const char *icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type);
469 
474 extern void icmap_iter_finalize(icmap_iter_t iter);
475 
491  const char *key_name,
492  int32_t track_type,
494  void *user_data,
495  icmap_track_t *icmap_track);
496 
502 extern void *icmap_track_get_user_data(icmap_track_t icmap_track);
503 
509 extern cs_error_t icmap_track_delete(icmap_track_t icmap_track);
510 
522 extern cs_error_t icmap_set_ro_access(const char *key_name, int prefix, int ro_access);
523 
529 extern int icmap_is_key_ro(const char *key_name);
530 
535 extern void icmap_convert_name_to_valid_name(char *key_name);
536 
543 extern cs_error_t icmap_copy_map(icmap_map_t dst_map, const icmap_map_t src_map);
544 
545 #ifdef __cplusplus
546 }
547 #endif
548 
549 #endif /* ICMAP_H_DEFINED */
cs_error_t icmap_set_int16(const char *key_name, int16_t value)
Definition: icmap.c:593
icmap_notify_fn_t notify_fn
Definition: icmap.c:64
void * icmap_track_get_user_data(icmap_track_t icmap_track)
Return user data associated with given track.
Definition: icmap.c:1228
cs_error_t icmap_get_uint8_r(const icmap_map_t map, const char *key_name, uint8_t *u8)
Definition: icmap.c:782
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:1103
size_t len
Definition: icmap.h:93
cs_error_t icmap_adjust_int(const char *key_name, int32_t step)
icmap_adjust_int
Definition: icmap.c:987
uint32_t value
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:1306
cs_error_t icmap_set_int16_r(const icmap_map_t map, const char *key_name, int16_t value)
Definition: icmap.c:523
cs_error_t icmap_set_int64(const char *key_name, int64_t value)
Definition: icmap.c:617
void icmap_iter_finalize(icmap_iter_t iter)
Finalize iterator.
Definition: icmap.c:1124
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:501
cs_error_t icmap_set_uint64_r(const icmap_map_t map, const char *key_name, uint64_t value)
Definition: icmap.c:553
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:399
cs_error_t icmap_set_int32_r(const icmap_map_t map, const char *key_name, int32_t value)
Definition: icmap.c:535
cs_error_t icmap_get_int16(const char *key_name, int16_t *i16)
Definition: icmap.c:848
cs_error_t icmap_get_double_r(const icmap_map_t map, const char *key_name, double *dbl)
Definition: icmap.c:830
cs_error_t icmap_set_string(const char *key_name, const char *value)
Definition: icmap.c:641
cs_error_t icmap_set_double_r(const icmap_map_t map, const char *key_name, double value)
Definition: icmap.c:565
void icmap_fini_r(const icmap_map_t map)
Finalize local, reentrant icmap.
Definition: icmap.c:252
icmap_map_t icmap_get_global_map(void)
Return global icmap.
Definition: icmap.c:278
cs_error_t icmap_inc(const char *key_name)
Increase stored value by one.
Definition: icmap.c:1057
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_int32_r(const icmap_map_t map, const char *key_name, int32_t *i32)
Definition: icmap.c:800
void icmap_fini(void)
Finalize global icmap.
Definition: icmap.c:261
cs_error_t icmap_get_int32(const char *key_name, int32_t *i32)
Definition: icmap.c:860
cs_error_t icmap_set_string_r(const icmap_map_t map, const char *key_name, const char *value)
Definition: icmap.c:571
cs_error_t icmap_get_int64(const char *key_name, int64_t *i64)
Definition: icmap.c:872
cs_error_t icmap_get_uint64_r(const icmap_map_t map, const char *key_name, uint64_t *u64)
Definition: icmap.c:818
cs_error_t icmap_get_uint8(const char *key_name, uint8_t *u8)
Definition: icmap.c:842
cs_error_t icmap_get_float_r(const icmap_map_t map, const char *key_name, float *flt)
Definition: icmap.c:824
cs_error_t icmap_set_int8(const char *key_name, int8_t value)
Definition: icmap.c:581
cs_error_t icmap_set_uint8_r(const icmap_map_t map, const char *key_name, uint8_t value)
Definition: icmap.c:517
cs_error_t icmap_get_int16_r(const icmap_map_t map, const char *key_name, int16_t *i16)
Definition: icmap.c:788
cs_error_t icmap_set_uint32(const char *key_name, uint32_t value)
Definition: icmap.c:611
void * user_data
Definition: sam.c:127
cs_error_t icmap_set_int8_r(const icmap_map_t map, const char *key_name, int8_t value)
Definition: icmap.c:511
const void * data
Definition: icmap.h:94
cs_error_t icmap_set_uint32_r(const icmap_map_t map, const char *key_name, uint32_t value)
Definition: icmap.c:541
icmap_value_types_t type
Definition: icmap.h:92
cs_error_t icmap_set_float(const char *key_name, float value)
Definition: icmap.c:629
cs_error_t icmap_inc_r(const icmap_map_t map, const char *key_name)
icmap_inc_r
Definition: icmap.c:1052
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:421
cs_error_t icmap_delete(const char *key_name)
Delete key from map.
Definition: icmap.c:667
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:739
cs_error_t
The cs_error_t enum.
Definition: corotypes.h:94
cs_error_t icmap_track_delete(icmap_track_t icmap_track)
Remove previously added track.
Definition: icmap.c:1212
cs_error_t icmap_set_uint16(const char *key_name, uint16_t value)
Definition: icmap.c:599
cs_error_t icmap_get_uint32_r(const icmap_map_t map, const char *key_name, uint32_t *u32)
Definition: icmap.c:806
cs_error_t icmap_dec(const char *key_name)
Decrease stored value by one.
Definition: icmap.c:1067
cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32)
Definition: icmap.c:866
cs_error_t icmap_get_uint16_r(const icmap_map_t map, const char *key_name, uint16_t *u16)
Definition: icmap.c:794
cs_error_t icmap_set_uint64(const char *key_name, uint64_t value)
Definition: icmap.c:623
int icmap_is_key_ro(const char *key_name)
Check in given key is read only.
Definition: icmap.c:1280
int32_t track_type
Definition: icmap.c:63
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:995
cs_error_t icmap_set_float_r(const icmap_map_t map, const char *key_name, float value)
Definition: icmap.c:559
cs_error_t icmap_fast_inc(const char *key_name)
Increase stored value by one.
Definition: icmap.c:1077
cs_error_t icmap_set_uint16_r(const icmap_map_t map, const char *key_name, uint16_t value)
Definition: icmap.c:529
cs_error_t icmap_set_int32(const char *key_name, int32_t value)
Definition: icmap.c:605
cs_error_t icmap_fast_inc_r(const icmap_map_t map, const char *key_name)
icmap_fast_inc_r
Definition: icmap.c:1072
cs_error_t icmap_get_int8_r(const icmap_map_t map, const char *key_name, int8_t *i8)
Definition: icmap.c:776
struct icmap_track * icmap_track_t
Track type.
Definition: icmap.h:128
cs_error_t icmap_get_uint64(const char *key_name, uint64_t *u64)
Definition: icmap.c:878
cs_error_t icmap_fast_dec_r(const icmap_map_t map, const char *key_name)
icmap_fast_dec_r
Definition: icmap.c:1082
cs_error_t icmap_delete_r(const icmap_map_t map, const char *key_name)
icmap_delete_r
Definition: icmap.c:647
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:706
cs_error_t icmap_dec_r(const icmap_map_t map, const char *key_name)
icmap_dec_r
Definition: icmap.c:1062
cs_error_t icmap_set_double(const char *key_name, double value)
Definition: icmap.c:635
cs_error_t icmap_init_r(icmap_map_t *result)
Initialize additional (local, reentrant) icmap_map.
Definition: icmap.c:203
cs_error_t icmap_get_string(const char *key_name, char **str)
Shortcut for icmap_get for string type.
Definition: icmap.c:896
struct icmap_map * icmap_map_t
icmap type.
Definition: icmap.h:118
cs_error_t icmap_set_uint8(const char *key_name, uint8_t value)
Definition: icmap.c:587
char type
Definition: totemrrp.c:518
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:1233
cs_error_t icmap_get_double(const char *key_name, double *dbl)
Definition: icmap.c:890
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:292
cs_error_t icmap_set_int64_r(const icmap_map_t map, const char *key_name, int64_t value)
Definition: icmap.c:547
cs_error_t icmap_get_int64_r(const icmap_map_t map, const char *key_name, int64_t *i64)
Definition: icmap.c:812
cs_error_t icmap_fast_adjust_int(const char *key_name, int32_t step)
icmap_fast_adjust_int
Definition: icmap.c:1044
icmap_iter_t icmap_iter_init_r(const icmap_map_t map, const char *prefix)
icmap_iter_init_r
Definition: icmap.c:1092
cs_error_t icmap_get_float(const char *key_name, float *flt)
Definition: icmap.c:884
icmap_iter_t icmap_iter_init(const char *prefix)
Initialize iterator with given prefix.
Definition: icmap.c:1097
icmap_value_types_t
Possible types of value.
Definition: icmap.h:58
cs_error_t icmap_fast_dec(const char *key_name)
Decrease stored value by one.
Definition: icmap.c:1087
cs_error_t icmap_get_uint16(const char *key_name, uint16_t *u16)
Definition: icmap.c:854
cs_error_t icmap_init(void)
Initialize global icmap.
Definition: icmap.c:221
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:930
qb_map_iter_t * icmap_iter_t
Itterator type.
Definition: icmap.h:123
cs_error_t icmap_get_int8(const char *key_name, int8_t *i8)
Definition: icmap.c:836
Structure passed as new_value and old_value in change callback.
Definition: icmap.h:91
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:1167