corosync 3.1.7
ipc_cpg.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2006-2015 Red Hat, Inc.
3 *
4 * All rights reserved.
5 *
6 * Author: Christine Caulfield (ccaulfie@redhat.com)
7 * Author: Jan Friesse (jfriesse@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#ifndef IPC_CPG_H_DEFINED
36#define IPC_CPG_H_DEFINED
37
38#include <netinet/in.h>
39#include <qb/qbipc_common.h>
40#include <corosync/corotypes.h>
41#include <corosync/mar_gen.h>
42
43#define CPG_ZC_PATH_LEN 128
44
62};
63
87};
88
98};
99
107};
108
112typedef struct {
113 uint32_t length __attribute__((aligned(8)));
116
121static inline void swab_mar_cpg_name_t (mar_cpg_name_t *to_swab)
122{
123 swab_mar_uint32_t (&to_swab->length);
124}
125
131static inline void marshall_from_mar_cpg_name_t (
132 struct cpg_name *dest,
133 const mar_cpg_name_t *src)
134{
135 dest->length = src->length;
136 memcpy (&dest->value, &src->value, CPG_MAX_NAME_LENGTH);
137}
138
144static inline void marshall_to_mar_cpg_name_t (
145 mar_cpg_name_t *dest,
146 const struct cpg_name *src)
147{
148 dest->length = src->length;
149 memcpy (&dest->value, &src->value, CPG_MAX_NAME_LENGTH);
150}
151
155typedef struct {
157 mar_uint32_t pid __attribute__((aligned(8)));
158 mar_uint32_t reason __attribute__((aligned(8)));
160
166static inline void marshall_from_mar_cpg_address_t (
167 struct cpg_address *dest,
168 const mar_cpg_address_t *src)
169{
170 dest->nodeid = src->nodeid;
171 dest->pid = src->pid;
172 dest->reason = src->reason;
173}
174
180static inline void marshall_to_mar_cpg_address_t (
181 mar_cpg_address_t *dest,
182 const struct cpg_address *src)
183{
184 dest->nodeid = src->nodeid;
185 dest->pid = src->pid;
186 dest->reason = src->reason;
187}
188
195static inline int mar_name_compare (
196 const mar_cpg_name_t *g1,
197 const mar_cpg_name_t *g2)
198{
199 return (g1->length == g2->length?
200 memcmp (g1->value, g2->value, g1->length):
201 g1->length - g2->length);
202}
203
207typedef struct {
212
218static inline void marshall_from_mar_cpg_iteration_description_t(
219 struct cpg_iteration_description_t *dest,
221{
222 dest->nodeid = src->nodeid;
223 dest->pid = src->pid;
224 marshall_from_mar_cpg_name_t (&dest->group, &src->group);
225};
226
230typedef struct {
234
240static inline void marshall_from_mar_cpg_ring_id_t (
241 struct cpg_ring_id *dest,
242 const mar_cpg_ring_id_t *src)
243{
244 dest->nodeid = src->nodeid;
245 dest->seq = src->seq;
246}
247
252 struct qb_ipc_request_header header __attribute__((aligned(8)));
253 mar_cpg_name_t group_name __attribute__((aligned(8)));
254 mar_uint32_t pid __attribute__((aligned(8)));
256};
257
262 struct qb_ipc_response_header header __attribute__((aligned(8)));
263};
264
269 struct qb_ipc_request_header header __attribute__((aligned(8)));
270};
271
276 struct qb_ipc_response_header header __attribute__((aligned(8)));
277};
278
283 struct qb_ipc_request_header header __attribute__((aligned(8)));
284};
285
290 struct qb_ipc_response_header header __attribute__((aligned(8)));
291 mar_uint32_t local_nodeid __attribute__((aligned(8)));
292};
293
298 struct qb_ipc_response_header header __attribute__((aligned(8)));
299};
300
305 struct qb_ipc_response_header header __attribute__((aligned(8)));
307 mar_uint32_t msglen __attribute__((aligned(8)));
308 mar_uint8_t message[] __attribute__((aligned(8)));
309};
310
315 struct qb_ipc_response_header header __attribute__((aligned(8)));
317 mar_uint32_t msglen __attribute__((aligned(8)));
318 mar_uint32_t fraglen __attribute__((aligned(8)));
320 mar_uint8_t message[] __attribute__((aligned(8)));
321};
322
327 struct qb_ipc_response_header header __attribute__((aligned(8)));
328};
329
334 struct qb_ipc_response_header header __attribute__((aligned(8)));
335 mar_cpg_name_t group_name __attribute__((aligned(8)));
336 mar_uint32_t msglen __attribute__((aligned(8)));
338 mar_uint32_t pid __attribute__((aligned(8)));
339 mar_uint8_t message[] __attribute__((aligned(8)));
340};
341
346 struct qb_ipc_response_header header __attribute__((aligned(8)));
347 mar_cpg_name_t group_name __attribute__((aligned(8)));
348 mar_uint32_t msglen __attribute__((aligned(8)));
349 mar_uint32_t fraglen __attribute__((aligned(8)));
351 mar_uint32_t pid __attribute__((aligned(8)));
353 mar_uint8_t message[] __attribute__((aligned(8)));
354};
355
360 struct qb_ipc_response_header header __attribute__((aligned(8)));
361 mar_uint32_t flow_control_state __attribute__((aligned(8)));
362};
363
368 struct qb_ipc_request_header header __attribute__((aligned(8)));
369 mar_cpg_name_t group_name __attribute__((aligned(8)));
370};
371
376 struct qb_ipc_response_header header __attribute__((aligned(8)));
377 mar_uint32_t member_count __attribute__((aligned(8)));
379};
380
385 struct qb_ipc_response_header header __attribute__((aligned(8)));
386 mar_cpg_name_t group_name __attribute__((aligned(8)));
387 mar_uint32_t member_list_entries __attribute__((aligned(8)));
388 mar_uint32_t joined_list_entries __attribute__((aligned(8)));
389 mar_uint32_t left_list_entries __attribute__((aligned(8)));
391// struct cpg_address left_list[];
392// struct cpg_address joined_list[];
393};
394
399 struct qb_ipc_response_header header __attribute__((aligned(8)));
401 mar_uint32_t member_list_entries __attribute__((aligned(8)));
403};
404
409 struct qb_ipc_request_header header __attribute__((aligned(8)));
410 mar_cpg_name_t group_name __attribute__((aligned(8)));
411 mar_uint32_t pid __attribute__((aligned(8)));
412};
413
418 struct qb_ipc_response_header header __attribute__((aligned(8)));
419};
420
425 struct qb_ipc_request_header header __attribute__((aligned(8)));
426 mar_cpg_name_t group_name __attribute__((aligned(8)));
427 mar_uint32_t iteration_type __attribute__((aligned(8)));
428};
429
434 struct qb_ipc_response_header header __attribute__((aligned(8)));
435 hdb_handle_t iteration_handle __attribute__((aligned(8)));
436};
437
442 struct qb_ipc_request_header header __attribute__((aligned(8)));
443 hdb_handle_t iteration_handle __attribute__((aligned(8)));
444};
445
450 struct qb_ipc_response_header header __attribute__((aligned(8)));
452};
453
458 struct qb_ipc_request_header header __attribute__((aligned(8)));
459 hdb_handle_t iteration_handle __attribute__((aligned(8)));
460};
461
466 struct qb_ipc_response_header header __attribute__((aligned(8)));
467};
468
472typedef struct {
473 struct qb_ipc_request_header header __attribute__((aligned(8)));
474 size_t map_size __attribute__((aligned(8)));
475 char path_to_file[CPG_ZC_PATH_LEN] __attribute__((aligned(8)));
477
481typedef struct {
482 struct qb_ipc_request_header header __attribute__((aligned(8)));
483 size_t map_size __attribute__((aligned(8)));
484 uint64_t server_address __attribute__((aligned(8)));
486
490typedef struct {
491 struct qb_ipc_request_header header __attribute__((aligned(8)));
492 uint64_t server_address __attribute__((aligned(8)));
494
501};
502#endif /* IPC_CPG_H_DEFINED */
unsigned long long seq
Definition: coroapi.h:1
unsigned int nodeid
Definition: coroapi.h:0
#define PROCESSOR_COUNT_MAX
Definition: coroapi.h:96
uint32_t flags
uint32_t value
#define CPG_MAX_NAME_LENGTH
Definition: cpg.h:116
qb_handle_t hdb_handle_t
Definition: hdb.h:52
lib_cpg_partial_types
The lib_cpg_partial_types enum.
Definition: ipc_cpg.h:103
@ LIBCPG_PARTIAL_FIRST
Definition: ipc_cpg.h:104
@ LIBCPG_PARTIAL_LAST
Definition: ipc_cpg.h:106
@ LIBCPG_PARTIAL_CONTINUED
Definition: ipc_cpg.h:105
#define CPG_ZC_PATH_LEN
Definition: ipc_cpg.h:43
req_cpg_types
The req_cpg_types enum.
Definition: ipc_cpg.h:48
@ MESSAGE_REQ_CPG_ZC_EXECUTE
Definition: ipc_cpg.h:60
@ MESSAGE_REQ_CPG_LOCAL_GET
Definition: ipc_cpg.h:53
@ MESSAGE_REQ_CPG_ITERATIONFINALIZE
Definition: ipc_cpg.h:56
@ MESSAGE_REQ_CPG_PARTIAL_MCAST
Definition: ipc_cpg.h:61
@ MESSAGE_REQ_CPG_ZC_ALLOC
Definition: ipc_cpg.h:58
@ MESSAGE_REQ_CPG_JOIN
Definition: ipc_cpg.h:49
@ MESSAGE_REQ_CPG_ZC_FREE
Definition: ipc_cpg.h:59
@ MESSAGE_REQ_CPG_ITERATIONINITIALIZE
Definition: ipc_cpg.h:54
@ MESSAGE_REQ_CPG_FINALIZE
Definition: ipc_cpg.h:57
@ MESSAGE_REQ_CPG_MEMBERSHIP
Definition: ipc_cpg.h:52
@ MESSAGE_REQ_CPG_LEAVE
Definition: ipc_cpg.h:50
@ MESSAGE_REQ_CPG_ITERATIONNEXT
Definition: ipc_cpg.h:55
@ MESSAGE_REQ_CPG_MCAST
Definition: ipc_cpg.h:51
res_cpg_types
The res_cpg_types enum.
Definition: ipc_cpg.h:67
@ MESSAGE_RES_CPG_ITERATIONFINALIZE
Definition: ipc_cpg.h:79
@ MESSAGE_RES_CPG_MEMBERSHIP
Definition: ipc_cpg.h:71
@ MESSAGE_RES_CPG_ZC_ALLOC
Definition: ipc_cpg.h:82
@ MESSAGE_RES_CPG_LEAVE
Definition: ipc_cpg.h:69
@ MESSAGE_RES_CPG_MCAST
Definition: ipc_cpg.h:70
@ MESSAGE_RES_CPG_PARTIAL_DELIVER_CALLBACK
Definition: ipc_cpg.h:85
@ MESSAGE_RES_CPG_ZC_EXECUTE
Definition: ipc_cpg.h:84
@ MESSAGE_RES_CPG_FINALIZE
Definition: ipc_cpg.h:80
@ MESSAGE_RES_CPG_DELIVER_CALLBACK
Definition: ipc_cpg.h:73
@ MESSAGE_RES_CPG_TOTEM_CONFCHG_CALLBACK
Definition: ipc_cpg.h:81
@ MESSAGE_RES_CPG_ZC_FREE
Definition: ipc_cpg.h:83
@ MESSAGE_RES_CPG_ITERATIONNEXT
Definition: ipc_cpg.h:78
@ MESSAGE_RES_CPG_CONFCHG_CALLBACK
Definition: ipc_cpg.h:72
@ MESSAGE_RES_CPG_FLOWCONTROL_CALLBACK
Definition: ipc_cpg.h:76
@ MESSAGE_RES_CPG_PARTIAL_SEND
Definition: ipc_cpg.h:86
@ MESSAGE_RES_CPG_ITERATIONINITIALIZE
Definition: ipc_cpg.h:77
@ MESSAGE_RES_CPG_LOCAL_GET
Definition: ipc_cpg.h:75
@ MESSAGE_RES_CPG_JOIN
Definition: ipc_cpg.h:68
@ MESSAGE_RES_CPG_FLOW_CONTROL_STATE_SET
Definition: ipc_cpg.h:74
lib_cpg_confchg_reason
The lib_cpg_confchg_reason enum.
Definition: ipc_cpg.h:92
@ CONFCHG_CPG_REASON_LEAVE
Definition: ipc_cpg.h:94
@ CONFCHG_CPG_REASON_PROCDOWN
Definition: ipc_cpg.h:97
@ CONFCHG_CPG_REASON_NODEUP
Definition: ipc_cpg.h:96
@ CONFCHG_CPG_REASON_JOIN
Definition: ipc_cpg.h:93
@ CONFCHG_CPG_REASON_NODEDOWN
Definition: ipc_cpg.h:95
uint32_t mar_uint32_t
Definition: mar_gen.h:53
uint8_t mar_uint8_t
Definition: mar_gen.h:51
uint64_t mar_uint64_t
Definition: mar_gen.h:54
coroipcs_zc_header struct
Definition: ipc_cpg.h:498
uint64_t server_address
Definition: ipc_cpg.h:500
The cpg_address struct.
Definition: cpg.h:110
uint32_t reason
Definition: cpg.h:113
uint32_t pid
Definition: cpg.h:112
uint32_t nodeid
Definition: cpg.h:111
The cpg_iteration_description_t struct.
Definition: cpg.h:130
struct cpg_name group
Definition: cpg.h:131
The cpg_name struct.
Definition: cpg.h:120
char value[CPG_MAX_NAME_LENGTH]
Definition: cpg.h:122
uint32_t length
Definition: cpg.h:121
The cpg_ring_id struct.
Definition: cpg.h:139
uint64_t seq
Definition: cpg.h:141
uint32_t nodeid
Definition: cpg.h:140
mar_cpg_address_t struct
Definition: ipc_cpg.h:155
mar_uint32_t nodeid __attribute__((aligned(8)))
mar_uint32_t pid __attribute__((aligned(8)))
mar_uint32_t reason __attribute__((aligned(8)))
mar_cpg_iteration_description_t struct
Definition: ipc_cpg.h:207
mar_cpg_name_t struct
Definition: ipc_cpg.h:112
char value[CPG_MAX_NAME_LENGTH] __attribute__((aligned(8)))
uint32_t length __attribute__((aligned(8)))
mar_cpg_ring_id_t struct
Definition: ipc_cpg.h:230
mar_uint64_t seq __attribute__((aligned(8)))
mar_uint32_t nodeid __attribute__((aligned(8)))
mar_req_coroipcc_zc_alloc_t struct
Definition: ipc_cpg.h:472
size_t map_size __attribute__((aligned(8)))
char path_to_file[CPG_ZC_PATH_LEN] __attribute__((aligned(8)))
mar_req_coroipcc_zc_execute_t struct
Definition: ipc_cpg.h:490
uint64_t server_address __attribute__((aligned(8)))
mar_req_coroipcc_zc_free_t struct
Definition: ipc_cpg.h:481
uint64_t server_address __attribute__((aligned(8)))
size_t map_size __attribute__((aligned(8)))
The req_lib_cpg_finalize struct.
Definition: ipc_cpg.h:268
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_iterationfinalize struct.
Definition: ipc_cpg.h:457
hdb_handle_t iteration_handle __attribute__((aligned(8)))
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_iterationinitialize struct.
Definition: ipc_cpg.h:424
mar_cpg_name_t group_name __attribute__((aligned(8)))
mar_uint32_t iteration_type __attribute__((aligned(8)))
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_iterationnext struct.
Definition: ipc_cpg.h:441
struct qb_ipc_request_header header __attribute__((aligned(8)))
hdb_handle_t iteration_handle __attribute__((aligned(8)))
The req_lib_cpg_join struct.
Definition: ipc_cpg.h:251
mar_cpg_name_t group_name __attribute__((aligned(8)))
mar_uint32_t pid __attribute__((aligned(8)))
mar_uint32_t flags __attribute__((aligned(8)))
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_leave struct.
Definition: ipc_cpg.h:408
mar_uint32_t pid __attribute__((aligned(8)))
mar_cpg_name_t group_name __attribute__((aligned(8)))
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_local_get struct.
Definition: ipc_cpg.h:282
struct qb_ipc_request_header header __attribute__((aligned(8)))
The req_lib_cpg_mcast struct.
Definition: ipc_cpg.h:304
mar_uint32_t guarantee __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_uint32_t msglen __attribute__((aligned(8)))
mar_uint8_t message[] __attribute__((aligned(8)))
The req_lib_cpg_membership_get struct.
Definition: ipc_cpg.h:367
struct qb_ipc_request_header header __attribute__((aligned(8)))
mar_cpg_name_t group_name __attribute__((aligned(8)))
The req_lib_cpg_partial_mcast struct.
Definition: ipc_cpg.h:314
mar_uint32_t msglen __attribute__((aligned(8)))
mar_uint32_t guarantee __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_uint8_t message[] __attribute__((aligned(8)))
mar_uint32_t type __attribute__((aligned(8)))
mar_uint32_t fraglen __attribute__((aligned(8)))
The res_lib_cpg_confchg_callback struct.
Definition: ipc_cpg.h:384
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_cpg_address_t member_list[]
Definition: ipc_cpg.h:390
mar_cpg_name_t group_name __attribute__((aligned(8)))
mar_uint32_t member_list_entries __attribute__((aligned(8)))
mar_uint32_t left_list_entries __attribute__((aligned(8)))
mar_uint32_t joined_list_entries __attribute__((aligned(8)))
Message from another node.
Definition: ipc_cpg.h:333
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_uint32_t nodeid __attribute__((aligned(8)))
mar_cpg_name_t group_name __attribute__((aligned(8)))
mar_uint32_t msglen __attribute__((aligned(8)))
mar_uint32_t pid __attribute__((aligned(8)))
mar_uint8_t message[] __attribute__((aligned(8)))
The res_lib_cpg_finalize struct.
Definition: ipc_cpg.h:275
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_flowcontrol_callback struct.
Definition: ipc_cpg.h:359
mar_uint32_t flow_control_state __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_iterationfinalize struct.
Definition: ipc_cpg.h:465
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_iterationinitialize struct.
Definition: ipc_cpg.h:433
hdb_handle_t iteration_handle __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_iterationnext struct.
Definition: ipc_cpg.h:449
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_cpg_iteration_description_t description __attribute__((aligned(8)))
The res_lib_cpg_join struct.
Definition: ipc_cpg.h:261
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_leave struct.
Definition: ipc_cpg.h:417
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_local_get struct.
Definition: ipc_cpg.h:289
mar_uint32_t local_nodeid __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_mcast struct.
Definition: ipc_cpg.h:326
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_membership_get struct.
Definition: ipc_cpg.h:375
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_uint32_t member_count __attribute__((aligned(8)))
mar_cpg_address_t member_list[PROCESSOR_COUNT_MAX]
Definition: ipc_cpg.h:378
The res_lib_cpg_partial_deliver_callback struct.
Definition: ipc_cpg.h:345
mar_uint32_t pid __attribute__((aligned(8)))
mar_uint32_t nodeid __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
mar_uint32_t fraglen __attribute__((aligned(8)))
mar_uint32_t type __attribute__((aligned(8)))
mar_cpg_name_t group_name __attribute__((aligned(8)))
mar_uint32_t msglen __attribute__((aligned(8)))
mar_uint8_t message[] __attribute__((aligned(8)))
The res_lib_cpg_partial_send struct.
Definition: ipc_cpg.h:297
struct qb_ipc_response_header header __attribute__((aligned(8)))
The res_lib_cpg_totem_confchg_callback struct.
Definition: ipc_cpg.h:398
mar_cpg_ring_id_t ring_id __attribute__((aligned(8)))
mar_uint32_t member_list_entries __attribute__((aligned(8)))
struct qb_ipc_response_header header __attribute__((aligned(8)))
typedef __attribute__
char type
Definition: totem.h:2
int guarantee
Definition: totemsrp.c:6
struct memb_ring_id ring_id
Definition: totemsrp.c:4
struct totem_message_header header
Definition: totemsrp.c:0