corosync  3.0.3
totempg.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2003-2005 MontaVista Software, Inc.
3  * Copyright (c) 2006-2011 Red Hat, Inc.
4  *
5  * All rights reserved.
6  *
7  * Author: Steven Dake (sdake@redhat.com)
8  *
9  * This software licensed under BSD license, the text of which follows:
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions are met:
13  *
14  * - Redistributions of source code must retain the above copyright notice,
15  * this list of conditions and the following disclaimer.
16  * - Redistributions in binary form must reproduce the above copyright notice,
17  * this list of conditions and the following disclaimer in the documentation
18  * and/or other materials provided with the distribution.
19  * - Neither the name of the MontaVista Software, Inc. nor the names of its
20  * contributors may be used to endorse or promote products derived from this
21  * software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33  * THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
43 #ifndef TOTEMPG_H_DEFINED
44 #define TOTEMPG_H_DEFINED
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 #include <sys/types.h>
51 #include <netinet/in.h>
52 #include "totem.h"
53 #include <qb/qbloop.h>
54 
55 struct totempg_group {
56  const void *group;
57  size_t group_len;
58 };
59 
60 #define TOTEMPG_AGREED 0
61 #define TOTEMPG_SAFE 1
62 
66 extern int totempg_initialize (
67  qb_loop_t* poll_handle,
69 );
70 
71 extern void totempg_finalize (void);
72 
73 extern int totempg_callback_token_create (void **handle_out,
75  int delete,
76  int (*callback_fn) (enum totem_callback_token_type type, const void *),
77  const void *data);
78 
79 extern void totempg_callback_token_destroy (void *handle);
80 
84 extern int totempg_groups_initialize (
85  void **instance,
86 
87  void (*deliver_fn) (
88  unsigned int nodeid,
89  const void *msg,
90  unsigned int msg_len,
91  int endian_conversion_required),
92 
93  void (*confchg_fn) (
94  enum totem_configuration_type configuration_type,
95  const unsigned int *member_list, size_t member_list_entries,
96  const unsigned int *left_list, size_t left_list_entries,
97  const unsigned int *joined_list, size_t joined_list_entries,
98  const struct memb_ring_id *ring_id));
99 
100 extern int totempg_groups_finalize (void *instance);
101 
102 extern int totempg_groups_join (
103  void *instance,
104  const struct totempg_group *groups,
105  size_t group_cnt);
106 
107 extern int totempg_groups_leave (
108  void *instance,
109  const struct totempg_group *groups,
110  size_t group_cnt);
111 
112 extern int totempg_groups_mcast_joined (
113  void *instance,
114  const struct iovec *iovec,
115  unsigned int iov_len,
116  int guarantee);
117 
119  void *instance,
120  const struct iovec *iovec,
121  unsigned int iov_len);
122 
124  int msg_count);
125 
126 extern int totempg_groups_mcast_groups (
127  void *instance,
128  int guarantee,
129  const struct totempg_group *groups,
130  size_t groups_cnt,
131  const struct iovec *iovec,
132  unsigned int iov_len);
133 
135  void *instance,
136  const struct totempg_group *groups,
137  size_t groups_cnt,
138  const struct iovec *iovec,
139  unsigned int iov_len);
140 
141 extern int totempg_ifaces_get (
142  unsigned int nodeid,
143  unsigned int *interface_id,
144  struct totem_ip_address *interfaces,
145  unsigned int interfaces_size,
146  char ***status,
147  unsigned int *iface_count);
148 
149 extern void* totempg_get_stats (void);
150 
152 
153 extern const char *totempg_ifaces_print (unsigned int nodeid);
154 
155 extern unsigned int totempg_my_nodeid_get (void);
156 
157 extern int totempg_my_family_get (void);
158 
159 extern int totempg_crypto_set (const char *cipher_type, const char *hash_type);
160 
161 extern void totempg_service_ready_register (
162  void (*totem_service_ready) (void));
163 
164 extern int totempg_iface_set (
165  struct totem_ip_address *interface_addr,
166  unsigned short ip_port,
167  unsigned int iface_no);
168 
169 extern int totempg_member_add (
170  const struct totem_ip_address *member,
171  int ring_no);
172 
173 extern int totempg_member_remove (
174  const struct totem_ip_address *member,
175  int ring_no);
176 
182 };
183 
184 void totempg_check_q_level(void *instance);
185 
186 typedef void (*totem_queue_level_changed_fn) (enum totem_q_level level);
188 
189 extern void totempg_threaded_mode_enable (void);
190 
191 extern void totempg_trans_ack (void);
192 
193 extern int totempg_reconfigure (void);
194 
195 extern void totempg_force_gather (void);
196 
197 #ifdef __cplusplus
198 }
199 #endif
200 
201 #endif /* TOTEMPG_H_DEFINED */
totempg_groups_join
int totempg_groups_join(void *instance, const struct totempg_group *groups, size_t group_cnt)
Definition: totempg.c:1182
totem.h
totempg_my_family_get
int totempg_my_family_get(void)
Definition: totempg.c:1530
totem_callback_token_type
totem_callback_token_type
The totem_callback_token_type enum.
Definition: coroapi.h:142
value
uint32_t value
Definition: exec/votequorum.c:2
totempg_groups_finalize
int totempg_groups_finalize(void *instance)
totem_configuration_type
totem_configuration_type
The totem_configuration_type enum.
Definition: coroapi.h:132
totempg_finalize
void totempg_finalize(void)
Definition: totempg.c:855
totempg_member_add
int totempg_member_add(const struct totem_ip_address *member, int ring_no)
Definition: totempg.c:1545
TOTEM_Q_LEVEL_LOW
@ TOTEM_Q_LEVEL_LOW
Definition: totempg.h:178
totempg_groups_joined_release
int totempg_groups_joined_release(int msg_count)
Definition: totempg.c:1346
type
char type
Definition: totem.h:2
totempg_groups_initialize
int totempg_groups_initialize(void **instance, void(*deliver_fn)(unsigned int nodeid, const void *msg, unsigned int msg_len, int endian_conversion_required), void(*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))
Initialize a groups instance.
Definition: totempg.c:1134
totempg_group::group_len
size_t group_len
Definition: totempg.h:57
totempg_groups_mcast_groups
int totempg_groups_mcast_groups(void *instance, int guarantee, const struct totempg_group *groups, size_t groups_cnt, const struct iovec *iovec, unsigned int iov_len)
Definition: totempg.c:1360
totem_queue_level_changed_fn
void(* totem_queue_level_changed_fn)(enum totem_q_level level)
Definition: totempg.h:186
totempg_groups_joined_reserve
int totempg_groups_joined_reserve(void *instance, const struct iovec *iovec, unsigned int iov_len)
Definition: totempg.c:1302
totempg_groups_mcast_joined
int totempg_groups_mcast_joined(void *instance, const struct iovec *iovec, unsigned int iov_len, int guarantee)
Definition: totempg.c:1232
totempg_service_ready_register
void totempg_service_ready_register(void(*totem_service_ready)(void))
Definition: totempg.c:1534
totempg_ifaces_get
int totempg_ifaces_get(unsigned int nodeid, unsigned int *interface_id, struct totem_ip_address *interfaces, unsigned int interfaces_size, char ***status, unsigned int *iface_count)
Definition: totempg.c:1450
totempg_force_gather
void totempg_force_gather(void)
Definition: totempg.c:1584
totempg_crypto_set
int totempg_crypto_set(const char *cipher_type, const char *hash_type)
Definition: totempg.c:1482
TOTEM_Q_LEVEL_CRITICAL
@ TOTEM_Q_LEVEL_CRITICAL
Definition: totempg.h:181
totempg_member_remove
int totempg_member_remove(const struct totem_ip_address *member, int ring_no)
Definition: totempg.c:1552
totempg_ifaces_print
const char * totempg_ifaces_print(unsigned int nodeid)
Definition: totempg.c:1494
totempg_check_q_level
void totempg_check_q_level(void *instance)
Definition: totempg.c:1294
totempg_reconfigure
int totempg_reconfigure(void)
Definition: totempg.c:1559
totempg_get_stats
void * totempg_get_stats(void)
Definition: totempg.c:1477
totem_config
Definition: totem.h:152
totempg_group
Definition: totempg.h:55
totempg_event_signal
void totempg_event_signal(enum totem_event_type type, int value)
Definition: totempg.c:1472
totempg_my_nodeid_get
unsigned int totempg_my_nodeid_get(void)
Definition: totempg.c:1525
totem_ip_address
The totem_ip_address struct.
Definition: coroapi.h:111
memb_ring_id
The memb_ring_id struct.
Definition: coroapi.h:122
totempg_groups_send_ok_groups
int totempg_groups_send_ok_groups(void *instance, const struct totempg_group *groups, size_t groups_cnt, const struct iovec *iovec, unsigned int iov_len)
Definition: totempg.c:1404
totem_event_type
totem_event_type
Definition: totem.h:259
nodeid
unsigned int nodeid
Definition: coroapi.h:0
totempg_callback_token_create
int totempg_callback_token_create(void **handle_out, enum totem_callback_token_type type, int delete, int(*callback_fn)(enum totem_callback_token_type type, const void *), const void *data)
Definition: totempg.c:1099
ring_id
struct memb_ring_id ring_id
Definition: totemsrp.c:4
totempg_callback_token_destroy
void totempg_callback_token_destroy(void *handle)
Definition: totempg.c:1118
totempg_group::group
const void * group
Definition: totempg.h:56
TOTEM_Q_LEVEL_HIGH
@ TOTEM_Q_LEVEL_HIGH
Definition: totempg.h:180
totempg_threaded_mode_enable
void totempg_threaded_mode_enable(void)
Definition: totempg.c:1573
totem_q_level
totem_q_level
Definition: totempg.h:177
totempg_queue_level_register_callback
void totempg_queue_level_register_callback(totem_queue_level_changed_fn)
Definition: totempg.c:1540
totempg_groups_leave
int totempg_groups_leave(void *instance, const struct totempg_group *groups, size_t group_cnt)
Definition: totempg.c:1214
totempg_trans_ack
void totempg_trans_ack(void)
Definition: totempg.c:1579
guarantee
int guarantee
Definition: totemsrp.c:6
totempg_initialize
int totempg_initialize(qb_loop_t *poll_handle, struct totem_config *totem_config)
Initialize the totem process groups abstraction.
Definition: totempg.c:802
TOTEM_Q_LEVEL_GOOD
@ TOTEM_Q_LEVEL_GOOD
Definition: totempg.h:179
totempg_iface_set
int totempg_iface_set(struct totem_ip_address *interface_addr, unsigned short ip_port, unsigned int iface_no)
Definition: totempg.c:1434