corosync  3.1.2
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 
112 typedef struct {
113  uint32_t length __attribute__((aligned(8)));
114  char value[CPG_MAX_NAME_LENGTH] __attribute__((aligned(8)));
116 
121 static inline void swab_mar_cpg_name_t (mar_cpg_name_t *to_swab)
122 {
123  swab_mar_uint32_t (&to_swab->length);
124 }
125 
131 static 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 
144 static 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 
155 typedef struct {
156  mar_uint32_t nodeid __attribute__((aligned(8)));
157  mar_uint32_t pid __attribute__((aligned(8)));
158  mar_uint32_t reason __attribute__((aligned(8)));
160 
166 static 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 
180 static 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 
195 static 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 
207 typedef struct {
212 
218 static 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 
230 typedef struct {
231  mar_uint32_t nodeid __attribute__((aligned(8)));
232  mar_uint64_t seq __attribute__((aligned(8)));
234 
240 static 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)));
255  mar_uint32_t flags __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)));
306  mar_uint32_t guarantee __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)));
316  mar_uint32_t guarantee __attribute__((aligned(8)));
317  mar_uint32_t msglen __attribute__((aligned(8)));
318  mar_uint32_t fraglen __attribute__((aligned(8)));
319  mar_uint32_t type __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)));
337  mar_uint32_t nodeid __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)));
350  mar_uint32_t nodeid __attribute__((aligned(8)));
351  mar_uint32_t pid __attribute__((aligned(8)));
352  mar_uint32_t type __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)));
390  mar_cpg_address_t member_list[];
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)));
402  mar_uint32_t member_list[];
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)));
451  mar_cpg_iteration_description_t description __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 
472 typedef 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 
481 typedef 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 
490 typedef struct {
491  struct qb_ipc_request_header header __attribute__((aligned(8)));
492  uint64_t server_address __attribute__((aligned(8)));
494 
499  int map_size;
500  uint64_t server_address;
501 };
502 #endif /* IPC_CPG_H_DEFINED */
uint32_t pid
Definition: cpg.h:112
The cpg_ring_id struct.
Definition: cpg.h:139
req_cpg_types
The req_cpg_types enum.
Definition: ipc_cpg.h:48
mar_req_coroipcc_zc_free_t struct
Definition: ipc_cpg.h:481
#define CPG_MAX_NAME_LENGTH
Definition: cpg.h:116
lib_cpg_confchg_reason
The lib_cpg_confchg_reason enum.
Definition: ipc_cpg.h:92
mar_cpg_address_t struct
Definition: ipc_cpg.h:155
uint32_t value
The req_lib_cpg_join struct.
Definition: ipc_cpg.h:251
mar_req_coroipcc_zc_alloc_t struct
Definition: ipc_cpg.h:472
The cpg_name struct.
Definition: cpg.h:120
The cpg_address struct.
Definition: cpg.h:110
The res_lib_cpg_partial_deliver_callback struct.
Definition: ipc_cpg.h:345
The req_lib_cpg_mcast struct.
Definition: ipc_cpg.h:304
The res_lib_cpg_membership_get struct.
Definition: ipc_cpg.h:375
The res_lib_cpg_iterationnext struct.
Definition: ipc_cpg.h:449
int guarantee
Definition: totemsrp.c:266
The cpg_iteration_description_t struct.
Definition: cpg.h:130
The res_lib_cpg_iterationinitialize struct.
Definition: ipc_cpg.h:433
The req_lib_cpg_local_get struct.
Definition: ipc_cpg.h:282
coroipcs_zc_header struct
Definition: ipc_cpg.h:498
unsigned long long seq
Definition: coroapi.h:76
The res_lib_cpg_partial_send struct.
Definition: ipc_cpg.h:297
uint64_t server_address
Definition: ipc_cpg.h:500
The req_lib_cpg_iterationinitialize struct.
Definition: ipc_cpg.h:424
The res_lib_cpg_join struct.
Definition: ipc_cpg.h:261
uint64_t mar_uint64_t
Definition: mar_gen.h:54
uint32_t flags
mar_req_coroipcc_zc_execute_t struct
Definition: ipc_cpg.h:490
The res_lib_cpg_mcast struct.
Definition: ipc_cpg.h:326
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]
Definition: cpg.h:122
The req_lib_cpg_leave struct.
Definition: ipc_cpg.h:408
The req_lib_cpg_iterationfinalize struct.
Definition: ipc_cpg.h:457
uint8_t mar_uint8_t
Definition: mar_gen.h:51
struct cpg_name group
Definition: cpg.h:131
The res_lib_cpg_flowcontrol_callback struct.
Definition: ipc_cpg.h:359
uint32_t nodeid
Definition: cpg.h:111
The res_lib_cpg_finalize struct.
Definition: ipc_cpg.h:275
uint32_t nodeid
Definition: cpg.h:140
#define CPG_ZC_PATH_LEN
Definition: ipc_cpg.h:43
uint32_t mar_uint32_t
Definition: mar_gen.h:53
The res_lib_cpg_local_get struct.
Definition: ipc_cpg.h:289
#define PROCESSOR_COUNT_MAX
Definition: coroapi.h:96
The req_lib_cpg_finalize struct.
Definition: ipc_cpg.h:268
qb_handle_t hdb_handle_t
Definition: hdb.h:52
The res_lib_cpg_iterationfinalize struct.
Definition: ipc_cpg.h:465
The req_lib_cpg_partial_mcast struct.
Definition: ipc_cpg.h:314
uint32_t reason
Definition: cpg.h:113
The req_lib_cpg_iterationnext struct.
Definition: ipc_cpg.h:441
The res_lib_cpg_confchg_callback struct.
Definition: ipc_cpg.h:384
res_cpg_types
The res_cpg_types enum.
Definition: ipc_cpg.h:67
typedef __attribute__
char type
Definition: totem.h:55
The req_lib_cpg_membership_get struct.
Definition: ipc_cpg.h:367
uint32_t length
Definition: cpg.h:121
The res_lib_cpg_leave struct.
Definition: ipc_cpg.h:417
unsigned int nodeid
Definition: coroapi.h:75
struct memb_ring_id ring_id
Definition: totemsrp.c:264
mar_cpg_ring_id_t struct
Definition: ipc_cpg.h:230
uint64_t seq
Definition: cpg.h:141
lib_cpg_partial_types
The lib_cpg_partial_types enum.
Definition: ipc_cpg.h:103
The res_lib_cpg_totem_confchg_callback struct.
Definition: ipc_cpg.h:398
Message from another node.
Definition: ipc_cpg.h:333