1/*
2 * Please do not edit this file.
3 * It was generated using rpcgen.
4 */
5
6#ifndef _XCOM_VP_H_RPCGEN
7#define _XCOM_VP_H_RPCGEN
8
9#include <rpc/rpc.h>
10
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16/* Copyright (c) 2010, 2021, Oracle and/or its affiliates.
17
18   This program is free software; you can redistribute it and/or modify
19   it under the terms of the GNU General Public License, version 2.0,
20   as published by the Free Software Foundation.
21
22   This program is also distributed with certain software (including
23   but not limited to OpenSSL) that is licensed under separate terms,
24   as designated in a particular file or component or in included license
25   documentation.  The authors of MySQL hereby grant you an additional
26   permission to link the program and your derivative works with the
27   separately licensed software that they have included with MySQL.
28
29   This program is distributed in the hope that it will be useful,
30   but WITHOUT ANY WARRANTY; without even the implied warranty of
31   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
32   GNU General Public License, version 2.0, for more details.
33
34   You should have received a copy of the GNU General Public License
35   along with this program; if not, write to the Free Software
36   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA */
37
38#include "xcom_vp_platform.h"
39
40enum xcom_proto {
41	x_unknown_proto = 0,
42	x_1_0 = 1,
43	x_1_1 = 2,
44	x_1_2 = 3
45};
46typedef enum xcom_proto xcom_proto;
47
48
49struct x_proto_range {
50	xcom_proto min_proto;
51	xcom_proto max_proto;
52};
53typedef struct x_proto_range x_proto_range;
54
55enum delivery_status {
56	delivery_ok = 0,
57	delivery_failure = 1,
58};
59typedef enum delivery_status delivery_status;
60
61enum cons_type {
62	cons_majority = 0,
63	cons_all = 1,
64	cons_none = 2,
65};
66typedef enum cons_type cons_type;
67
68typedef uint32_t node_no;
69
70struct synode_no {
71	uint32_t group_id;
72	uint64_t msgno;
73	node_no node;
74};
75typedef struct synode_no synode_no;
76
77struct trans_id {
78	synode_no cfg;
79	uint32_t pc;
80};
81typedef struct trans_id trans_id;
82
83typedef struct {
84	u_int node_set_len;
85	bool_t *node_set_val;
86} node_set;
87
88struct blob {
89	struct {
90		u_int data_len;
91		char *data_val;
92	} data;
93};
94typedef struct blob blob;
95
96struct node_address_1_0 {
97	char *address;
98	blob uuid;
99};
100typedef struct node_address_1_0 node_address_1_0;
101
102typedef struct {
103	u_int node_list_1_0_len;
104	node_address_1_0 *node_list_1_0_val;
105} node_list_1_0;
106
107struct node_address {
108	char *address;
109	blob uuid;
110	x_proto_range proto;
111};
112typedef struct node_address node_address;
113
114typedef struct {
115	u_int node_list_len;
116	node_address *node_list_val;
117} node_list;
118/*
119	Custom xdr functions to coerce rpcgen into handling different protocol versions.
120	Protocol version is passed in an extended XDR object.
121*/
122
123#ifndef VERSION_CONTROL
124#define VERSION_CONTROL
125
126extern xcom_proto const my_min_xcom_version; /* The minimum protocol version I am able to understand */
127extern xcom_proto const my_xcom_version; /* The maximum protocol version I am able to understand */
128
129typedef node_list node_list_1_1; /* Alias for real type to avoid generating xdr call to xdr_node_list */
130
131extern bool_t xdr_node_list_1_1 (XDR *, node_list_1_1*);
132
133#endif
134#ifndef CHECKED_DATA
135#define CHECKED_DATA
136typedef struct {
137 u_int data_len;
138 char *data_val;
139} checked_data;
140extern bool_t xdr_checked_data (XDR *, checked_data*);
141#endif
142
143enum cargo_type {
144	unified_boot_type = 0,
145	xcom_boot_type = 1,
146	xcom_set_group = 2,
147	xcom_recover = 3,
148	app_type = 4,
149	query_type = 5,
150	query_next_log = 6,
151	exit_type = 7,
152	reset_type = 8,
153	begin_trans = 9,
154	prepared_trans = 10,
155	abort_trans = 11,
156	view_msg = 12,
157	remove_reset_type = 13,
158	add_node_type = 14,
159	remove_node_type = 15,
160	enable_arbitrator = 16,
161	disable_arbitrator = 17,
162	force_config_type = 18,
163	x_terminate_and_exit = 19,
164	set_cache_limit = 20,
165};
166typedef enum cargo_type cargo_type;
167
168typedef struct {
169	u_int node_no_array_len;
170	node_no *node_no_array_val;
171} node_no_array;
172
173typedef struct {
174	u_int synode_no_array_len;
175	synode_no *synode_no_array_val;
176} synode_no_array;
177
178struct uncommitted_list {
179	uint32_t active;
180	synode_no_array vers;
181};
182typedef struct uncommitted_list uncommitted_list;
183
184struct repository {
185	synode_no vers;
186	synode_no_array msg_list;
187	uncommitted_list u_list;
188};
189typedef struct repository repository;
190
191struct x_error {
192	int32_t nodeid;
193	int32_t code;
194	char *message;
195};
196typedef struct x_error x_error;
197
198struct trans_data {
199	trans_id tid;
200	int32_t pc;
201	char *cluster_name;
202	x_error errmsg;
203};
204typedef struct trans_data trans_data;
205
206struct app_u {
207	cargo_type c_t;
208	union {
209		node_list_1_1 nodes;
210		repository rep;
211		checked_data data;
212		trans_data td;
213		node_set present;
214		uint64_t cache_limit;
215	} app_u_u;
216};
217typedef struct app_u app_u;
218
219enum recover_action {
220	rec_block = 0,
221	rec_delay = 1,
222	rec_send = 2,
223};
224typedef enum recover_action recover_action;
225
226struct app_data {
227	synode_no unique_id;
228	uint32_t group_id;
229	uint64_t lsn;
230	synode_no app_key;
231	cons_type consensus;
232	double expiry_time;
233	bool_t notused;
234	bool_t log_it;
235	bool_t chosen;
236	recover_action recover;
237	app_u body;
238	struct app_data *next;
239};
240typedef struct app_data app_data;
241
242typedef app_data *app_data_ptr;
243
244typedef struct {
245	u_int app_data_ptr_array_len;
246	app_data_ptr *app_data_ptr_array_val;
247} app_data_ptr_array;
248
249typedef app_data_ptr *app_data_list;
250
251struct key_range {
252	synode_no k1;
253	synode_no k2;
254};
255typedef struct key_range key_range;
256
257typedef uint32_t bit_mask;
258
259#define BITS_PER_BYTE 8
260#define MASK_BITS ((uint32_t)(sizeof (bit_mask) * BITS_PER_BYTE)) /* bits per mask */
261#define howmany_words(x, y) (((x)+((y)-1))/(y))
262
263
264struct bit_set {
265	struct {
266		u_int bits_len;
267		bit_mask *bits_val;
268	} bits;
269};
270typedef struct bit_set bit_set;
271#define BIT_OP(__n, __p, __op, __inv) ((__p)->bits.bits_val[(__n)/MASK_BITS] __op __inv (1u << ((__n) % MASK_BITS)))
272#define BIT_XOR(__n, __p) BIT_OP(__n, __p, ^=, )
273#define BIT_SET(__n, __p) BIT_OP(__n, __p, |=, )
274#define BIT_CLR(__n, __p) BIT_OP(__n, __p, &=, ~)
275#define BIT_ISSET(__n, __p) (BIT_OP(__n, __p, &, ) != 0ul)
276#define BIT_ZERO(__p) memset((__p)->bits.bits_val, 0, (__p)->bits.bits_len * sizeof(*(__p)->bits.bits_val))
277extern bit_set *new_bit_set(uint32_t bits);
278extern bit_set *clone_bit_set(bit_set *orig);
279extern void free_bit_set(bit_set *bs);
280
281struct ballot {
282	int32_t cnt;
283	node_no node;
284};
285typedef struct ballot ballot;
286
287enum pax_op {
288	client_msg = 0,
289	initial_op = 1,
290	prepare_op = 2,
291	ack_prepare_op = 3,
292	ack_prepare_empty_op = 4,
293	accept_op = 5,
294	ack_accept_op = 6,
295	learn_op = 7,
296	recover_learn_op = 8,
297	multi_prepare_op = 9,
298	multi_ack_prepare_empty_op = 10,
299	multi_accept_op = 11,
300	multi_ack_accept_op = 12,
301	multi_learn_op = 13,
302	skip_op = 14,
303	i_am_alive_op = 15,
304	are_you_alive_op = 16,
305	need_boot_op = 17,
306	snapshot_op = 18,
307	die_op = 19,
308	read_op = 20,
309	gcs_snapshot_op = 21,
310	xcom_client_reply = 22,
311	tiny_learn_op = 23,
312	LAST_OP = 24,
313};
314typedef enum pax_op pax_op;
315
316enum pax_msg_type {
317	normal = 0,
318	no_op = 1,
319	multi_no_op = 2,
320};
321typedef enum pax_msg_type pax_msg_type;
322
323enum start_t {
324	IDLE = 0,
325	BOOT = 1,
326	RECOVER = 2,
327};
328typedef enum start_t start_t;
329
330struct snapshot {
331	synode_no vers;
332	app_data_ptr_array snap;
333	uncommitted_list u_list;
334};
335typedef struct snapshot snapshot;
336
337struct config {
338	synode_no start;
339	synode_no boot_key;
340	node_list_1_1 nodes;
341};
342typedef struct config config;
343
344typedef config *config_ptr;
345
346typedef struct {
347	u_int configs_len;
348	config_ptr *configs_val;
349} configs;
350
351struct gcs_snapshot {
352	synode_no log_start;
353	configs cfg;
354	blob app_snap;
355};
356typedef struct gcs_snapshot gcs_snapshot;
357
358enum client_reply_code {
359	REQUEST_OK = 0,
360	REQUEST_FAIL = 1,
361	REQUEST_RETRY = 2,
362};
363typedef enum client_reply_code client_reply_code;
364
365struct pax_msg_1_1 {
366	node_no to;
367	node_no from;
368	uint32_t group_id;
369	synode_no max_synode;
370	start_t start_type;
371	ballot reply_to;
372	ballot proposal;
373	pax_op op;
374	synode_no synode;
375	pax_msg_type msg_type;
376	bit_set *receivers;
377	app_data *a;
378	snapshot *snap;
379	gcs_snapshot *gcs_snap;
380	client_reply_code cli_err;
381	bool_t force_delivery;
382	int32_t refcnt;
383};
384typedef struct pax_msg_1_1 pax_msg_1_1;
385
386struct pax_msg_1_2 {
387	node_no to;
388	node_no from;
389	uint32_t group_id;
390	synode_no max_synode;
391	start_t start_type;
392	ballot reply_to;
393	ballot proposal;
394	pax_op op;
395	synode_no synode;
396	pax_msg_type msg_type;
397	bit_set *receivers;
398	app_data *a;
399	snapshot *snap;
400	gcs_snapshot *gcs_snap;
401	client_reply_code cli_err;
402	bool_t force_delivery;
403	int32_t refcnt;
404	synode_no delivered_msg;
405};
406typedef struct pax_msg_1_2 pax_msg_1_2;
407#ifndef PAX_MSG_TYPEDEF
408#define PAX_MSG_TYPEDEF
409typedef pax_msg_1_2 pax_msg;
410extern bool_t xdr_pax_msg (XDR *, pax_msg*);
411#endif
412
413typedef char *file_name;
414
415typedef struct {
416	u_int file_name_array_len;
417	file_name *file_name_array_val;
418} file_name_array;
419
420struct file_copy_data {
421	char *clustername;
422	char *copydir;
423	char *server;
424	int32_t copy_port;
425};
426typedef struct file_copy_data file_copy_data;
427
428/* the xdr functions */
429
430#if defined(__STDC__) || defined(__cplusplus)
431extern  bool_t xdr_xcom_proto (XDR *, xcom_proto*);
432extern  bool_t xdr_xcom_proto (XDR *, xcom_proto*);
433extern  bool_t xdr_x_proto_range (XDR *, x_proto_range*);
434extern  bool_t xdr_delivery_status (XDR *, delivery_status*);
435extern  bool_t xdr_cons_type (XDR *, cons_type*);
436extern  bool_t xdr_node_no (XDR *, node_no*);
437extern  bool_t xdr_synode_no (XDR *, synode_no*);
438extern  bool_t xdr_trans_id (XDR *, trans_id*);
439extern  bool_t xdr_node_set (XDR *, node_set*);
440extern  bool_t xdr_blob (XDR *, blob*);
441extern  bool_t xdr_node_address_1_0 (XDR *, node_address_1_0*);
442extern  bool_t xdr_node_list_1_0 (XDR *, node_list_1_0*);
443extern  bool_t xdr_node_address (XDR *, node_address*);
444extern  bool_t xdr_node_list (XDR *, node_list*);
445extern  bool_t xdr_cargo_type (XDR *, cargo_type*);
446extern  bool_t xdr_node_no_array (XDR *, node_no_array*);
447extern  bool_t xdr_synode_no_array (XDR *, synode_no_array*);
448extern  bool_t xdr_uncommitted_list (XDR *, uncommitted_list*);
449extern  bool_t xdr_repository (XDR *, repository*);
450extern  bool_t xdr_x_error (XDR *, x_error*);
451extern  bool_t xdr_trans_data (XDR *, trans_data*);
452extern  bool_t xdr_app_u (XDR *, app_u*);
453extern  bool_t xdr_recover_action (XDR *, recover_action*);
454extern  bool_t xdr_app_data (XDR *, app_data*);
455extern  bool_t xdr_app_data_ptr (XDR *, app_data_ptr*);
456extern  bool_t xdr_app_data_ptr_array (XDR *, app_data_ptr_array*);
457extern  bool_t xdr_app_data_list (XDR *, app_data_list*);
458extern  bool_t xdr_key_range (XDR *, key_range*);
459extern  bool_t xdr_bit_mask (XDR *, bit_mask*);
460extern  bool_t xdr_bit_set (XDR *, bit_set*);
461extern  bool_t xdr_ballot (XDR *, ballot*);
462extern  bool_t xdr_pax_op (XDR *, pax_op*);
463extern  bool_t xdr_pax_msg_type (XDR *, pax_msg_type*);
464extern  bool_t xdr_start_t (XDR *, start_t*);
465extern  bool_t xdr_snapshot (XDR *, snapshot*);
466extern  bool_t xdr_config (XDR *, config*);
467extern  bool_t xdr_config_ptr (XDR *, config_ptr*);
468extern  bool_t xdr_configs (XDR *, configs*);
469extern  bool_t xdr_gcs_snapshot (XDR *, gcs_snapshot*);
470extern  bool_t xdr_client_reply_code (XDR *, client_reply_code*);
471extern  bool_t xdr_pax_msg_1_1 (XDR *, pax_msg_1_1*);
472extern  bool_t xdr_pax_msg_1_2 (XDR *, pax_msg_1_2*);
473extern  bool_t xdr_file_name (XDR *, file_name*);
474extern  bool_t xdr_file_name_array (XDR *, file_name_array*);
475extern  bool_t xdr_file_copy_data (XDR *, file_copy_data*);
476
477#else /* K&R C */
478extern bool_t xdr_xcom_proto ();
479extern bool_t xdr_xcom_proto ();
480extern bool_t xdr_x_proto_range ();
481extern bool_t xdr_delivery_status ();
482extern bool_t xdr_cons_type ();
483extern bool_t xdr_node_no ();
484extern bool_t xdr_synode_no ();
485extern bool_t xdr_trans_id ();
486extern bool_t xdr_node_set ();
487extern bool_t xdr_blob ();
488extern bool_t xdr_node_address_1_0 ();
489extern bool_t xdr_node_list_1_0 ();
490extern bool_t xdr_node_address ();
491extern bool_t xdr_node_list ();
492extern bool_t xdr_cargo_type ();
493extern bool_t xdr_node_no_array ();
494extern bool_t xdr_synode_no_array ();
495extern bool_t xdr_uncommitted_list ();
496extern bool_t xdr_repository ();
497extern bool_t xdr_x_error ();
498extern bool_t xdr_trans_data ();
499extern bool_t xdr_app_u ();
500extern bool_t xdr_recover_action ();
501extern bool_t xdr_app_data ();
502extern bool_t xdr_app_data_ptr ();
503extern bool_t xdr_app_data_ptr_array ();
504extern bool_t xdr_app_data_list ();
505extern bool_t xdr_key_range ();
506extern bool_t xdr_bit_mask ();
507extern bool_t xdr_bit_set ();
508extern bool_t xdr_ballot ();
509extern bool_t xdr_pax_op ();
510extern bool_t xdr_pax_msg_type ();
511extern bool_t xdr_start_t ();
512extern bool_t xdr_snapshot ();
513extern bool_t xdr_config ();
514extern bool_t xdr_config_ptr ();
515extern bool_t xdr_configs ();
516extern bool_t xdr_gcs_snapshot ();
517extern bool_t xdr_client_reply_code ();
518extern bool_t xdr_pax_msg_1_1 ();
519extern bool_t xdr_pax_msg_1_2 ();
520extern bool_t xdr_file_name ();
521extern bool_t xdr_file_name_array ();
522extern bool_t xdr_file_copy_data ();
523
524#endif /* K&R C */
525
526#ifdef __cplusplus
527}
528#endif
529
530#endif /* !_XCOM_VP_H_RPCGEN */
531