s3:libsmb: let get_ipc_connect() use CLI_FULL_CONNECTION_FORCE_SMB1
[Samba.git] / ctdb / protocol / protocol_client.c
blobdbe13d0be79a4eb907cf6104025d1ff038dbfe08
1 /*
2 CTDB protocol marshalling
4 Copyright (C) Amitay Isaacs 2015
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #include "replace.h"
21 #include "system/network.h"
23 #include <talloc.h>
24 #include <tdb.h>
26 #include "protocol.h"
27 #include "protocol_api.h"
28 #include "protocol_private.h"
31 void ctdb_req_call_fill(struct ctdb_req_call *c,
32 uint32_t db_id, uint32_t flags,
33 uint32_t call_id, TDB_DATA key)
35 request->flags = flags;
36 c->db_id = db_id;
37 c->call_id = call_id;
38 c->key = key;
39 c->calldata = tdb_null;
43 static int ctdb_reply_control_generic(struct ctdb_reply_control *reply,
44 uint32_t opcode)
46 if (reply->rdata.opcode != opcode) {
47 return EPROTO;
50 return reply->status;
53 /* CTDB_CONTROL_PROCESS_EXISTS */
55 void ctdb_req_control_process_exists(struct ctdb_req_control *request,
56 pid_t pid)
58 request->opcode = CTDB_CONTROL_PROCESS_EXISTS;
59 request->pad = 0;
60 request->srvid = 0;
61 request->client_id = 0;
62 request->flags = 0;
64 request->rdata.opcode = CTDB_CONTROL_PROCESS_EXISTS;
65 request->rdata.data.pid = pid;
69 int ctdb_reply_control_process_exists(struct ctdb_reply_control *reply,
70 int *status)
72 if (reply->rdata.opcode != CTDB_CONTROL_PROCESS_EXISTS) {
73 return EPROTO;
76 *status = reply->status;
77 reply->status = 0;
79 return reply->status;
82 /* CTDB_CONTROL_STATISTICS */
84 void ctdb_req_control_statistics(struct ctdb_req_control *request)
86 request->opcode = CTDB_CONTROL_STATISTICS;
87 request->pad = 0;
88 request->srvid = 0;
89 request->client_id = 0;
90 request->flags = 0;
92 request->rdata.opcode = CTDB_CONTROL_STATISTICS;
95 int ctdb_reply_control_statistics(struct ctdb_reply_control *reply,
96 TALLOC_CTX *mem_ctx,
97 struct ctdb_statistics **stats)
99 if (reply->rdata.opcode != CTDB_CONTROL_STATISTICS) {
100 return EPROTO;
103 if (reply->status == 0) {
104 *stats = talloc_steal(mem_ctx, reply->rdata.data.stats);
106 return reply->status;
109 /* CTDB_CONTROL_PING */
111 void ctdb_req_control_ping(struct ctdb_req_control *request)
113 request->opcode = CTDB_CONTROL_PING;
114 request->pad = 0;
115 request->srvid = 0;
116 request->client_id = 0;
117 request->flags = 0;
119 request->rdata.opcode = CTDB_CONTROL_PING;
122 int ctdb_reply_control_ping(struct ctdb_reply_control *reply,
123 int *num_clients)
125 if (reply->rdata.opcode != CTDB_CONTROL_PING) {
126 return EPROTO;
129 if (reply->status >= 0) {
130 *num_clients = reply->status;
131 reply->status = 0;
133 return reply->status;
136 /* CTDB_CONTROL_GETDBPATH */
138 void ctdb_req_control_getdbpath(struct ctdb_req_control *request,
139 uint32_t db_id)
141 request->opcode = CTDB_CONTROL_GETDBPATH;
142 request->pad = 0;
143 request->srvid = 0;
144 request->client_id = 0;
145 request->flags = 0;
147 request->rdata.opcode = CTDB_CONTROL_GETDBPATH;
148 request->rdata.data.db_id = db_id;
151 int ctdb_reply_control_getdbpath(struct ctdb_reply_control *reply,
152 TALLOC_CTX *mem_ctx, const char **db_path)
154 if (reply->rdata.opcode != CTDB_CONTROL_GETDBPATH) {
155 return EPROTO;
158 if (reply->status == 0) {
159 *db_path = talloc_steal(mem_ctx, reply->rdata.data.db_path);
161 return reply->status;
164 /* CTDB_CONTROL_GETVNNMAP */
166 void ctdb_req_control_getvnnmap(struct ctdb_req_control *request)
168 request->opcode = CTDB_CONTROL_GETVNNMAP;
169 request->pad = 0;
170 request->srvid = 0;
171 request->client_id = 0;
172 request->flags = 0;
174 request->rdata.opcode = CTDB_CONTROL_GETVNNMAP;
177 int ctdb_reply_control_getvnnmap(struct ctdb_reply_control *reply,
178 TALLOC_CTX *mem_ctx,
179 struct ctdb_vnn_map **vnnmap)
181 if (reply->rdata.opcode != CTDB_CONTROL_GETVNNMAP) {
182 return EPROTO;
185 if (reply->status == 0) {
186 *vnnmap = talloc_steal(mem_ctx, reply->rdata.data.vnnmap);
188 return reply->status;
191 /* CTDB_CONTROL_SETVNNMAP */
193 void ctdb_req_control_setvnnmap(struct ctdb_req_control *request,
194 struct ctdb_vnn_map *vnnmap)
196 request->opcode = CTDB_CONTROL_SETVNNMAP;
197 request->pad = 0;
198 request->srvid = 0;
199 request->client_id = 0;
200 request->flags = 0;
202 request->rdata.opcode = CTDB_CONTROL_SETVNNMAP;
203 request->rdata.data.vnnmap = vnnmap;
206 int ctdb_reply_control_setvnnmap(struct ctdb_reply_control *reply)
208 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SETVNNMAP);
211 /* CTDB_CONTROL_GET_DEBUG */
213 void ctdb_req_control_get_debug(struct ctdb_req_control *request)
215 request->opcode = CTDB_CONTROL_GET_DEBUG;
216 request->pad = 0;
217 request->srvid = 0;
218 request->client_id = 0;
219 request->flags = 0;
221 request->rdata.opcode = CTDB_CONTROL_GET_DEBUG;
224 int ctdb_reply_control_get_debug(struct ctdb_reply_control *reply,
225 int *loglevel)
227 if (reply->rdata.opcode != CTDB_CONTROL_GET_DEBUG) {
228 return EPROTO;
231 if (reply->status == 0) {
232 *loglevel = (int)reply->rdata.data.loglevel;
234 return reply->status;
237 /* CTDB_CONTROL_SET_DEBUG */
239 void ctdb_req_control_set_debug(struct ctdb_req_control *request,
240 int loglevel)
242 request->opcode = CTDB_CONTROL_SET_DEBUG;
243 request->pad = 0;
244 request->srvid = 0;
245 request->client_id = 0;
246 request->flags = 0;
248 request->rdata.opcode = CTDB_CONTROL_SET_DEBUG;
249 request->rdata.data.loglevel = (uint32_t)loglevel;
252 int ctdb_reply_control_set_debug(struct ctdb_reply_control *reply)
254 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_DEBUG);
257 /* CTDB_CONTROL_GET_DBMAP */
259 void ctdb_req_control_get_dbmap(struct ctdb_req_control *request)
261 request->opcode = CTDB_CONTROL_GET_DBMAP;
262 request->pad = 0;
263 request->srvid = 0;
264 request->client_id = 0;
265 request->flags = 0;
267 request->rdata.opcode = CTDB_CONTROL_GET_DBMAP;
270 int ctdb_reply_control_get_dbmap(struct ctdb_reply_control *reply,
271 TALLOC_CTX *mem_ctx,
272 struct ctdb_dbid_map **dbmap)
274 if (reply->rdata.opcode != CTDB_CONTROL_GET_DBMAP) {
275 return EPROTO;
278 if (reply->status == 0) {
279 *dbmap = talloc_steal(mem_ctx, reply->rdata.data.dbmap);
281 return reply->status;
284 /* CTDB_CONTROL_PULL_DB */
286 void ctdb_req_control_pull_db(struct ctdb_req_control *request,
287 struct ctdb_pulldb *pulldb)
289 request->opcode = CTDB_CONTROL_PULL_DB;
290 request->pad = 0;
291 request->srvid = 0;
292 request->client_id = 0;
293 request->flags = 0;
295 request->rdata.opcode = CTDB_CONTROL_PULL_DB;
296 request->rdata.data.pulldb = pulldb;
299 int ctdb_reply_control_pull_db(struct ctdb_reply_control *reply,
300 TALLOC_CTX *mem_ctx,
301 struct ctdb_rec_buffer **recbuf)
303 if (reply->rdata.opcode != CTDB_CONTROL_PULL_DB) {
304 return EPROTO;
307 if (reply->status == 0) {
308 *recbuf = talloc_steal(mem_ctx, reply->rdata.data.recbuf);
310 return reply->status;
313 /* CTDB_CONTROL_PUSH_DB */
315 void ctdb_req_control_push_db(struct ctdb_req_control *request,
316 struct ctdb_rec_buffer *recbuf)
318 request->opcode = CTDB_CONTROL_PUSH_DB;
319 request->pad = 0;
320 request->srvid = 0;
321 request->client_id = 0;
322 request->flags = 0;
324 request->rdata.opcode = CTDB_CONTROL_PUSH_DB;
325 request->rdata.data.recbuf = recbuf;
328 int ctdb_reply_control_push_db(struct ctdb_reply_control *reply)
330 return ctdb_reply_control_generic(reply, CTDB_CONTROL_PUSH_DB);
333 /* CTDB_CONTROL_GET_RECMODE */
335 void ctdb_req_control_get_recmode(struct ctdb_req_control *request)
337 request->opcode = CTDB_CONTROL_GET_RECMODE;
338 request->pad = 0;
339 request->srvid = 0;
340 request->client_id = 0;
341 request->flags = 0;
343 request->rdata.opcode = CTDB_CONTROL_GET_RECMODE;
346 int ctdb_reply_control_get_recmode(struct ctdb_reply_control *reply,
347 int *recmode)
349 if (reply->rdata.opcode != CTDB_CONTROL_GET_RECMODE) {
350 return EPROTO;
353 if (reply->status >= 0) {
354 *recmode = reply->status;
355 reply->status = 0;
357 return reply->status;
360 /* CTDB_CONTROL_SET_RECMODE */
362 void ctdb_req_control_set_recmode(struct ctdb_req_control *request,
363 int recmode)
365 request->opcode = CTDB_CONTROL_SET_RECMODE;
366 request->pad = 0;
367 request->srvid = 0;
368 request->client_id = 0;
369 request->flags = 0;
371 request->rdata.opcode = CTDB_CONTROL_SET_RECMODE;
372 request->rdata.data.recmode = recmode;
375 int ctdb_reply_control_set_recmode(struct ctdb_reply_control *reply)
377 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_RECMODE);
380 /* CTDB_CONTROL_STATISTICS_RESET */
382 void ctdb_req_control_statistics_reset(struct ctdb_req_control *request)
384 request->opcode = CTDB_CONTROL_STATISTICS_RESET;
385 request->pad = 0;
386 request->srvid = 0;
387 request->client_id = 0;
388 request->flags = 0;
390 request->rdata.opcode = CTDB_CONTROL_STATISTICS_RESET;
393 int ctdb_reply_control_statistics_reset(struct ctdb_reply_control *reply)
395 return ctdb_reply_control_generic(reply,
396 CTDB_CONTROL_STATISTICS_RESET);
399 /* CTDB_CONTROL_DB_ATTACH */
401 void ctdb_req_control_db_attach(struct ctdb_req_control *request,
402 const char *db_name)
404 request->opcode = CTDB_CONTROL_DB_ATTACH;
405 request->pad = 0;
406 request->srvid = 0;
407 request->client_id = 0;
408 request->flags = 0;
410 request->rdata.opcode = CTDB_CONTROL_DB_ATTACH;
411 request->rdata.data.db_name = db_name;
414 int ctdb_reply_control_db_attach(struct ctdb_reply_control *reply,
415 uint32_t *db_id)
417 if (reply->rdata.opcode != CTDB_CONTROL_DB_ATTACH) {
418 return EPROTO;
421 if (reply->status == 0) {
422 *db_id = reply->rdata.data.db_id;
424 return reply->status;
427 /* CTDB_CONTROL_SET_CALL */
429 /* CTDB_CONTROL_TRAVERSE_START */
431 void ctdb_req_control_traverse_start(struct ctdb_req_control *request,
432 struct ctdb_traverse_start *traverse)
434 request->opcode = CTDB_CONTROL_TRAVERSE_START;
435 request->pad = 0;
436 request->srvid = 0;
437 request->client_id = 0;
438 request->flags = 0;
440 request->rdata.opcode = CTDB_CONTROL_TRAVERSE_START;
441 request->rdata.data.traverse_start = traverse;
444 int ctdb_reply_control_traverse_start(struct ctdb_reply_control *reply)
446 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TRAVERSE_START);
449 /* CTDB_CONTROL_TRAVERSE_ALL */
450 /* CTDB_CONTROL_TRAVERSE_DATA */
452 /* CTDB_CONTROL_REGISTER_SRVID */
454 void ctdb_req_control_register_srvid(struct ctdb_req_control *request,
455 uint64_t srvid)
457 request->opcode = CTDB_CONTROL_REGISTER_SRVID;
458 request->pad = 0;
459 request->srvid = srvid;
460 request->client_id = 0;
461 request->flags = 0;
463 request->rdata.opcode = CTDB_CONTROL_REGISTER_SRVID;
466 int ctdb_reply_control_register_srvid(struct ctdb_reply_control *reply)
468 return ctdb_reply_control_generic(reply, CTDB_CONTROL_REGISTER_SRVID);
471 /* CTDB_CONTROL_DEREGISTER_SRVID */
473 void ctdb_req_control_deregister_srvid(struct ctdb_req_control *request,
474 uint64_t srvid)
476 request->opcode = CTDB_CONTROL_DEREGISTER_SRVID;
477 request->pad = 0;
478 request->srvid = srvid;
479 request->client_id = 0;
480 request->flags = 0;
482 request->rdata.opcode = CTDB_CONTROL_DEREGISTER_SRVID;
485 int ctdb_reply_control_deregister_srvid(struct ctdb_reply_control *reply)
487 return ctdb_reply_control_generic(reply,
488 CTDB_CONTROL_DEREGISTER_SRVID);
491 /* CTDB_CONTROL_GET_DBNAME */
493 void ctdb_req_control_get_dbname(struct ctdb_req_control *request,
494 uint32_t db_id)
496 request->opcode = CTDB_CONTROL_GET_DBNAME;
497 request->pad = 0;
498 request->srvid = 0;
499 request->client_id = 0;
500 request->flags = 0;
502 request->rdata.opcode = CTDB_CONTROL_GET_DBNAME;
503 request->rdata.data.db_id = db_id;
506 int ctdb_reply_control_get_dbname(struct ctdb_reply_control *reply,
507 TALLOC_CTX *mem_ctx, const char **db_name)
509 if (reply->rdata.opcode != CTDB_CONTROL_GET_DBNAME) {
510 return EPROTO;
513 if (reply->status == 0) {
514 *db_name = talloc_steal(mem_ctx, reply->rdata.data.db_name);
516 return reply->status;
519 /* CTDB_CONTROL_ENABLE_SEQNUM */
521 void ctdb_req_control_enable_seqnum(struct ctdb_req_control *request,
522 uint32_t db_id)
524 request->opcode = CTDB_CONTROL_ENABLE_SEQNUM;
525 request->pad = 0;
526 request->srvid = 0;
527 request->client_id = 0;
528 request->flags = 0;
530 request->rdata.opcode = CTDB_CONTROL_ENABLE_SEQNUM;
531 request->rdata.data.db_id = db_id;
534 int ctdb_reply_control_enable_seqnum(struct ctdb_reply_control *reply)
536 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ENABLE_SEQNUM);
539 /* CTDB_CONTROL_UPDATE_SEQNUM */
541 void ctdb_req_control_update_seqnum(struct ctdb_req_control *request,
542 uint32_t db_id)
544 request->opcode = CTDB_CONTROL_UPDATE_SEQNUM;
545 request->pad = 0;
546 request->srvid = 0;
547 request->client_id = 0;
548 request->flags = 0;
550 request->rdata.opcode = CTDB_CONTROL_UPDATE_SEQNUM;
551 request->rdata.data.db_id = db_id;
554 int ctdb_reply_control_update_seqnum(struct ctdb_reply_control *reply)
556 return ctdb_reply_control_generic(reply, CTDB_CONTROL_UPDATE_SEQNUM);
559 /* CTDB_CONTROL_DUMP_MEMORY */
561 void ctdb_req_control_dump_memory(struct ctdb_req_control *request)
563 request->opcode = CTDB_CONTROL_DUMP_MEMORY;
564 request->pad = 0;
565 request->srvid = 0;
566 request->client_id = 0;
567 request->flags = 0;
569 request->rdata.opcode = CTDB_CONTROL_DUMP_MEMORY;
572 int ctdb_reply_control_dump_memory(struct ctdb_reply_control *reply,
573 TALLOC_CTX *mem_ctx, const char **mem_str)
575 if (reply->rdata.opcode != CTDB_CONTROL_DUMP_MEMORY) {
576 return EPROTO;
579 if (reply->status == 0) {
580 *mem_str = talloc_steal(mem_ctx, reply->rdata.data.mem_str);
582 return reply->status;
585 /* CTDB_CONTROL_GET_PID */
587 void ctdb_req_control_get_pid(struct ctdb_req_control *request)
589 request->opcode = CTDB_CONTROL_GET_PID;
590 request->pad = 0;
591 request->srvid = 0;
592 request->client_id = 0;
593 request->flags = 0;
595 request->rdata.opcode = CTDB_CONTROL_GET_PID;
598 int ctdb_reply_control_get_pid(struct ctdb_reply_control *reply,
599 pid_t *pid)
601 if (reply->rdata.opcode != CTDB_CONTROL_GET_PID) {
602 return EPROTO;
605 *pid = reply->status;
606 reply->status = 0;
608 return reply->status;
611 /* CTDB_CONTROL_GET_RECMASTER */
613 void ctdb_req_control_get_recmaster(struct ctdb_req_control *request)
615 request->opcode = CTDB_CONTROL_GET_RECMASTER;
616 request->pad = 0;
617 request->srvid = 0;
618 request->client_id = 0;
619 request->flags = 0;
621 request->rdata.opcode = CTDB_CONTROL_GET_RECMASTER;
624 int ctdb_reply_control_get_recmaster(struct ctdb_reply_control *reply,
625 uint32_t *recmaster)
627 if (reply->rdata.opcode != CTDB_CONTROL_GET_RECMASTER) {
628 return EPROTO;
631 *recmaster = reply->status;
632 reply->status = 0;
634 return reply->status;
637 /* CTDB_CONTROL_SET_RECMASTER */
639 void ctdb_req_control_set_recmaster(struct ctdb_req_control *request,
640 int recmaster)
642 request->opcode = CTDB_CONTROL_SET_RECMASTER;
643 request->pad = 0;
644 request->srvid = 0;
645 request->client_id = 0;
646 request->flags = 0;
648 request->rdata.opcode = CTDB_CONTROL_SET_RECMASTER;
649 request->rdata.data.recmaster = recmaster;
652 int ctdb_reply_control_set_recmaster(struct ctdb_reply_control *reply)
654 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_RECMASTER);
657 /* CTDB_CONTROL_FREEZE */
659 void ctdb_req_control_freeze(struct ctdb_req_control *request,
660 uint32_t priority)
662 request->opcode = CTDB_CONTROL_FREEZE;
663 request->pad = 0;
664 request->srvid = priority;
665 request->client_id = 0;
666 request->flags = 0;
668 request->rdata.opcode = CTDB_CONTROL_FREEZE;
671 int ctdb_reply_control_freeze(struct ctdb_reply_control *reply)
673 return ctdb_reply_control_generic(reply, CTDB_CONTROL_FREEZE);
676 /* CTDB_CONTROL_GET_PNN */
678 void ctdb_req_control_get_pnn(struct ctdb_req_control *request)
680 request->opcode = CTDB_CONTROL_GET_PNN;
681 request->pad = 0;
682 request->srvid = 0;
683 request->client_id = 0;
684 request->flags = 0;
686 request->rdata.opcode = CTDB_CONTROL_GET_PNN;
689 int ctdb_reply_control_get_pnn(struct ctdb_reply_control *reply,
690 uint32_t *pnn)
692 if (reply->rdata.opcode != CTDB_CONTROL_GET_PNN) {
693 return EPROTO;
696 if (reply->status >= 0) {
697 *pnn = reply->status;
698 reply->status = 0;
700 return reply->status;
703 /* CTDB_CONTROL_SHUTDOWN */
705 void ctdb_req_control_shutdown(struct ctdb_req_control *request)
707 request->opcode = CTDB_CONTROL_SHUTDOWN;
708 request->pad = 0;
709 request->srvid = 0;
710 request->client_id = 0;
711 request->flags = CTDB_CTRL_FLAG_NOREPLY;
713 request->rdata.opcode = CTDB_CONTROL_SHUTDOWN;
716 int ctdb_reply_control_shutdown(struct ctdb_reply_control *reply)
718 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SHUTDOWN);
721 /* CTDB_CONTROL_GET_MONMODE */
723 void ctdb_req_control_get_monmode(struct ctdb_req_control *request)
725 request->opcode = CTDB_CONTROL_GET_MONMODE;
726 request->pad = 0;
727 request->srvid = 0;
728 request->client_id = 0;
729 request->flags = 0;
731 request->rdata.opcode = CTDB_CONTROL_GET_MONMODE;
734 int ctdb_reply_control_get_monmode(struct ctdb_reply_control *reply,
735 int *mon_mode)
737 if (reply->rdata.opcode != CTDB_CONTROL_GET_MONMODE) {
738 return EPROTO;
741 if (reply->status >= 0) {
742 *mon_mode = reply->status;
743 reply->status = 0;
745 return reply->status;
748 /* CTDB_CONTROL_TCP_CLIENT */
750 void ctdb_req_control_tcp_client(struct ctdb_req_control *request,
751 struct ctdb_connection *conn)
753 request->opcode = CTDB_CONTROL_TCP_CLIENT;
754 request->pad = 0;
755 request->srvid = 0;
756 request->client_id = 0;
757 request->flags = 0;
759 request->rdata.opcode = CTDB_CONTROL_TCP_CLIENT;
760 request->rdata.data.conn = conn;
763 int ctdb_reply_control_tcp_client(struct ctdb_reply_control *reply)
765 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TCP_CLIENT);
768 /* CTDB_CONTROL_TCP_ADD */
770 void ctdb_req_control_tcp_add(struct ctdb_req_control *request,
771 struct ctdb_connection *conn)
773 request->opcode = CTDB_CONTROL_TCP_ADD;
774 request->pad = 0;
775 request->srvid = 0;
776 request->client_id = 0;
777 request->flags = 0;
779 request->rdata.opcode = CTDB_CONTROL_TCP_ADD;
780 request->rdata.data.conn = conn;
783 int ctdb_reply_control_tcp_add(struct ctdb_reply_control *reply)
785 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TCP_ADD);
788 /* CTDB_CONTROL_TCP_REMOVE */
790 void ctdb_req_control_tcp_remove(struct ctdb_req_control *request,
791 struct ctdb_connection *conn)
793 request->opcode = CTDB_CONTROL_TCP_REMOVE;
794 request->pad = 0;
795 request->srvid = 0;
796 request->client_id = 0;
797 request->flags = 0;
799 request->rdata.opcode = CTDB_CONTROL_TCP_REMOVE;
800 request->rdata.data.conn = conn;
803 int ctdb_reply_control_tcp_remove(struct ctdb_reply_control *reply)
805 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TCP_REMOVE);
808 /* CTDB_CONTROL_STARTUP */
810 void ctdb_req_control_startup(struct ctdb_req_control *request)
812 request->opcode = CTDB_CONTROL_STARTUP;
813 request->pad = 0;
814 request->srvid = 0;
815 request->client_id = 0;
816 request->flags = 0;
818 request->rdata.opcode = CTDB_CONTROL_STARTUP;
821 int ctdb_reply_control_startup(struct ctdb_reply_control *reply)
823 return ctdb_reply_control_generic(reply, CTDB_CONTROL_STARTUP);
826 /* CTDB_CONTROL_SET_TUNABLE */
828 void ctdb_req_control_set_tunable(struct ctdb_req_control *request,
829 struct ctdb_tunable *tunable)
831 request->opcode = CTDB_CONTROL_SET_TUNABLE;
832 request->pad = 0;
833 request->srvid = 0;
834 request->client_id = 0;
835 request->flags = 0;
837 request->rdata.opcode = CTDB_CONTROL_SET_TUNABLE;
838 request->rdata.data.tunable = tunable;
841 int ctdb_reply_control_set_tunable(struct ctdb_reply_control *reply)
843 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_TUNABLE);
846 /* CTDB_CONTROL_GET_TUNABLE */
848 void ctdb_req_control_get_tunable(struct ctdb_req_control *request,
849 const char *name)
851 request->opcode = CTDB_CONTROL_GET_TUNABLE;
852 request->pad = 0;
853 request->srvid = 0;
854 request->client_id = 0;
855 request->flags = 0;
857 request->rdata.opcode = CTDB_CONTROL_GET_TUNABLE;
858 request->rdata.data.tun_var = discard_const(name);
861 int ctdb_reply_control_get_tunable(struct ctdb_reply_control *reply,
862 uint32_t *value)
864 if (reply->rdata.opcode != CTDB_CONTROL_GET_TUNABLE) {
865 return EPROTO;
868 if (reply->status == 0) {
869 *value = reply->rdata.data.tun_value;
871 return reply->status;
874 /* CTDB_CONTROL_LIST_TUNABLES */
876 void ctdb_req_control_list_tunables(struct ctdb_req_control *request)
878 request->opcode = CTDB_CONTROL_LIST_TUNABLES;
879 request->pad = 0;
880 request->srvid = 0;
881 request->client_id = 0;
882 request->flags = 0;
884 request->rdata.opcode = CTDB_CONTROL_LIST_TUNABLES;
887 int ctdb_reply_control_list_tunables(struct ctdb_reply_control *reply,
888 TALLOC_CTX *mem_ctx,
889 struct ctdb_var_list **tun_var_list)
891 if (reply->rdata.opcode != CTDB_CONTROL_LIST_TUNABLES) {
892 return EPROTO;
895 if (reply->status == 0) {
896 *tun_var_list = talloc_steal(mem_ctx,
897 reply->rdata.data.tun_var_list);
899 return reply->status;
902 /* CTDB_CONTROL_MODIFY_FLAGS */
904 void ctdb_req_control_modify_flags(struct ctdb_req_control *request,
905 struct ctdb_node_flag_change *flag_change)
907 request->opcode = CTDB_CONTROL_MODIFY_FLAGS;
908 request->pad = 0;
909 request->srvid = 0;
910 request->client_id = 0;
911 request->flags = 0;
913 request->rdata.opcode = CTDB_CONTROL_MODIFY_FLAGS;
914 request->rdata.data.flag_change = flag_change;
917 int ctdb_reply_control_modify_flags(struct ctdb_reply_control *reply)
919 return ctdb_reply_control_generic(reply, CTDB_CONTROL_MODIFY_FLAGS);
922 /* CTDB_CONTROL_GET_ALL_TUNABLES */
924 void ctdb_req_control_get_all_tunables(struct ctdb_req_control *request)
926 request->opcode = CTDB_CONTROL_GET_ALL_TUNABLES;
927 request->pad = 0;
928 request->srvid = 0;
929 request->client_id = 0;
930 request->flags = 0;
932 request->rdata.opcode = CTDB_CONTROL_GET_ALL_TUNABLES;
935 int ctdb_reply_control_get_all_tunables(struct ctdb_reply_control *reply,
936 TALLOC_CTX *mem_ctx,
937 struct ctdb_tunable_list **tun_list)
939 if (reply->rdata.opcode != CTDB_CONTROL_GET_ALL_TUNABLES) {
940 return EPROTO;
943 if (reply->status == 0) {
944 *tun_list = talloc_steal(mem_ctx, reply->rdata.data.tun_list);
946 return reply->status;
949 /* CTDB_CONTROL_GET_TCP_TICKLE_LIST */
951 void ctdb_req_control_get_tcp_tickle_list(struct ctdb_req_control *request,
952 ctdb_sock_addr *addr)
954 request->opcode = CTDB_CONTROL_GET_TCP_TICKLE_LIST;
955 request->pad = 0;
956 request->srvid = 0;
957 request->client_id = 0;
958 request->flags = 0;
960 request->rdata.opcode = CTDB_CONTROL_GET_TCP_TICKLE_LIST;
961 request->rdata.data.addr = addr;
964 int ctdb_reply_control_get_tcp_tickle_list(struct ctdb_reply_control *reply,
965 TALLOC_CTX *mem_ctx,
966 struct ctdb_tickle_list **tickles)
968 if (reply->rdata.opcode != CTDB_CONTROL_GET_TCP_TICKLE_LIST) {
969 return EPROTO;
972 if (reply->status == 0) {
973 *tickles = talloc_steal(mem_ctx, reply->rdata.data.tickles);
975 return reply->status;
978 /* CTDB_CONTROL_SET_TCP_TICKLE_LIST */
980 void ctdb_req_control_set_tcp_tickle_list(struct ctdb_req_control *request,
981 struct ctdb_tickle_list *tickles)
983 request->opcode = CTDB_CONTROL_SET_TCP_TICKLE_LIST;
984 request->pad = 0;
985 request->srvid = 0;
986 request->client_id = 0;
987 request->flags = 0;
989 request->rdata.opcode = CTDB_CONTROL_SET_TCP_TICKLE_LIST;
990 request->rdata.data.tickles = tickles;
993 int ctdb_reply_control_set_tcp_tickle_list(struct ctdb_reply_control *reply)
995 return ctdb_reply_control_generic(reply,
996 CTDB_CONTROL_SET_TCP_TICKLE_LIST);
999 /* CTDB_CONTROL_DB_ATTACH_PERSISTENT */
1001 void ctdb_req_control_db_attach_persistent(struct ctdb_req_control *request,
1002 const char *db_name)
1004 request->opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
1005 request->pad = 0;
1006 request->srvid = 0;
1007 request->client_id = 0;
1008 request->flags = 0;
1010 request->rdata.opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
1011 request->rdata.data.db_name = db_name;
1014 int ctdb_reply_control_db_attach_persistent(struct ctdb_reply_control *reply,
1015 uint32_t *db_id)
1017 if (reply->rdata.opcode != CTDB_CONTROL_DB_ATTACH_PERSISTENT) {
1018 return EPROTO;
1021 if (reply->status == 0) {
1022 *db_id = reply->rdata.data.db_id;
1024 return reply->status;
1027 /* CTDB_CONTROL_UPDATE_RECORD */
1029 void ctdb_req_control_update_record(struct ctdb_req_control *request,
1030 struct ctdb_rec_buffer *recbuf)
1032 request->opcode = CTDB_CONTROL_UPDATE_RECORD;
1033 request->pad = 0;
1034 request->srvid = 0;
1035 request->client_id = 0;
1036 request->flags = 0;
1038 request->rdata.opcode = CTDB_CONTROL_UPDATE_RECORD;
1039 request->rdata.data.recbuf = recbuf;
1042 int ctdb_reply_control_update_record(struct ctdb_reply_control *reply)
1044 return ctdb_reply_control_generic(reply, CTDB_CONTROL_UPDATE_RECORD);
1047 /* CTDB_CONTROL_SEND_GRATUITOUS_ARP */
1049 void ctdb_req_control_send_gratuitous_arp(struct ctdb_req_control *request,
1050 struct ctdb_addr_info *addr_info)
1052 request->opcode = CTDB_CONTROL_SEND_GRATUITOUS_ARP;
1053 request->pad = 0;
1054 request->srvid = 0;
1055 request->client_id = 0;
1056 request->flags = 0;
1058 request->rdata.opcode = CTDB_CONTROL_SEND_GRATUITOUS_ARP;
1059 request->rdata.data.addr_info = addr_info;
1062 int ctdb_reply_control_send_gratuitous_arp(struct ctdb_reply_control *reply)
1064 return ctdb_reply_control_generic(reply,
1065 CTDB_CONTROL_SEND_GRATUITOUS_ARP);
1068 /* CTDB_CONTROL_WIPE_DATABASE */
1070 void ctdb_req_control_wipe_database(struct ctdb_req_control *request,
1071 struct ctdb_transdb *transdb)
1073 request->opcode = CTDB_CONTROL_WIPE_DATABASE;
1074 request->pad = 0;
1075 request->srvid = 0;
1076 request->client_id = 0;
1077 request->flags = 0;
1079 request->rdata.opcode = CTDB_CONTROL_WIPE_DATABASE;
1080 request->rdata.data.transdb = transdb;
1083 int ctdb_reply_control_wipe_database(struct ctdb_reply_control *reply)
1085 return ctdb_reply_control_generic(reply, CTDB_CONTROL_WIPE_DATABASE);
1088 /* CTDB_CONTROL_UPTIME */
1090 void ctdb_req_control_uptime(struct ctdb_req_control *request)
1092 request->opcode = CTDB_CONTROL_UPTIME;
1093 request->pad = 0;
1094 request->srvid = 0;
1095 request->client_id = 0;
1096 request->flags = 0;
1098 request->rdata.opcode = CTDB_CONTROL_UPTIME;
1101 int ctdb_reply_control_uptime(struct ctdb_reply_control *reply,
1102 TALLOC_CTX *mem_ctx, struct ctdb_uptime **uptime)
1104 if (reply->rdata.opcode != CTDB_CONTROL_UPTIME) {
1105 return EPROTO;
1108 if (reply->status == 0) {
1109 *uptime = talloc_steal(mem_ctx, reply->rdata.data.uptime);
1111 return reply->status;
1114 /* CTDB_CONTROL_START_RECOVERY */
1116 void ctdb_req_control_start_recovery(struct ctdb_req_control *request)
1118 request->opcode = CTDB_CONTROL_START_RECOVERY;
1119 request->pad = 0;
1120 request->srvid = 0;
1121 request->client_id = 0;
1122 request->flags = 0;
1124 request->rdata.opcode = CTDB_CONTROL_START_RECOVERY;
1127 int ctdb_reply_control_start_recovery(struct ctdb_reply_control *reply)
1129 return ctdb_reply_control_generic(reply, CTDB_CONTROL_START_RECOVERY);
1132 /* CTDB_CONTROL_END_RECOVERY */
1134 void ctdb_req_control_end_recovery(struct ctdb_req_control *request)
1136 request->opcode = CTDB_CONTROL_END_RECOVERY;
1137 request->pad = 0;
1138 request->srvid = 0;
1139 request->client_id = 0;
1140 request->flags = 0;
1142 request->rdata.opcode = CTDB_CONTROL_END_RECOVERY;
1145 int ctdb_reply_control_end_recovery(struct ctdb_reply_control *reply)
1147 return ctdb_reply_control_generic(reply, CTDB_CONTROL_END_RECOVERY);
1150 /* CTDB_CONTROL_RELOAD_NODES_FILE */
1152 void ctdb_req_control_reload_nodes_file(struct ctdb_req_control *request)
1154 request->opcode = CTDB_CONTROL_RELOAD_NODES_FILE;
1155 request->pad = 0;
1156 request->srvid = 0;
1157 request->client_id = 0;
1158 request->flags = 0;
1160 request->rdata.opcode = CTDB_CONTROL_RELOAD_NODES_FILE;
1163 int ctdb_reply_control_reload_nodes_file(struct ctdb_reply_control *reply)
1165 return ctdb_reply_control_generic(reply,
1166 CTDB_CONTROL_RELOAD_NODES_FILE);
1169 /* CTDB_CONTROL_TRY_DELETE_RECORDS */
1171 void ctdb_req_control_try_delete_records(struct ctdb_req_control *request,
1172 struct ctdb_rec_buffer *recbuf)
1174 request->opcode = CTDB_CONTROL_TRY_DELETE_RECORDS;
1175 request->pad = 0;
1176 request->srvid = 0;
1177 request->client_id = 0;
1178 request->flags = 0;
1180 request->rdata.opcode = CTDB_CONTROL_TRY_DELETE_RECORDS;
1181 request->rdata.data.recbuf = recbuf;
1184 int ctdb_reply_control_try_delete_records(struct ctdb_reply_control *reply,
1185 TALLOC_CTX *mem_ctx,
1186 struct ctdb_rec_buffer **recbuf)
1188 if (reply->rdata.opcode != CTDB_CONTROL_TRY_DELETE_RECORDS) {
1189 return EPROTO;
1192 if (reply->status == 0) {
1193 *recbuf = talloc_steal(mem_ctx, reply->rdata.data.recbuf);
1195 return reply->status;
1198 /* CTDB_CONTROL_ENABLE_MONITOR */
1200 void ctdb_req_control_enable_monitor(struct ctdb_req_control *request)
1202 request->opcode = CTDB_CONTROL_ENABLE_MONITOR;
1203 request->pad = 0;
1204 request->srvid = 0;
1205 request->client_id = 0;
1206 request->flags = 0;
1208 request->rdata.opcode = CTDB_CONTROL_ENABLE_MONITOR;
1211 int ctdb_reply_control_enable_monitor(struct ctdb_reply_control *reply)
1213 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ENABLE_MONITOR);
1216 /* CTDB_CONTROL_DISABLE_MONITOR */
1218 void ctdb_req_control_disable_monitor(struct ctdb_req_control *request)
1220 request->opcode = CTDB_CONTROL_DISABLE_MONITOR;
1221 request->pad = 0;
1222 request->srvid = 0;
1223 request->client_id = 0;
1224 request->flags = 0;
1226 request->rdata.opcode = CTDB_CONTROL_DISABLE_MONITOR;
1229 int ctdb_reply_control_disable_monitor(struct ctdb_reply_control *reply)
1231 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DISABLE_MONITOR);
1234 /* CTDB_CONTROL_ADD_PUBLIC_IP */
1236 void ctdb_req_control_add_public_ip(struct ctdb_req_control *request,
1237 struct ctdb_addr_info *addr_info)
1239 request->opcode = CTDB_CONTROL_ADD_PUBLIC_IP;
1240 request->pad = 0;
1241 request->srvid = 0;
1242 request->client_id = 0;
1243 request->flags = 0;
1245 request->rdata.opcode = CTDB_CONTROL_ADD_PUBLIC_IP;
1246 request->rdata.data.addr_info = addr_info;
1249 int ctdb_reply_control_add_public_ip(struct ctdb_reply_control *reply)
1251 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ADD_PUBLIC_IP);
1254 /* CTDB_CONTROL_DEL_PUBLIC_IP */
1256 void ctdb_req_control_del_public_ip(struct ctdb_req_control *request,
1257 struct ctdb_addr_info *addr_info)
1259 request->opcode = CTDB_CONTROL_DEL_PUBLIC_IP;
1260 request->pad = 0;
1261 request->srvid = 0;
1262 request->client_id = 0;
1263 request->flags = 0;
1265 request->rdata.opcode = CTDB_CONTROL_DEL_PUBLIC_IP;
1266 request->rdata.data.addr_info = addr_info;
1269 int ctdb_reply_control_del_public_ip(struct ctdb_reply_control *reply)
1271 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DEL_PUBLIC_IP);
1274 /* CTDB_CONTROL_GET_CAPABILITIES */
1276 void ctdb_req_control_get_capabilities(struct ctdb_req_control *request)
1278 request->opcode = CTDB_CONTROL_GET_CAPABILITIES;
1279 request->pad = 0;
1280 request->srvid = 0;
1281 request->client_id = 0;
1282 request->flags = 0;
1284 request->rdata.opcode = CTDB_CONTROL_GET_CAPABILITIES;
1287 int ctdb_reply_control_get_capabilities(struct ctdb_reply_control *reply,
1288 uint32_t *caps)
1290 if (reply->rdata.opcode != CTDB_CONTROL_GET_CAPABILITIES) {
1291 return EPROTO;
1294 if (reply->status == 0) {
1295 *caps = reply->rdata.data.caps;
1297 return reply->status;
1300 /* CTDB_CONTROL_RECD_PING */
1302 void ctdb_req_control_recd_ping(struct ctdb_req_control *request)
1304 request->opcode = CTDB_CONTROL_RECD_PING;
1305 request->pad = 0;
1306 request->srvid = 0;
1307 request->client_id = 0;
1308 request->flags = 0;
1310 request->rdata.opcode = CTDB_CONTROL_RECD_PING;
1313 int ctdb_reply_control_recd_ping(struct ctdb_reply_control *reply)
1315 return ctdb_reply_control_generic(reply, CTDB_CONTROL_RECD_PING);
1318 /* CTDB_CONTROL_RELEASE_IP */
1320 void ctdb_req_control_release_ip(struct ctdb_req_control *request,
1321 struct ctdb_public_ip *pubip)
1323 request->opcode = CTDB_CONTROL_RELEASE_IP;
1324 request->pad = 0;
1325 request->srvid = 0;
1326 request->client_id = 0;
1327 request->flags = 0;
1329 request->rdata.opcode = CTDB_CONTROL_RELEASE_IP;
1330 request->rdata.data.pubip = pubip;
1333 int ctdb_reply_control_release_ip(struct ctdb_reply_control *reply)
1335 return ctdb_reply_control_generic(reply, CTDB_CONTROL_RELEASE_IP);
1338 /* CTDB_CONTROL_TAKEOVER_IP */
1340 void ctdb_req_control_takeover_ip(struct ctdb_req_control *request,
1341 struct ctdb_public_ip *pubip)
1343 request->opcode = CTDB_CONTROL_TAKEOVER_IP;
1344 request->pad = 0;
1345 request->srvid = 0;
1346 request->client_id = 0;
1347 request->flags = 0;
1349 request->rdata.opcode = CTDB_CONTROL_TAKEOVER_IP;
1350 request->rdata.data.pubip = pubip;
1353 int ctdb_reply_control_takeover_ip(struct ctdb_reply_control *reply)
1355 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TAKEOVER_IP);
1358 /* CTDB_CONTROL_GET_PUBLIC_IPS */
1360 void ctdb_req_control_get_public_ips(struct ctdb_req_control *request,
1361 bool available_only)
1363 request->opcode = CTDB_CONTROL_GET_PUBLIC_IPS;
1364 request->pad = 0;
1365 request->srvid = 0;
1366 request->client_id = 0;
1367 request->flags = 0;
1369 request->rdata.opcode = CTDB_CONTROL_GET_PUBLIC_IPS;
1370 if (available_only) {
1371 request->flags = CTDB_PUBLIC_IP_FLAGS_ONLY_AVAILABLE;
1375 int ctdb_reply_control_get_public_ips(struct ctdb_reply_control *reply,
1376 TALLOC_CTX *mem_ctx,
1377 struct ctdb_public_ip_list **pubip_list)
1379 if (reply->rdata.opcode != CTDB_CONTROL_GET_PUBLIC_IPS) {
1380 return EPROTO;
1383 if (reply->status == 0) {
1384 *pubip_list = talloc_steal(mem_ctx,
1385 reply->rdata.data.pubip_list);
1387 return reply->status;
1390 /* CTDB_CONTROL_GET_NODEMAP */
1392 void ctdb_req_control_get_nodemap(struct ctdb_req_control *request)
1394 request->opcode = CTDB_CONTROL_GET_NODEMAP;
1395 request->pad = 0;
1396 request->srvid = 0;
1397 request->client_id = 0;
1398 request->flags = 0;
1400 request->rdata.opcode = CTDB_CONTROL_GET_NODEMAP;
1403 int ctdb_reply_control_get_nodemap(struct ctdb_reply_control *reply,
1404 TALLOC_CTX *mem_ctx,
1405 struct ctdb_node_map **nodemap)
1407 if (reply->rdata.opcode != CTDB_CONTROL_GET_NODEMAP) {
1408 return EPROTO;
1411 if (reply->status == 0) {
1412 *nodemap = talloc_steal(mem_ctx, reply->rdata.data.nodemap);
1414 return reply->status;
1417 /* CTDB_CONTROL_TRAVERSE_KILL */
1419 void ctdb_req_control_traverse_kill(struct ctdb_req_control *request,
1420 struct ctdb_traverse_start *traverse)
1422 request->opcode = CTDB_CONTROL_TRAVERSE_KILL;
1423 request->pad = 0;
1424 request->srvid = 0;
1425 request->client_id = 0;
1426 request->flags = 0;
1428 request->rdata.opcode = CTDB_CONTROL_TRAVERSE_KILL;
1429 request->rdata.data.traverse_start = traverse;
1432 int ctdb_reply_control_traverse_kill(struct ctdb_reply_control *reply)
1434 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TRAVERSE_KILL);
1437 /* CTDB_CONTROL_RECD_RECLOCK_LATENCY */
1439 void ctdb_req_control_recd_reclock_latency(struct ctdb_req_control *request,
1440 double reclock_latency)
1442 request->opcode = CTDB_CONTROL_RECD_RECLOCK_LATENCY;
1443 request->pad = 0;
1444 request->srvid = 0;
1445 request->client_id = 0;
1446 request->flags = 0;
1448 request->rdata.opcode = CTDB_CONTROL_RECD_RECLOCK_LATENCY;
1449 request->rdata.data.reclock_latency = reclock_latency;
1452 int ctdb_reply_control_recd_reclock_latency(struct ctdb_reply_control *reply)
1454 return ctdb_reply_control_generic(reply,
1455 CTDB_CONTROL_RECD_RECLOCK_LATENCY);
1458 /* CTDB_CONTROL_GET_RECLOCK_FILE */
1460 void ctdb_req_control_get_reclock_file(struct ctdb_req_control *request)
1462 request->opcode = CTDB_CONTROL_GET_RECLOCK_FILE;
1463 request->pad = 0;
1464 request->srvid = 0;
1465 request->client_id = 0;
1466 request->flags = 0;
1468 request->rdata.opcode = CTDB_CONTROL_GET_RECLOCK_FILE;
1471 int ctdb_reply_control_get_reclock_file(struct ctdb_reply_control *reply,
1472 TALLOC_CTX *mem_ctx,
1473 const char **reclock_file)
1475 if (reply->rdata.opcode != CTDB_CONTROL_GET_RECLOCK_FILE) {
1476 return EPROTO;
1479 if (reply->status == 0) {
1480 *reclock_file = talloc_steal(mem_ctx,
1481 reply->rdata.data.reclock_file);
1483 return reply->status;
1486 /* CTDB_CONTROL_STOP_NODE */
1488 void ctdb_req_control_stop_node(struct ctdb_req_control *request)
1490 request->opcode = CTDB_CONTROL_STOP_NODE;
1491 request->pad = 0;
1492 request->srvid = 0;
1493 request->client_id = 0;
1494 request->flags = 0;
1496 request->rdata.opcode = CTDB_CONTROL_STOP_NODE;
1499 int ctdb_reply_control_stop_node(struct ctdb_reply_control *reply)
1501 return ctdb_reply_control_generic(reply, CTDB_CONTROL_STOP_NODE);
1504 /* CTDB_CONTROL_CONTINUE_NODE */
1506 void ctdb_req_control_continue_node(struct ctdb_req_control *request)
1508 request->opcode = CTDB_CONTROL_CONTINUE_NODE;
1509 request->pad = 0;
1510 request->srvid = 0;
1511 request->client_id = 0;
1512 request->flags = 0;
1514 request->rdata.opcode = CTDB_CONTROL_CONTINUE_NODE;
1517 int ctdb_reply_control_continue_node(struct ctdb_reply_control *reply)
1519 return ctdb_reply_control_generic(reply, CTDB_CONTROL_CONTINUE_NODE);
1522 /* CTDB_CONTROL_SET_LMASTERROLE */
1524 void ctdb_req_control_set_lmasterrole(struct ctdb_req_control *request,
1525 uint32_t lmaster_role)
1527 request->opcode = CTDB_CONTROL_SET_LMASTERROLE;
1528 request->pad = 0;
1529 request->srvid = 0;
1530 request->client_id = 0;
1531 request->flags = 0;
1533 request->rdata.opcode = CTDB_CONTROL_SET_LMASTERROLE;
1534 request->rdata.data.role = lmaster_role;
1537 int ctdb_reply_control_set_lmasterrole(struct ctdb_reply_control *reply)
1539 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_LMASTERROLE);
1542 /* CTDB_CONTROL_SET_RECMASTERROLE */
1544 void ctdb_req_control_set_recmasterrole(struct ctdb_req_control *request,
1545 uint32_t recmaster_role)
1547 request->opcode = CTDB_CONTROL_SET_RECMASTERROLE;
1548 request->pad = 0;
1549 request->srvid = 0;
1550 request->client_id = 0;
1551 request->flags = 0;
1553 request->rdata.opcode = CTDB_CONTROL_SET_RECMASTERROLE;
1554 request->rdata.data.role = recmaster_role;
1557 int ctdb_reply_control_set_recmasterrole(struct ctdb_reply_control *reply)
1559 return ctdb_reply_control_generic(reply,
1560 CTDB_CONTROL_SET_RECMASTERROLE);
1563 /* CTDB_CONTROL_SET_BAN_STATE */
1565 void ctdb_req_control_set_ban_state(struct ctdb_req_control *request,
1566 struct ctdb_ban_state *ban_state)
1568 request->opcode = CTDB_CONTROL_SET_BAN_STATE;
1569 request->pad = 0;
1570 request->srvid = 0;
1571 request->client_id = 0;
1572 request->flags = 0;
1574 request->rdata.opcode = CTDB_CONTROL_SET_BAN_STATE;
1575 request->rdata.data.ban_state = ban_state;
1578 int ctdb_reply_control_set_ban_state(struct ctdb_reply_control *reply)
1580 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_BAN_STATE);
1583 /* CTDB_CONTROL_GET_BAN_STATE */
1585 void ctdb_req_control_get_ban_state(struct ctdb_req_control *request)
1587 request->opcode = CTDB_CONTROL_GET_BAN_STATE;
1588 request->pad = 0;
1589 request->srvid = 0;
1590 request->client_id = 0;
1591 request->flags = 0;
1593 request->rdata.opcode = CTDB_CONTROL_GET_BAN_STATE;
1596 int ctdb_reply_control_get_ban_state(struct ctdb_reply_control *reply,
1597 TALLOC_CTX *mem_ctx,
1598 struct ctdb_ban_state **ban_state)
1600 if (reply->rdata.opcode != CTDB_CONTROL_GET_BAN_STATE) {
1601 return EPROTO;
1604 if (reply->status == 0) {
1605 *ban_state = talloc_steal(mem_ctx,
1606 reply->rdata.data.ban_state);
1608 return reply->status;
1611 /* CTDB_CONTROL_REGISTER_NOTIFY */
1613 void ctdb_req_control_register_notify(struct ctdb_req_control *request,
1614 struct ctdb_notify_data *notify)
1616 request->opcode = CTDB_CONTROL_REGISTER_NOTIFY;
1617 request->pad = 0;
1618 request->srvid = 0;
1619 request->client_id = 0;
1620 request->flags = 0;
1622 request->rdata.opcode = CTDB_CONTROL_REGISTER_NOTIFY;
1623 request->rdata.data.notify = notify;
1626 int ctdb_reply_control_register_notify(struct ctdb_reply_control *reply)
1628 return ctdb_reply_control_generic(reply, CTDB_CONTROL_REGISTER_NOTIFY);
1631 /* CTDB_CONTROL_DEREGISTER_NOTIFY */
1633 void ctdb_req_control_deregister_notify(struct ctdb_req_control *request,
1634 uint64_t srvid)
1636 request->opcode = CTDB_CONTROL_DEREGISTER_NOTIFY;
1637 request->pad = 0;
1638 request->srvid = 0;
1639 request->client_id = 0;
1640 request->flags = 0;
1642 request->rdata.opcode = CTDB_CONTROL_DEREGISTER_NOTIFY;
1643 request->rdata.data.srvid = srvid;
1646 int ctdb_reply_control_deregister_notify(struct ctdb_reply_control *reply)
1648 return ctdb_reply_control_generic(reply,
1649 CTDB_CONTROL_DEREGISTER_NOTIFY);
1652 /* CTDB_CONTROL_TRANS3_COMMIT */
1654 void ctdb_req_control_trans3_commit(struct ctdb_req_control *request,
1655 struct ctdb_rec_buffer *recbuf)
1657 request->opcode = CTDB_CONTROL_TRANS3_COMMIT;
1658 request->pad = 0;
1659 request->srvid = 0;
1660 request->client_id = 0;
1661 request->flags = 0;
1663 request->rdata.opcode = CTDB_CONTROL_TRANS3_COMMIT;
1664 request->rdata.data.recbuf = recbuf;
1667 int ctdb_reply_control_trans3_commit(struct ctdb_reply_control *reply)
1669 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TRANS3_COMMIT);
1672 /* CTDB_CONTROL_GET_DB_SEQNUM */
1674 void ctdb_req_control_get_db_seqnum(struct ctdb_req_control *request,
1675 uint32_t db_id)
1677 request->opcode = CTDB_CONTROL_GET_DB_SEQNUM;
1678 request->pad = 0;
1679 request->srvid = 0;
1680 request->client_id = 0;
1681 request->flags = 0;
1683 request->rdata.opcode = CTDB_CONTROL_GET_DB_SEQNUM;
1684 request->rdata.data.db_id = db_id;
1687 int ctdb_reply_control_get_db_seqnum(struct ctdb_reply_control *reply,
1688 uint64_t *seqnum)
1690 if (reply->rdata.opcode != CTDB_CONTROL_GET_DB_SEQNUM) {
1691 return EPROTO;
1694 if (reply->status == 0) {
1695 *seqnum = reply->rdata.data.seqnum;
1697 return reply->status;
1700 /* CTDB_CONTROL_DB_SET_HEALTHY */
1702 void ctdb_req_control_db_set_healthy(struct ctdb_req_control *request,
1703 uint32_t db_id)
1705 request->opcode = CTDB_CONTROL_DB_SET_HEALTHY;
1706 request->pad = 0;
1707 request->srvid = 0;
1708 request->client_id = 0;
1709 request->flags = 0;
1711 request->rdata.opcode = CTDB_CONTROL_DB_SET_HEALTHY;
1712 request->rdata.data.db_id = db_id;
1715 int ctdb_reply_control_db_set_healthy(struct ctdb_reply_control *reply)
1717 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_SET_HEALTHY);
1720 /* CTDB_CONTROL_DB_GET_HEALTH */
1722 void ctdb_req_control_db_get_health(struct ctdb_req_control *request,
1723 uint32_t db_id)
1725 request->opcode = CTDB_CONTROL_DB_GET_HEALTH;
1726 request->pad = 0;
1727 request->srvid = 0;
1728 request->client_id = 0;
1729 request->flags = 0;
1731 request->rdata.opcode = CTDB_CONTROL_DB_GET_HEALTH;
1732 request->rdata.data.db_id = db_id;
1735 int ctdb_reply_control_db_get_health(struct ctdb_reply_control *reply,
1736 TALLOC_CTX *mem_ctx, const char **reason)
1738 if (reply->rdata.opcode != CTDB_CONTROL_DB_GET_HEALTH) {
1739 return EPROTO;
1742 if (reply->status == 0) {
1743 *reason = talloc_steal(mem_ctx, reply->rdata.data.reason);
1745 return reply->status;
1748 /* CTDB_CONTROL_GET_PUBLIC_IP_INFO */
1750 void ctdb_req_control_get_public_ip_info(struct ctdb_req_control *request,
1751 ctdb_sock_addr *addr)
1753 request->opcode = CTDB_CONTROL_GET_PUBLIC_IP_INFO;
1754 request->pad = 0;
1755 request->srvid = 0;
1756 request->client_id = 0;
1757 request->flags = 0;
1759 request->rdata.opcode = CTDB_CONTROL_GET_PUBLIC_IP_INFO;
1760 request->rdata.data.addr = addr;
1763 int ctdb_reply_control_get_public_ip_info(struct ctdb_reply_control *reply,
1764 TALLOC_CTX *mem_ctx,
1765 struct ctdb_public_ip_info **ipinfo)
1767 if (reply->rdata.opcode != CTDB_CONTROL_GET_PUBLIC_IP_INFO) {
1768 return EPROTO;
1771 if (reply->status == 0) {
1772 *ipinfo = talloc_steal(mem_ctx, reply->rdata.data.ipinfo);
1774 return reply->status;
1777 /* CTDB_CONTROL_GET_IFACES */
1779 void ctdb_req_control_get_ifaces(struct ctdb_req_control *request)
1781 request->opcode = CTDB_CONTROL_GET_IFACES;
1782 request->pad = 0;
1783 request->srvid = 0;
1784 request->client_id = 0;
1785 request->flags = 0;
1787 request->rdata.opcode = CTDB_CONTROL_GET_IFACES;
1790 int ctdb_reply_control_get_ifaces(struct ctdb_reply_control *reply,
1791 TALLOC_CTX *mem_ctx,
1792 struct ctdb_iface_list **iface_list)
1794 if (reply->rdata.opcode != CTDB_CONTROL_GET_IFACES) {
1795 return EPROTO;
1798 if (reply->status == 0) {
1799 *iface_list = talloc_steal(mem_ctx,
1800 reply->rdata.data.iface_list);
1802 return reply->status;
1805 /* CTDB_CONTROL_SET_IFACE_LINK_STATE */
1807 void ctdb_req_control_set_iface_link_state(struct ctdb_req_control *request,
1808 struct ctdb_iface *iface)
1810 request->opcode = CTDB_CONTROL_SET_IFACE_LINK_STATE;
1811 request->pad = 0;
1812 request->srvid = 0;
1813 request->client_id = 0;
1814 request->flags = 0;
1816 request->rdata.opcode = CTDB_CONTROL_SET_IFACE_LINK_STATE;
1817 request->rdata.data.iface = iface;
1820 int ctdb_reply_control_set_iface_link_state(struct ctdb_reply_control *reply)
1822 return ctdb_reply_control_generic(reply,
1823 CTDB_CONTROL_SET_IFACE_LINK_STATE);
1826 /* CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE */
1828 void ctdb_req_control_tcp_add_delayed_update(struct ctdb_req_control *request,
1829 struct ctdb_connection *conn)
1831 request->opcode = CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE;
1832 request->pad = 0;
1833 request->srvid = 0;
1834 request->client_id = 0;
1835 request->flags = 0;
1837 request->rdata.opcode = CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE;
1838 request->rdata.data.conn = conn;
1841 int ctdb_reply_control_tcp_add_delayed_update(struct ctdb_reply_control *reply)
1843 return ctdb_reply_control_generic(reply,
1844 CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE);
1847 /* CTDB_CONTROL_GET_STAT_HISTORY */
1849 void ctdb_req_control_get_stat_history(struct ctdb_req_control *request)
1851 request->opcode = CTDB_CONTROL_GET_STAT_HISTORY;
1852 request->pad = 0;
1853 request->srvid = 0;
1854 request->client_id = 0;
1855 request->flags = 0;
1857 request->rdata.opcode = CTDB_CONTROL_GET_STAT_HISTORY;
1860 int ctdb_reply_control_get_stat_history(struct ctdb_reply_control *reply,
1861 TALLOC_CTX *mem_ctx,
1862 struct ctdb_statistics_list **stats_list)
1864 if (reply->rdata.opcode != CTDB_CONTROL_GET_STAT_HISTORY) {
1865 return EPROTO;
1868 if (reply->status == 0) {
1869 *stats_list = talloc_steal(mem_ctx,
1870 reply->rdata.data.stats_list);
1872 return reply->status;
1875 /* CTDB_CONTROL_SCHEDULE_FOR_DELETION */
1877 void ctdb_req_control_schedule_for_deletion(struct ctdb_req_control *request,
1878 struct ctdb_key_data *key)
1880 request->opcode = CTDB_CONTROL_SCHEDULE_FOR_DELETION;
1881 request->pad = 0;
1882 request->srvid = 0;
1883 request->client_id = 0;
1884 request->flags = 0;
1886 request->rdata.opcode = CTDB_CONTROL_SCHEDULE_FOR_DELETION;
1887 request->rdata.data.key = key;
1890 int ctdb_reply_control_schedule_for_deletion(struct ctdb_reply_control *reply)
1892 return ctdb_reply_control_generic(reply,
1893 CTDB_CONTROL_SCHEDULE_FOR_DELETION);
1896 /* CTDB_CONTROL_SET_DB_READONLY */
1898 void ctdb_req_control_set_db_readonly(struct ctdb_req_control *request,
1899 uint32_t db_id)
1901 request->opcode = CTDB_CONTROL_SET_DB_READONLY;
1902 request->pad = 0;
1903 request->srvid = 0;
1904 request->client_id = 0;
1905 request->flags = 0;
1907 request->rdata.opcode = CTDB_CONTROL_SET_DB_READONLY;
1908 request->rdata.data.db_id = db_id;
1911 int ctdb_reply_control_set_db_readonly(struct ctdb_reply_control *reply)
1913 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_DB_READONLY);
1916 /* CTDB_CONTROL_CHECK_SRVIDS */
1918 /* CTDB_CONTROL_TRAVERSE_START_EXT */
1920 void ctdb_req_control_traverse_start_ext(struct ctdb_req_control *request,
1921 struct ctdb_traverse_start_ext *traverse)
1923 request->opcode = CTDB_CONTROL_TRAVERSE_START_EXT;
1924 request->pad = 0;
1925 request->srvid = 0;
1926 request->client_id = 0;
1927 request->flags = 0;
1929 request->rdata.opcode = CTDB_CONTROL_TRAVERSE_START_EXT;
1930 request->rdata.data.traverse_start_ext = traverse;
1933 int ctdb_reply_control_traverse_start_ext(struct ctdb_reply_control *reply)
1935 return ctdb_reply_control_generic(reply,
1936 CTDB_CONTROL_TRAVERSE_START_EXT);
1939 /* CTDB_CONTROL_GET_DB_STATISTICS */
1941 void ctdb_req_control_get_db_statistics(struct ctdb_req_control *request,
1942 uint32_t db_id)
1944 request->opcode = CTDB_CONTROL_GET_DB_STATISTICS;
1945 request->pad = 0;
1946 request->srvid = 0;
1947 request->client_id = 0;
1948 request->flags = 0;
1950 request->rdata.opcode = CTDB_CONTROL_GET_DB_STATISTICS;
1951 request->rdata.data.db_id = db_id;
1954 int ctdb_reply_control_get_db_statistics(struct ctdb_reply_control *reply,
1955 TALLOC_CTX *mem_ctx,
1956 struct ctdb_db_statistics **dbstats)
1958 if (reply->rdata.opcode != CTDB_CONTROL_GET_DB_STATISTICS) {
1959 return EPROTO;
1962 if (reply->status == 0) {
1963 *dbstats = talloc_steal(mem_ctx, reply->rdata.data.dbstats);
1965 return reply->status;
1968 /* CTDB_CONTROL_SET_DB_STICKY */
1970 void ctdb_req_control_set_db_sticky(struct ctdb_req_control *request,
1971 uint32_t db_id)
1973 request->opcode = CTDB_CONTROL_SET_DB_STICKY;
1974 request->pad = 0;
1975 request->srvid = 0;
1976 request->client_id = 0;
1977 request->flags = 0;
1979 request->rdata.opcode = CTDB_CONTROL_SET_DB_STICKY;
1980 request->rdata.data.db_id = db_id;
1983 int ctdb_reply_control_set_db_sticky(struct ctdb_reply_control *reply)
1985 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_DB_STICKY);
1988 /* CTDB_CONTROL_RELOAD_PUBLIC_IPS */
1990 void ctdb_req_control_reload_public_ips(struct ctdb_req_control *request)
1992 request->opcode = CTDB_CONTROL_RELOAD_PUBLIC_IPS;
1993 request->pad = 0;
1994 request->srvid = 0;
1995 request->client_id = 0;
1996 request->flags = 0;
1998 request->rdata.opcode = CTDB_CONTROL_RELOAD_PUBLIC_IPS;
2001 int ctdb_reply_control_reload_public_ips(struct ctdb_reply_control *reply)
2003 return ctdb_reply_control_generic(reply,
2004 CTDB_CONTROL_RELOAD_PUBLIC_IPS);
2007 /* CTDB_CONTROL_TRAVERSE_ALL_EXT */
2009 /* CTDB_CONTROL_RECEIVE_RECORDS */
2011 void ctdb_req_control_receive_records(struct ctdb_req_control *request,
2012 struct ctdb_rec_buffer *recbuf)
2014 request->opcode = CTDB_CONTROL_RECEIVE_RECORDS;
2015 request->pad = 0;
2016 request->srvid = 0;
2017 request->client_id = 0;
2018 request->flags = 0;
2020 request->rdata.opcode = CTDB_CONTROL_RECEIVE_RECORDS;
2021 request->rdata.data.recbuf = recbuf;
2024 int ctdb_reply_control_receive_records(struct ctdb_reply_control *reply,
2025 TALLOC_CTX *mem_ctx,
2026 struct ctdb_rec_buffer **recbuf)
2028 if (reply->rdata.opcode != CTDB_CONTROL_RECEIVE_RECORDS) {
2029 return EPROTO;
2032 if (reply->status == 0) {
2033 *recbuf = talloc_steal(mem_ctx, reply->rdata.data.recbuf);
2035 return reply->status;
2038 /* CTDB_CONTROL_IPREALLOCATED */
2040 void ctdb_req_control_ipreallocated(struct ctdb_req_control *request)
2042 request->opcode = CTDB_CONTROL_IPREALLOCATED;
2043 request->pad = 0;
2044 request->srvid = 0;
2045 request->client_id = 0;
2046 request->flags = 0;
2048 request->rdata.opcode = CTDB_CONTROL_IPREALLOCATED;
2051 int ctdb_reply_control_ipreallocated(struct ctdb_reply_control *reply)
2053 return ctdb_reply_control_generic(reply, CTDB_CONTROL_IPREALLOCATED);
2056 /* CTDB_CONTROL_GET_RUNSTATE */
2058 void ctdb_req_control_get_runstate(struct ctdb_req_control *request)
2060 request->opcode = CTDB_CONTROL_GET_RUNSTATE;
2061 request->pad = 0;
2062 request->srvid = 0;
2063 request->client_id = 0;
2064 request->flags = 0;
2066 request->rdata.opcode = CTDB_CONTROL_GET_RUNSTATE;
2069 int ctdb_reply_control_get_runstate(struct ctdb_reply_control *reply,
2070 enum ctdb_runstate *runstate)
2072 if (reply->rdata.opcode != CTDB_CONTROL_GET_RUNSTATE) {
2073 return EPROTO;
2076 if (reply->status == 0) {
2077 *runstate = reply->rdata.data.runstate;
2079 return reply->status;
2082 /* CTDB_CONTROL_DB_DETACH */
2084 void ctdb_req_control_db_detach(struct ctdb_req_control *request,
2085 uint32_t db_id)
2087 request->opcode = CTDB_CONTROL_DB_DETACH;
2088 request->pad = 0;
2089 request->srvid = 0;
2090 request->client_id = 0;
2091 request->flags = 0;
2093 request->rdata.opcode = CTDB_CONTROL_DB_DETACH;
2094 request->rdata.data.db_id = db_id;
2097 int ctdb_reply_control_db_detach(struct ctdb_reply_control *reply)
2099 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_DETACH);
2102 /* CTDB_CONTROL_GET_NODES_FILE */
2104 void ctdb_req_control_get_nodes_file(struct ctdb_req_control *request)
2106 request->opcode = CTDB_CONTROL_GET_NODES_FILE;
2107 request->pad = 0;
2108 request->srvid = 0;
2109 request->client_id = 0;
2110 request->flags = 0;
2112 request->rdata.opcode = CTDB_CONTROL_GET_NODES_FILE;
2115 int ctdb_reply_control_get_nodes_file(struct ctdb_reply_control *reply,
2116 TALLOC_CTX *mem_ctx,
2117 struct ctdb_node_map **nodemap)
2119 if (reply->rdata.opcode != CTDB_CONTROL_GET_NODES_FILE) {
2120 return EPROTO;
2123 if (reply->status == 0) {
2124 *nodemap = talloc_steal(mem_ctx, reply->rdata.data.nodemap);
2126 return reply->status;
2129 /* CTDB_CONTROL_DB_FREEZE */
2131 void ctdb_req_control_db_freeze(struct ctdb_req_control *request,
2132 uint32_t db_id)
2134 request->opcode = CTDB_CONTROL_DB_FREEZE;
2135 request->pad = 0;
2136 request->srvid = 0;
2137 request->client_id = 0;
2138 request->flags = 0;
2140 request->rdata.opcode = CTDB_CONTROL_DB_FREEZE;
2141 request->rdata.data.db_id = db_id;
2144 int ctdb_reply_control_db_freeze(struct ctdb_reply_control *reply)
2146 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_FREEZE);
2149 /* CTDB_CONTROL_DB_THAW */
2151 void ctdb_req_control_db_thaw(struct ctdb_req_control *request,
2152 uint32_t db_id)
2154 request->opcode = CTDB_CONTROL_DB_THAW;
2155 request->pad = 0;
2156 request->srvid = 0;
2157 request->client_id = 0;
2158 request->flags = 0;
2160 request->rdata.opcode = CTDB_CONTROL_DB_THAW;
2161 request->rdata.data.db_id = db_id;
2164 int ctdb_reply_control_db_thaw(struct ctdb_reply_control *reply)
2166 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_THAW);
2169 /* CTDB_CONTROL_DB_TRANSACTION_START */
2171 void ctdb_req_control_db_transaction_start(struct ctdb_req_control *request,
2172 struct ctdb_transdb *transdb)
2174 request->opcode = CTDB_CONTROL_DB_TRANSACTION_START;
2175 request->pad = 0;
2176 request->srvid = 0;
2177 request->client_id = 0;
2178 request->flags = 0;
2180 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_START;
2181 request->rdata.data.transdb = transdb;
2184 int ctdb_reply_control_db_transaction_start(struct ctdb_reply_control *reply)
2186 return ctdb_reply_control_generic(reply,
2187 CTDB_CONTROL_DB_TRANSACTION_START);
2190 /* CTDB_CONTROL_DB_TRANSACTION_COMMIT */
2192 void ctdb_req_control_db_transaction_commit(struct ctdb_req_control *request,
2193 struct ctdb_transdb *transdb)
2195 request->opcode = CTDB_CONTROL_DB_TRANSACTION_COMMIT;
2196 request->pad = 0;
2197 request->srvid = 0;
2198 request->client_id = 0;
2199 request->flags = 0;
2201 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_COMMIT;
2202 request->rdata.data.transdb = transdb;
2205 int ctdb_reply_control_db_transaction_commit(struct ctdb_reply_control *reply)
2207 return ctdb_reply_control_generic(reply,
2208 CTDB_CONTROL_DB_TRANSACTION_COMMIT);
2211 /* CTDB_CONTROL_DB_TRANSACTION_CANCEL */
2213 void ctdb_req_control_db_transaction_cancel(struct ctdb_req_control *request,
2214 uint32_t db_id)
2216 request->opcode = CTDB_CONTROL_DB_TRANSACTION_CANCEL;
2217 request->pad = 0;
2218 request->srvid = 0;
2219 request->client_id = 0;
2220 request->flags = 0;
2222 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_CANCEL;
2223 request->rdata.data.db_id = db_id;
2226 int ctdb_reply_control_db_transaction_cancel(struct ctdb_reply_control *reply)
2228 return ctdb_reply_control_generic(reply,
2229 CTDB_CONTROL_DB_TRANSACTION_CANCEL);
2232 /* CTDB_CONTROL_DB_PULL */
2234 void ctdb_req_control_db_pull(struct ctdb_req_control *request,
2235 struct ctdb_pulldb_ext *pulldb_ext)
2237 request->opcode = CTDB_CONTROL_DB_PULL;
2238 request->pad = 0;
2239 request->srvid = 0;
2240 request->client_id = 0;
2241 request->flags = 0;
2243 request->rdata.opcode = CTDB_CONTROL_DB_PULL;
2244 request->rdata.data.pulldb_ext = pulldb_ext;
2247 int ctdb_reply_control_db_pull(struct ctdb_reply_control *reply,
2248 uint32_t *num_records)
2250 if (reply->rdata.opcode != CTDB_CONTROL_DB_PULL) {
2251 return EPROTO;
2254 if (reply->status == 0) {
2255 *num_records = reply->rdata.data.num_records;
2257 return reply->status;
2260 /* CTDB_CONTROL_DB_PUSH_START */
2262 void ctdb_req_control_db_push_start(struct ctdb_req_control *request,
2263 struct ctdb_pulldb_ext *pulldb_ext)
2265 request->opcode = CTDB_CONTROL_DB_PUSH_START;
2266 request->pad = 0;
2267 request->srvid = 0;
2268 request->client_id = 0;
2269 request->flags = 0;
2271 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_START;
2272 request->rdata.data.pulldb_ext = pulldb_ext;
2275 int ctdb_reply_control_db_push_start(struct ctdb_reply_control *reply)
2277 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_PUSH_START);
2280 /* CTDB_CONTROL_DB_PUSH_CONFIRM */
2282 void ctdb_req_control_db_push_confirm(struct ctdb_req_control *request,
2283 uint32_t db_id)
2285 request->opcode = CTDB_CONTROL_DB_PUSH_CONFIRM;
2286 request->pad = 0;
2287 request->srvid = 0;
2288 request->client_id = 0;
2289 request->flags = 0;
2291 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_CONFIRM;
2292 request->rdata.data.db_id = db_id;
2295 int ctdb_reply_control_db_push_confirm(struct ctdb_reply_control *reply,
2296 uint32_t *num_records)
2298 if (reply->rdata.opcode != CTDB_CONTROL_DB_PUSH_CONFIRM) {
2299 return EPROTO;
2302 if (reply->status == 0) {
2303 *num_records = reply->rdata.data.num_records;
2305 return reply->status;
2308 /* CTDB_CONTROL_DB_OPEN_FLAGS */
2310 void ctdb_req_control_db_open_flags(struct ctdb_req_control *request,
2311 uint32_t db_id)
2313 request->opcode = CTDB_CONTROL_DB_OPEN_FLAGS;
2314 request->pad = 0;
2315 request->srvid = 0;
2316 request->client_id = 0;
2317 request->flags = 0;
2319 request->rdata.opcode = CTDB_CONTROL_DB_OPEN_FLAGS;
2320 request->rdata.data.db_id = db_id;
2323 int ctdb_reply_control_db_open_flags(struct ctdb_reply_control *reply,
2324 int *tdb_flags)
2326 if (reply->rdata.opcode != CTDB_CONTROL_DB_OPEN_FLAGS) {
2327 return EPROTO;
2330 if (reply->status == 0) {
2331 *tdb_flags = reply->rdata.data.tdb_flags;
2333 return reply->status;
2336 /* CTDB_CONTROL_DB_ATTACH_REPLICATED */
2338 void ctdb_req_control_db_attach_replicated(struct ctdb_req_control *request,
2339 const char *db_name)
2341 request->opcode = CTDB_CONTROL_DB_ATTACH_REPLICATED;
2342 request->pad = 0;
2343 request->srvid = 0;
2344 request->client_id = 0;
2345 request->flags = 0;
2347 request->rdata.opcode = CTDB_CONTROL_DB_ATTACH_REPLICATED;
2348 request->rdata.data.db_name = db_name;
2351 int ctdb_reply_control_db_attach_replicated(struct ctdb_reply_control *reply,
2352 uint32_t *db_id)
2354 if (reply->rdata.opcode != CTDB_CONTROL_DB_ATTACH_REPLICATED) {
2355 return EPROTO;
2357 if (reply->status == 0) {
2358 *db_id = reply->rdata.data.db_id;
2360 return reply->status;