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/>.
21 #include "system/network.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;
39 c->calldata = tdb_null;
43 static int ctdb_reply_control_generic(struct ctdb_reply_control
*reply
,
46 if (reply
->rdata
.opcode
!= opcode
) {
53 /* CTDB_CONTROL_PROCESS_EXISTS */
55 void ctdb_req_control_process_exists(struct ctdb_req_control
*request
,
58 request
->opcode
= CTDB_CONTROL_PROCESS_EXISTS
;
61 request
->client_id
= 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
,
72 if (reply
->rdata
.opcode
!= CTDB_CONTROL_PROCESS_EXISTS
) {
76 *status
= reply
->status
;
82 /* CTDB_CONTROL_STATISTICS */
84 void ctdb_req_control_statistics(struct ctdb_req_control
*request
)
86 request
->opcode
= CTDB_CONTROL_STATISTICS
;
89 request
->client_id
= 0;
92 request
->rdata
.opcode
= CTDB_CONTROL_STATISTICS
;
95 int ctdb_reply_control_statistics(struct ctdb_reply_control
*reply
,
97 struct ctdb_statistics
**stats
)
99 if (reply
->rdata
.opcode
!= CTDB_CONTROL_STATISTICS
) {
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
;
116 request
->client_id
= 0;
119 request
->rdata
.opcode
= CTDB_CONTROL_PING
;
122 int ctdb_reply_control_ping(struct ctdb_reply_control
*reply
,
125 if (reply
->rdata
.opcode
!= CTDB_CONTROL_PING
) {
129 if (reply
->status
>= 0) {
130 *num_clients
= reply
->status
;
133 return reply
->status
;
136 /* CTDB_CONTROL_GETDBPATH */
138 void ctdb_req_control_getdbpath(struct ctdb_req_control
*request
,
141 request
->opcode
= CTDB_CONTROL_GETDBPATH
;
144 request
->client_id
= 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
) {
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
;
171 request
->client_id
= 0;
174 request
->rdata
.opcode
= CTDB_CONTROL_GETVNNMAP
;
177 int ctdb_reply_control_getvnnmap(struct ctdb_reply_control
*reply
,
179 struct ctdb_vnn_map
**vnnmap
)
181 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GETVNNMAP
) {
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
;
199 request
->client_id
= 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
;
218 request
->client_id
= 0;
221 request
->rdata
.opcode
= CTDB_CONTROL_GET_DEBUG
;
224 int ctdb_reply_control_get_debug(struct ctdb_reply_control
*reply
,
227 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_DEBUG
) {
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
,
242 request
->opcode
= CTDB_CONTROL_SET_DEBUG
;
245 request
->client_id
= 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
;
264 request
->client_id
= 0;
267 request
->rdata
.opcode
= CTDB_CONTROL_GET_DBMAP
;
270 int ctdb_reply_control_get_dbmap(struct ctdb_reply_control
*reply
,
272 struct ctdb_dbid_map
**dbmap
)
274 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_DBMAP
) {
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
;
292 request
->client_id
= 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
,
301 struct ctdb_rec_buffer
**recbuf
)
303 if (reply
->rdata
.opcode
!= CTDB_CONTROL_PULL_DB
) {
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
;
321 request
->client_id
= 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
;
340 request
->client_id
= 0;
343 request
->rdata
.opcode
= CTDB_CONTROL_GET_RECMODE
;
346 int ctdb_reply_control_get_recmode(struct ctdb_reply_control
*reply
,
349 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_RECMODE
) {
353 if (reply
->status
>= 0) {
354 *recmode
= reply
->status
;
357 return reply
->status
;
360 /* CTDB_CONTROL_SET_RECMODE */
362 void ctdb_req_control_set_recmode(struct ctdb_req_control
*request
,
365 request
->opcode
= CTDB_CONTROL_SET_RECMODE
;
368 request
->client_id
= 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
;
387 request
->client_id
= 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
,
404 request
->opcode
= CTDB_CONTROL_DB_ATTACH
;
407 request
->client_id
= 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
,
417 if (reply
->rdata
.opcode
!= CTDB_CONTROL_DB_ATTACH
) {
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
;
437 request
->client_id
= 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
,
457 request
->opcode
= CTDB_CONTROL_REGISTER_SRVID
;
459 request
->srvid
= srvid
;
460 request
->client_id
= 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
,
476 request
->opcode
= CTDB_CONTROL_DEREGISTER_SRVID
;
478 request
->srvid
= srvid
;
479 request
->client_id
= 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
,
496 request
->opcode
= CTDB_CONTROL_GET_DBNAME
;
499 request
->client_id
= 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
) {
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
,
524 request
->opcode
= CTDB_CONTROL_ENABLE_SEQNUM
;
527 request
->client_id
= 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
,
544 request
->opcode
= CTDB_CONTROL_UPDATE_SEQNUM
;
547 request
->client_id
= 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
;
566 request
->client_id
= 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
) {
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
;
592 request
->client_id
= 0;
595 request
->rdata
.opcode
= CTDB_CONTROL_GET_PID
;
598 int ctdb_reply_control_get_pid(struct ctdb_reply_control
*reply
,
601 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_PID
) {
605 *pid
= reply
->status
;
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
;
618 request
->client_id
= 0;
621 request
->rdata
.opcode
= CTDB_CONTROL_GET_RECMASTER
;
624 int ctdb_reply_control_get_recmaster(struct ctdb_reply_control
*reply
,
627 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_RECMASTER
) {
631 *recmaster
= reply
->status
;
634 return reply
->status
;
637 /* CTDB_CONTROL_SET_RECMASTER */
639 void ctdb_req_control_set_recmaster(struct ctdb_req_control
*request
,
642 request
->opcode
= CTDB_CONTROL_SET_RECMASTER
;
645 request
->client_id
= 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
,
662 request
->opcode
= CTDB_CONTROL_FREEZE
;
664 request
->srvid
= priority
;
665 request
->client_id
= 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
;
683 request
->client_id
= 0;
686 request
->rdata
.opcode
= CTDB_CONTROL_GET_PNN
;
689 int ctdb_reply_control_get_pnn(struct ctdb_reply_control
*reply
,
692 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_PNN
) {
696 if (reply
->status
>= 0) {
697 *pnn
= reply
->status
;
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
;
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
;
728 request
->client_id
= 0;
731 request
->rdata
.opcode
= CTDB_CONTROL_GET_MONMODE
;
734 int ctdb_reply_control_get_monmode(struct ctdb_reply_control
*reply
,
737 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_MONMODE
) {
741 if (reply
->status
>= 0) {
742 *mon_mode
= reply
->status
;
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
;
756 request
->client_id
= 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
;
776 request
->client_id
= 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
;
796 request
->client_id
= 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
;
815 request
->client_id
= 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
;
834 request
->client_id
= 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
,
851 request
->opcode
= CTDB_CONTROL_GET_TUNABLE
;
854 request
->client_id
= 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
,
864 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_TUNABLE
) {
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
;
881 request
->client_id
= 0;
884 request
->rdata
.opcode
= CTDB_CONTROL_LIST_TUNABLES
;
887 int ctdb_reply_control_list_tunables(struct ctdb_reply_control
*reply
,
889 struct ctdb_var_list
**tun_var_list
)
891 if (reply
->rdata
.opcode
!= CTDB_CONTROL_LIST_TUNABLES
) {
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
;
910 request
->client_id
= 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
;
929 request
->client_id
= 0;
932 request
->rdata
.opcode
= CTDB_CONTROL_GET_ALL_TUNABLES
;
935 int ctdb_reply_control_get_all_tunables(struct ctdb_reply_control
*reply
,
937 struct ctdb_tunable_list
**tun_list
)
939 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_ALL_TUNABLES
) {
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
;
957 request
->client_id
= 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
,
966 struct ctdb_tickle_list
**tickles
)
968 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_TCP_TICKLE_LIST
) {
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
;
986 request
->client_id
= 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
;
1007 request
->client_id
= 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
,
1017 if (reply
->rdata
.opcode
!= CTDB_CONTROL_DB_ATTACH_PERSISTENT
) {
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
;
1035 request
->client_id
= 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
;
1055 request
->client_id
= 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
;
1076 request
->client_id
= 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
;
1095 request
->client_id
= 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
) {
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
;
1121 request
->client_id
= 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
;
1139 request
->client_id
= 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
;
1157 request
->client_id
= 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
;
1177 request
->client_id
= 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
) {
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
;
1205 request
->client_id
= 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
;
1223 request
->client_id
= 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
;
1242 request
->client_id
= 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
;
1262 request
->client_id
= 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
;
1281 request
->client_id
= 0;
1284 request
->rdata
.opcode
= CTDB_CONTROL_GET_CAPABILITIES
;
1287 int ctdb_reply_control_get_capabilities(struct ctdb_reply_control
*reply
,
1290 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_CAPABILITIES
) {
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
;
1307 request
->client_id
= 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
;
1326 request
->client_id
= 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
;
1346 request
->client_id
= 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
;
1366 request
->client_id
= 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
) {
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
;
1397 request
->client_id
= 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
) {
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
;
1425 request
->client_id
= 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
;
1445 request
->client_id
= 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
;
1465 request
->client_id
= 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
) {
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
;
1493 request
->client_id
= 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
;
1511 request
->client_id
= 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
;
1530 request
->client_id
= 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
;
1550 request
->client_id
= 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
;
1571 request
->client_id
= 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
;
1590 request
->client_id
= 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
) {
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
;
1619 request
->client_id
= 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
,
1636 request
->opcode
= CTDB_CONTROL_DEREGISTER_NOTIFY
;
1639 request
->client_id
= 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
;
1660 request
->client_id
= 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
,
1677 request
->opcode
= CTDB_CONTROL_GET_DB_SEQNUM
;
1680 request
->client_id
= 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
,
1690 if (reply
->rdata
.opcode
!= CTDB_CONTROL_GET_DB_SEQNUM
) {
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
,
1705 request
->opcode
= CTDB_CONTROL_DB_SET_HEALTHY
;
1708 request
->client_id
= 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
,
1725 request
->opcode
= CTDB_CONTROL_DB_GET_HEALTH
;
1728 request
->client_id
= 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
) {
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
;
1756 request
->client_id
= 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
) {
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
;
1784 request
->client_id
= 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
) {
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
;
1813 request
->client_id
= 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
;
1834 request
->client_id
= 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
;
1854 request
->client_id
= 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
) {
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
;
1883 request
->client_id
= 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
,
1901 request
->opcode
= CTDB_CONTROL_SET_DB_READONLY
;
1904 request
->client_id
= 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
;
1926 request
->client_id
= 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
,
1944 request
->opcode
= CTDB_CONTROL_GET_DB_STATISTICS
;
1947 request
->client_id
= 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
) {
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
,
1973 request
->opcode
= CTDB_CONTROL_SET_DB_STICKY
;
1976 request
->client_id
= 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
;
1995 request
->client_id
= 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
;
2017 request
->client_id
= 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
) {
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
;
2045 request
->client_id
= 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
;
2063 request
->client_id
= 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
) {
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
,
2087 request
->opcode
= CTDB_CONTROL_DB_DETACH
;
2090 request
->client_id
= 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
;
2109 request
->client_id
= 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
) {
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
,
2134 request
->opcode
= CTDB_CONTROL_DB_FREEZE
;
2137 request
->client_id
= 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
,
2154 request
->opcode
= CTDB_CONTROL_DB_THAW
;
2157 request
->client_id
= 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
;
2177 request
->client_id
= 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
;
2198 request
->client_id
= 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
,
2216 request
->opcode
= CTDB_CONTROL_DB_TRANSACTION_CANCEL
;
2219 request
->client_id
= 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
;
2240 request
->client_id
= 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
) {
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
;
2268 request
->client_id
= 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
,
2285 request
->opcode
= CTDB_CONTROL_DB_PUSH_CONFIRM
;
2288 request
->client_id
= 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
) {
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
,
2313 request
->opcode
= CTDB_CONTROL_DB_OPEN_FLAGS
;
2316 request
->client_id
= 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
,
2326 if (reply
->rdata
.opcode
!= CTDB_CONTROL_DB_OPEN_FLAGS
) {
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
;
2344 request
->client_id
= 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
,
2354 if (reply
->rdata
.opcode
!= CTDB_CONTROL_DB_ATTACH_REPLICATED
) {
2357 if (reply
->status
== 0) {
2358 *db_id
= reply
->rdata
.data
.db_id
;
2360 return reply
->status
;