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 = 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 = 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,
402 const char *db_name, uint32_t tdb_flags)
404 request->opcode = CTDB_CONTROL_DB_ATTACH;
406 request->srvid = tdb_flags;
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,
1005 request->opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
1007 request->srvid = tdb_flags;
1008 request->client_id = 0;
1011 request->rdata.opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
1012 request->rdata.data.db_name = db_name;
1015 int ctdb_reply_control_db_attach_persistent(struct ctdb_reply_control *reply,
1018 if (reply->rdata.opcode != CTDB_CONTROL_DB_ATTACH_PERSISTENT) {
1022 if (reply->status == 0) {
1023 *db_id = reply->rdata.data.db_id;
1025 return reply->status;
1028 /* CTDB_CONTROL_UPDATE_RECORD */
1030 void ctdb_req_control_update_record(struct ctdb_req_control *request,
1031 struct ctdb_rec_buffer *recbuf)
1033 request->opcode = CTDB_CONTROL_UPDATE_RECORD;
1036 request->client_id = 0;
1039 request->rdata.opcode = CTDB_CONTROL_UPDATE_RECORD;
1040 request->rdata.data.recbuf = recbuf;
1043 int ctdb_reply_control_update_record(struct ctdb_reply_control *reply)
1045 return ctdb_reply_control_generic(reply, CTDB_CONTROL_UPDATE_RECORD);
1048 /* CTDB_CONTROL_SEND_GRATUITOUS_ARP */
1050 void ctdb_req_control_send_gratuitous_arp(struct ctdb_req_control *request,
1051 struct ctdb_addr_info *addr_info)
1053 request->opcode = CTDB_CONTROL_SEND_GRATUITOUS_ARP;
1056 request->client_id = 0;
1059 request->rdata.opcode = CTDB_CONTROL_SEND_GRATUITOUS_ARP;
1060 request->rdata.data.addr_info = addr_info;
1063 int ctdb_reply_control_send_gratuitous_arp(struct ctdb_reply_control *reply)
1065 return ctdb_reply_control_generic(reply,
1066 CTDB_CONTROL_SEND_GRATUITOUS_ARP);
1069 /* CTDB_CONTROL_TRANSACTION_START */
1071 void ctdb_req_control_transaction_start(struct ctdb_req_control *request,
1074 request->opcode = CTDB_CONTROL_TRANSACTION_START;
1077 request->client_id = 0;
1080 request->rdata.opcode = CTDB_CONTROL_TRANSACTION_START;
1081 request->rdata.data.tid = tid;
1084 int ctdb_reply_control_transaction_start(struct ctdb_reply_control *reply)
1086 return ctdb_reply_control_generic(reply,
1087 CTDB_CONTROL_TRANSACTION_START);
1090 /* CTDB_CONTROL_TRANSACTION_COMMIT */
1092 void ctdb_req_control_transaction_commit(struct ctdb_req_control *request,
1095 request->opcode = CTDB_CONTROL_TRANSACTION_COMMIT;
1098 request->client_id = 0;
1101 request->rdata.opcode = CTDB_CONTROL_TRANSACTION_COMMIT;
1102 request->rdata.data.tid = tid;
1105 int ctdb_reply_control_transaction_commit(struct ctdb_reply_control *reply)
1107 return ctdb_reply_control_generic(reply,
1108 CTDB_CONTROL_TRANSACTION_COMMIT);
1111 /* CTDB_CONTROL_WIPE_DATABASE */
1113 void ctdb_req_control_wipe_database(struct ctdb_req_control *request,
1114 struct ctdb_transdb *transdb)
1116 request->opcode = CTDB_CONTROL_WIPE_DATABASE;
1119 request->client_id = 0;
1122 request->rdata.opcode = CTDB_CONTROL_WIPE_DATABASE;
1123 request->rdata.data.transdb = transdb;
1126 int ctdb_reply_control_wipe_database(struct ctdb_reply_control *reply)
1128 return ctdb_reply_control_generic(reply, CTDB_CONTROL_WIPE_DATABASE);
1131 /* CTDB_CONTROL_UPTIME */
1133 void ctdb_req_control_uptime(struct ctdb_req_control *request)
1135 request->opcode = CTDB_CONTROL_UPTIME;
1138 request->client_id = 0;
1141 request->rdata.opcode = CTDB_CONTROL_UPTIME;
1144 int ctdb_reply_control_uptime(struct ctdb_reply_control *reply,
1145 TALLOC_CTX *mem_ctx, struct ctdb_uptime **uptime)
1147 if (reply->rdata.opcode != CTDB_CONTROL_UPTIME) {
1151 if (reply->status == 0) {
1152 *uptime = talloc_steal(mem_ctx, reply->rdata.data.uptime);
1154 return reply->status;
1157 /* CTDB_CONTROL_START_RECOVERY */
1159 void ctdb_req_control_start_recovery(struct ctdb_req_control *request)
1161 request->opcode = CTDB_CONTROL_START_RECOVERY;
1164 request->client_id = 0;
1167 request->rdata.opcode = CTDB_CONTROL_START_RECOVERY;
1170 int ctdb_reply_control_start_recovery(struct ctdb_reply_control *reply)
1172 return ctdb_reply_control_generic(reply, CTDB_CONTROL_START_RECOVERY);
1175 /* CTDB_CONTROL_END_RECOVERY */
1177 void ctdb_req_control_end_recovery(struct ctdb_req_control *request)
1179 request->opcode = CTDB_CONTROL_END_RECOVERY;
1182 request->client_id = 0;
1185 request->rdata.opcode = CTDB_CONTROL_END_RECOVERY;
1188 int ctdb_reply_control_end_recovery(struct ctdb_reply_control *reply)
1190 return ctdb_reply_control_generic(reply, CTDB_CONTROL_END_RECOVERY);
1193 /* CTDB_CONTROL_RELOAD_NODES_FILE */
1195 void ctdb_req_control_reload_nodes_file(struct ctdb_req_control *request)
1197 request->opcode = CTDB_CONTROL_RELOAD_NODES_FILE;
1200 request->client_id = 0;
1203 request->rdata.opcode = CTDB_CONTROL_RELOAD_NODES_FILE;
1206 int ctdb_reply_control_reload_nodes_file(struct ctdb_reply_control *reply)
1208 return ctdb_reply_control_generic(reply,
1209 CTDB_CONTROL_RELOAD_NODES_FILE);
1212 /* CTDB_CONTROL_TRY_DELETE_RECORDS */
1214 void ctdb_req_control_try_delete_records(struct ctdb_req_control *request,
1215 struct ctdb_rec_buffer *recbuf)
1217 request->opcode = CTDB_CONTROL_TRY_DELETE_RECORDS;
1220 request->client_id = 0;
1223 request->rdata.opcode = CTDB_CONTROL_TRY_DELETE_RECORDS;
1224 request->rdata.data.recbuf = recbuf;
1227 int ctdb_reply_control_try_delete_records(struct ctdb_reply_control *reply,
1228 TALLOC_CTX *mem_ctx,
1229 struct ctdb_rec_buffer **recbuf)
1231 if (reply->rdata.opcode != CTDB_CONTROL_TRY_DELETE_RECORDS) {
1235 if (reply->status == 0) {
1236 *recbuf = talloc_steal(mem_ctx, reply->rdata.data.recbuf);
1238 return reply->status;
1241 /* CTDB_CONTROL_ENABLE_MONITOR */
1243 void ctdb_req_control_enable_monitor(struct ctdb_req_control *request)
1245 request->opcode = CTDB_CONTROL_ENABLE_MONITOR;
1248 request->client_id = 0;
1251 request->rdata.opcode = CTDB_CONTROL_ENABLE_MONITOR;
1254 int ctdb_reply_control_enable_monitor(struct ctdb_reply_control *reply)
1256 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ENABLE_MONITOR);
1259 /* CTDB_CONTROL_DISABLE_MONITOR */
1261 void ctdb_req_control_disable_monitor(struct ctdb_req_control *request)
1263 request->opcode = CTDB_CONTROL_DISABLE_MONITOR;
1266 request->client_id = 0;
1269 request->rdata.opcode = CTDB_CONTROL_DISABLE_MONITOR;
1272 int ctdb_reply_control_disable_monitor(struct ctdb_reply_control *reply)
1274 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DISABLE_MONITOR);
1277 /* CTDB_CONTROL_ADD_PUBLIC_IP */
1279 void ctdb_req_control_add_public_ip(struct ctdb_req_control *request,
1280 struct ctdb_addr_info *addr_info)
1282 request->opcode = CTDB_CONTROL_ADD_PUBLIC_IP;
1285 request->client_id = 0;
1288 request->rdata.opcode = CTDB_CONTROL_ADD_PUBLIC_IP;
1289 request->rdata.data.addr_info = addr_info;
1292 int ctdb_reply_control_add_public_ip(struct ctdb_reply_control *reply)
1294 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ADD_PUBLIC_IP);
1297 /* CTDB_CONTROL_DEL_PUBLIC_IP */
1299 void ctdb_req_control_del_public_ip(struct ctdb_req_control *request,
1300 struct ctdb_addr_info *addr_info)
1302 request->opcode = CTDB_CONTROL_DEL_PUBLIC_IP;
1305 request->client_id = 0;
1308 request->rdata.opcode = CTDB_CONTROL_DEL_PUBLIC_IP;
1309 request->rdata.data.addr_info = addr_info;
1312 int ctdb_reply_control_del_public_ip(struct ctdb_reply_control *reply)
1314 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DEL_PUBLIC_IP);
1317 /* CTDB_CONTROL_RUN_EVENTSCRIPTS */
1319 void ctdb_req_control_run_eventscripts(struct ctdb_req_control *request,
1320 const char *event_str)
1322 request->opcode = CTDB_CONTROL_RUN_EVENTSCRIPTS;
1325 request->client_id = 0;
1328 request->rdata.opcode = CTDB_CONTROL_RUN_EVENTSCRIPTS;
1329 request->rdata.data.event_str = event_str;
1332 int ctdb_reply_control_run_eventscripts(struct ctdb_reply_control *reply)
1334 return ctdb_reply_control_generic(reply,
1335 CTDB_CONTROL_RUN_EVENTSCRIPTS);
1338 /* CTDB_CONTROL_GET_CAPABILITIES */
1340 void ctdb_req_control_get_capabilities(struct ctdb_req_control *request)
1342 request->opcode = CTDB_CONTROL_GET_CAPABILITIES;
1345 request->client_id = 0;
1348 request->rdata.opcode = CTDB_CONTROL_GET_CAPABILITIES;
1351 int ctdb_reply_control_get_capabilities(struct ctdb_reply_control *reply,
1354 if (reply->rdata.opcode != CTDB_CONTROL_GET_CAPABILITIES) {
1358 if (reply->status == 0) {
1359 *caps = reply->rdata.data.caps;
1361 return reply->status;
1364 /* CTDB_CONTROL_RECD_PING */
1366 void ctdb_req_control_recd_ping(struct ctdb_req_control *request)
1368 request->opcode = CTDB_CONTROL_RECD_PING;
1371 request->client_id = 0;
1374 request->rdata.opcode = CTDB_CONTROL_RECD_PING;
1377 int ctdb_reply_control_recd_ping(struct ctdb_reply_control *reply)
1379 return ctdb_reply_control_generic(reply, CTDB_CONTROL_RECD_PING);
1382 /* CTDB_CONTROL_RELEASE_IP */
1384 void ctdb_req_control_release_ip(struct ctdb_req_control *request,
1385 struct ctdb_public_ip *pubip)
1387 request->opcode = CTDB_CONTROL_RELEASE_IP;
1390 request->client_id = 0;
1393 request->rdata.opcode = CTDB_CONTROL_RELEASE_IP;
1394 request->rdata.data.pubip = pubip;
1397 int ctdb_reply_control_release_ip(struct ctdb_reply_control *reply)
1399 return ctdb_reply_control_generic(reply, CTDB_CONTROL_RELEASE_IP);
1402 /* CTDB_CONTROL_TAKEOVER_IP */
1404 void ctdb_req_control_takeover_ip(struct ctdb_req_control *request,
1405 struct ctdb_public_ip *pubip)
1407 request->opcode = CTDB_CONTROL_TAKEOVER_IP;
1410 request->client_id = 0;
1413 request->rdata.opcode = CTDB_CONTROL_TAKEOVER_IP;
1414 request->rdata.data.pubip = pubip;
1417 int ctdb_reply_control_takeover_ip(struct ctdb_reply_control *reply)
1419 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TAKEOVER_IP);
1422 /* CTDB_CONTROL_GET_PUBLIC_IPS */
1424 void ctdb_req_control_get_public_ips(struct ctdb_req_control *request)
1426 request->opcode = CTDB_CONTROL_GET_PUBLIC_IPS;
1429 request->client_id = 0;
1432 request->rdata.opcode = CTDB_CONTROL_GET_PUBLIC_IPS;
1435 int ctdb_reply_control_get_public_ips(struct ctdb_reply_control *reply,
1436 TALLOC_CTX *mem_ctx,
1437 struct ctdb_public_ip_list **pubip_list)
1439 if (reply->rdata.opcode != CTDB_CONTROL_GET_PUBLIC_IPS) {
1443 if (reply->status == 0) {
1444 *pubip_list = talloc_steal(mem_ctx,
1445 reply->rdata.data.pubip_list);
1447 return reply->status;
1450 /* CTDB_CONTROL_GET_NODEMAP */
1452 void ctdb_req_control_get_nodemap(struct ctdb_req_control *request)
1454 request->opcode = CTDB_CONTROL_GET_NODEMAP;
1457 request->client_id = 0;
1460 request->rdata.opcode = CTDB_CONTROL_GET_NODEMAP;
1463 int ctdb_reply_control_get_nodemap(struct ctdb_reply_control *reply,
1464 TALLOC_CTX *mem_ctx,
1465 struct ctdb_node_map **nodemap)
1467 if (reply->rdata.opcode != CTDB_CONTROL_GET_NODEMAP) {
1471 if (reply->status == 0) {
1472 *nodemap = talloc_steal(mem_ctx, reply->rdata.data.nodemap);
1474 return reply->status;
1477 /* CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS */
1479 void ctdb_req_control_get_event_script_status(struct ctdb_req_control *request,
1482 request->opcode = CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS;
1485 request->client_id = 0;
1488 request->rdata.opcode = CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS;
1489 request->rdata.data.event = event;
1492 int ctdb_reply_control_get_event_script_status(struct ctdb_reply_control *reply,
1493 TALLOC_CTX *mem_ctx,
1494 struct ctdb_script_list **slist)
1496 if (reply->rdata.opcode != CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS) {
1500 if (reply->status == 0) {
1501 *slist = talloc_steal(mem_ctx, reply->rdata.data.script_list);
1503 return reply->status;
1506 /* CTDB_CONTROL_TRAVERSE_KILL */
1508 void ctdb_req_control_traverse_kill(struct ctdb_req_control *request,
1509 struct ctdb_traverse_start *traverse)
1511 request->opcode = CTDB_CONTROL_TRAVERSE_KILL;
1514 request->client_id = 0;
1517 request->rdata.opcode = CTDB_CONTROL_TRAVERSE_KILL;
1518 request->rdata.data.traverse_start = traverse;
1521 int ctdb_reply_control_traverse_kill(struct ctdb_reply_control *reply)
1523 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TRAVERSE_KILL);
1526 /* CTDB_CONTROL_RECD_RECLOCK_LATENCY */
1528 void ctdb_req_control_recd_reclock_latency(struct ctdb_req_control *request,
1529 double reclock_latency)
1531 request->opcode = CTDB_CONTROL_RECD_RECLOCK_LATENCY;
1534 request->client_id = 0;
1537 request->rdata.opcode = CTDB_CONTROL_RECD_RECLOCK_LATENCY;
1538 request->rdata.data.reclock_latency = reclock_latency;
1541 int ctdb_reply_control_recd_reclock_latency(struct ctdb_reply_control *reply)
1543 return ctdb_reply_control_generic(reply,
1544 CTDB_CONTROL_RECD_RECLOCK_LATENCY);
1547 /* CTDB_CONTROL_GET_RECLOCK_FILE */
1549 void ctdb_req_control_get_reclock_file(struct ctdb_req_control *request)
1551 request->opcode = CTDB_CONTROL_GET_RECLOCK_FILE;
1554 request->client_id = 0;
1557 request->rdata.opcode = CTDB_CONTROL_GET_RECLOCK_FILE;
1560 int ctdb_reply_control_get_reclock_file(struct ctdb_reply_control *reply,
1561 TALLOC_CTX *mem_ctx,
1562 const char **reclock_file)
1564 if (reply->rdata.opcode != CTDB_CONTROL_GET_RECLOCK_FILE) {
1568 if (reply->status == 0) {
1569 *reclock_file = talloc_steal(mem_ctx,
1570 reply->rdata.data.reclock_file);
1572 return reply->status;
1575 /* CTDB_CONTROL_STOP_NODE */
1577 void ctdb_req_control_stop_node(struct ctdb_req_control *request)
1579 request->opcode = CTDB_CONTROL_STOP_NODE;
1582 request->client_id = 0;
1585 request->rdata.opcode = CTDB_CONTROL_STOP_NODE;
1588 int ctdb_reply_control_stop_node(struct ctdb_reply_control *reply)
1590 return ctdb_reply_control_generic(reply, CTDB_CONTROL_STOP_NODE);
1593 /* CTDB_CONTROL_CONTINUE_NODE */
1595 void ctdb_req_control_continue_node(struct ctdb_req_control *request)
1597 request->opcode = CTDB_CONTROL_CONTINUE_NODE;
1600 request->client_id = 0;
1603 request->rdata.opcode = CTDB_CONTROL_CONTINUE_NODE;
1606 int ctdb_reply_control_continue_node(struct ctdb_reply_control *reply)
1608 return ctdb_reply_control_generic(reply, CTDB_CONTROL_CONTINUE_NODE);
1611 /* CTDB_CONTROL_SET_LMASTERROLE */
1613 void ctdb_req_control_set_lmasterrole(struct ctdb_req_control *request,
1614 uint32_t lmaster_role)
1616 request->opcode = CTDB_CONTROL_SET_LMASTERROLE;
1619 request->client_id = 0;
1622 request->rdata.opcode = CTDB_CONTROL_SET_LMASTERROLE;
1623 request->rdata.data.role = lmaster_role;
1626 int ctdb_reply_control_set_lmasterrole(struct ctdb_reply_control *reply)
1628 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_LMASTERROLE);
1631 /* CTDB_CONTROL_SET_RECMASTERROLE */
1633 void ctdb_req_control_set_recmasterrole(struct ctdb_req_control *request,
1634 uint32_t recmaster_role)
1636 request->opcode = CTDB_CONTROL_SET_RECMASTERROLE;
1639 request->client_id = 0;
1642 request->rdata.opcode = CTDB_CONTROL_SET_RECMASTERROLE;
1643 request->rdata.data.role = recmaster_role;
1646 int ctdb_reply_control_set_recmasterrole(struct ctdb_reply_control *reply)
1648 return ctdb_reply_control_generic(reply,
1649 CTDB_CONTROL_SET_RECMASTERROLE);
1652 /* CTDB_CONTROL_ENABLE_SCRIPT */
1654 void ctdb_req_control_enable_script(struct ctdb_req_control *request,
1657 request->opcode = CTDB_CONTROL_ENABLE_SCRIPT;
1660 request->client_id = 0;
1663 request->rdata.opcode = CTDB_CONTROL_ENABLE_SCRIPT;
1664 request->rdata.data.script = script;
1667 int ctdb_reply_control_enable_script(struct ctdb_reply_control *reply)
1669 return ctdb_reply_control_generic(reply, CTDB_CONTROL_ENABLE_SCRIPT);
1672 /* CTDB_CONTROL_DISABLE_SCRIPT */
1674 void ctdb_req_control_disable_script(struct ctdb_req_control *request,
1677 request->opcode = CTDB_CONTROL_DISABLE_SCRIPT;
1680 request->client_id = 0;
1683 request->rdata.opcode = CTDB_CONTROL_DISABLE_SCRIPT;
1684 request->rdata.data.script = script;
1687 int ctdb_reply_control_disable_script(struct ctdb_reply_control *reply)
1689 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DISABLE_SCRIPT);
1692 /* CTDB_CONTROL_SET_BAN_STATE */
1694 void ctdb_req_control_set_ban_state(struct ctdb_req_control *request,
1695 struct ctdb_ban_state *ban_state)
1697 request->opcode = CTDB_CONTROL_SET_BAN_STATE;
1700 request->client_id = 0;
1703 request->rdata.opcode = CTDB_CONTROL_SET_BAN_STATE;
1704 request->rdata.data.ban_state = ban_state;
1707 int ctdb_reply_control_set_ban_state(struct ctdb_reply_control *reply)
1709 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_BAN_STATE);
1712 /* CTDB_CONTROL_GET_BAN_STATE */
1714 void ctdb_req_control_get_ban_state(struct ctdb_req_control *request)
1716 request->opcode = CTDB_CONTROL_GET_BAN_STATE;
1719 request->client_id = 0;
1722 request->rdata.opcode = CTDB_CONTROL_GET_BAN_STATE;
1725 int ctdb_reply_control_get_ban_state(struct ctdb_reply_control *reply,
1726 TALLOC_CTX *mem_ctx,
1727 struct ctdb_ban_state **ban_state)
1729 if (reply->rdata.opcode != CTDB_CONTROL_GET_BAN_STATE) {
1733 if (reply->status == 0) {
1734 *ban_state = talloc_steal(mem_ctx,
1735 reply->rdata.data.ban_state);
1737 return reply->status;
1740 /* CTDB_CONTROL_TRANSACTION_CANCEL */
1742 void ctdb_req_control_transaction_cancel(struct ctdb_req_control *request,
1745 request->opcode = CTDB_CONTROL_TRANSACTION_CANCEL;
1748 request->client_id = 0;
1751 request->rdata.opcode = CTDB_CONTROL_TRANSACTION_CANCEL;
1752 request->rdata.data.tid = tid;
1755 int ctdb_reply_control_transaction_cancel(struct ctdb_reply_control *reply)
1757 return ctdb_reply_control_generic(reply,
1758 CTDB_CONTROL_TRANSACTION_CANCEL);
1761 /* CTDB_CONTROL_REGISTER_NOTIFY */
1763 void ctdb_req_control_register_notify(struct ctdb_req_control *request,
1764 struct ctdb_notify_data *notify)
1766 request->opcode = CTDB_CONTROL_REGISTER_NOTIFY;
1769 request->client_id = 0;
1772 request->rdata.opcode = CTDB_CONTROL_REGISTER_NOTIFY;
1773 request->rdata.data.notify = notify;
1776 int ctdb_reply_control_register_notify(struct ctdb_reply_control *reply)
1778 return ctdb_reply_control_generic(reply, CTDB_CONTROL_REGISTER_NOTIFY);
1781 /* CTDB_CONTROL_DEREGISTER_NOTIFY */
1783 void ctdb_req_control_deregister_notify(struct ctdb_req_control *request,
1786 request->opcode = CTDB_CONTROL_DEREGISTER_NOTIFY;
1789 request->client_id = 0;
1792 request->rdata.opcode = CTDB_CONTROL_DEREGISTER_NOTIFY;
1793 request->rdata.data.srvid = srvid;
1796 int ctdb_reply_control_deregister_notify(struct ctdb_reply_control *reply)
1798 return ctdb_reply_control_generic(reply,
1799 CTDB_CONTROL_DEREGISTER_NOTIFY);
1802 /* CTDB_CONTROL_TRANS3_COMMIT */
1804 void ctdb_req_control_trans3_commit(struct ctdb_req_control *request,
1805 struct ctdb_rec_buffer *recbuf)
1807 request->opcode = CTDB_CONTROL_TRANS3_COMMIT;
1810 request->client_id = 0;
1813 request->rdata.opcode = CTDB_CONTROL_TRANS3_COMMIT;
1814 request->rdata.data.recbuf = recbuf;
1817 int ctdb_reply_control_trans3_commit(struct ctdb_reply_control *reply)
1819 return ctdb_reply_control_generic(reply, CTDB_CONTROL_TRANS3_COMMIT);
1822 /* CTDB_CONTROL_GET_DB_SEQNUM */
1824 void ctdb_req_control_get_db_seqnum(struct ctdb_req_control *request,
1827 request->opcode = CTDB_CONTROL_GET_DB_SEQNUM;
1830 request->client_id = 0;
1833 request->rdata.opcode = CTDB_CONTROL_GET_DB_SEQNUM;
1834 request->rdata.data.db_id = db_id;
1837 int ctdb_reply_control_get_db_seqnum(struct ctdb_reply_control *reply,
1840 if (reply->rdata.opcode != CTDB_CONTROL_GET_DB_SEQNUM) {
1844 if (reply->status == 0) {
1845 *seqnum = reply->rdata.data.seqnum;
1847 return reply->status;
1850 /* CTDB_CONTROL_DB_SET_HEALTHY */
1852 void ctdb_req_control_db_set_healthy(struct ctdb_req_control *request,
1855 request->opcode = CTDB_CONTROL_DB_SET_HEALTHY;
1858 request->client_id = 0;
1861 request->rdata.opcode = CTDB_CONTROL_DB_SET_HEALTHY;
1862 request->rdata.data.db_id = db_id;
1865 int ctdb_reply_control_db_set_healthy(struct ctdb_reply_control *reply)
1867 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_SET_HEALTHY);
1870 /* CTDB_CONTROL_DB_GET_HEALTH */
1872 void ctdb_req_control_db_get_health(struct ctdb_req_control *request,
1875 request->opcode = CTDB_CONTROL_DB_GET_HEALTH;
1878 request->client_id = 0;
1881 request->rdata.opcode = CTDB_CONTROL_DB_GET_HEALTH;
1882 request->rdata.data.db_id = db_id;
1885 int ctdb_reply_control_db_get_health(struct ctdb_reply_control *reply,
1886 TALLOC_CTX *mem_ctx, const char **reason)
1888 if (reply->rdata.opcode != CTDB_CONTROL_DB_GET_HEALTH) {
1892 if (reply->status == 0) {
1893 *reason = talloc_steal(mem_ctx, reply->rdata.data.reason);
1895 return reply->status;
1898 /* CTDB_CONTROL_GET_PUBLIC_IP_INFO */
1900 void ctdb_req_control_get_public_ip_info(struct ctdb_req_control *request,
1901 ctdb_sock_addr *addr)
1903 request->opcode = CTDB_CONTROL_GET_PUBLIC_IP_INFO;
1906 request->client_id = 0;
1909 request->rdata.opcode = CTDB_CONTROL_GET_PUBLIC_IP_INFO;
1910 request->rdata.data.addr = addr;
1913 int ctdb_reply_control_get_public_ip_info(struct ctdb_reply_control *reply,
1914 TALLOC_CTX *mem_ctx,
1915 struct ctdb_public_ip_info **ipinfo)
1917 if (reply->rdata.opcode != CTDB_CONTROL_GET_PUBLIC_IP_INFO) {
1921 if (reply->status == 0) {
1922 *ipinfo = talloc_steal(mem_ctx, reply->rdata.data.ipinfo);
1924 return reply->status;
1927 /* CTDB_CONTROL_GET_IFACES */
1929 void ctdb_req_control_get_ifaces(struct ctdb_req_control *request)
1931 request->opcode = CTDB_CONTROL_GET_IFACES;
1934 request->client_id = 0;
1937 request->rdata.opcode = CTDB_CONTROL_GET_IFACES;
1940 int ctdb_reply_control_get_ifaces(struct ctdb_reply_control *reply,
1941 TALLOC_CTX *mem_ctx,
1942 struct ctdb_iface_list **iface_list)
1944 if (reply->rdata.opcode != CTDB_CONTROL_GET_IFACES) {
1948 if (reply->status == 0) {
1949 *iface_list = talloc_steal(mem_ctx,
1950 reply->rdata.data.iface_list);
1952 return reply->status;
1955 /* CTDB_CONTROL_SET_IFACE_LINK_STATE */
1957 void ctdb_req_control_set_iface_link_state(struct ctdb_req_control *request,
1958 struct ctdb_iface *iface)
1960 request->opcode = CTDB_CONTROL_SET_IFACE_LINK_STATE;
1963 request->client_id = 0;
1966 request->rdata.opcode = CTDB_CONTROL_SET_IFACE_LINK_STATE;
1967 request->rdata.data.iface = iface;
1970 int ctdb_reply_control_set_iface_link_state(struct ctdb_reply_control *reply)
1972 return ctdb_reply_control_generic(reply,
1973 CTDB_CONTROL_SET_IFACE_LINK_STATE);
1976 /* CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE */
1978 void ctdb_req_control_tcp_add_delayed_update(struct ctdb_req_control *request,
1979 struct ctdb_connection *conn)
1981 request->opcode = CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE;
1984 request->client_id = 0;
1987 request->rdata.opcode = CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE;
1988 request->rdata.data.conn = conn;
1991 int ctdb_reply_control_tcp_add_delayed_update(struct ctdb_reply_control *reply)
1993 return ctdb_reply_control_generic(reply,
1994 CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE);
1997 /* CTDB_CONTROL_GET_STAT_HISTORY */
1999 void ctdb_req_control_get_stat_history(struct ctdb_req_control *request)
2001 request->opcode = CTDB_CONTROL_GET_STAT_HISTORY;
2004 request->client_id = 0;
2007 request->rdata.opcode = CTDB_CONTROL_GET_STAT_HISTORY;
2010 int ctdb_reply_control_get_stat_history(struct ctdb_reply_control *reply,
2011 TALLOC_CTX *mem_ctx,
2012 struct ctdb_statistics_list **stats_list)
2014 if (reply->rdata.opcode != CTDB_CONTROL_GET_STAT_HISTORY) {
2018 if (reply->status == 0) {
2019 *stats_list = talloc_steal(mem_ctx,
2020 reply->rdata.data.stats_list);
2022 return reply->status;
2025 /* CTDB_CONTROL_SCHEDULE_FOR_DELETION */
2027 void ctdb_req_control_schedule_for_deletion(struct ctdb_req_control *request,
2028 struct ctdb_key_data *key)
2030 request->opcode = CTDB_CONTROL_SCHEDULE_FOR_DELETION;
2033 request->client_id = 0;
2036 request->rdata.opcode = CTDB_CONTROL_SCHEDULE_FOR_DELETION;
2037 request->rdata.data.key = key;
2040 int ctdb_reply_control_schedule_for_deletion(struct ctdb_reply_control *reply)
2042 return ctdb_reply_control_generic(reply,
2043 CTDB_CONTROL_SCHEDULE_FOR_DELETION);
2046 /* CTDB_CONTROL_SET_DB_READONLY */
2048 void ctdb_req_control_set_db_readonly(struct ctdb_req_control *request,
2051 request->opcode = CTDB_CONTROL_SET_DB_READONLY;
2054 request->client_id = 0;
2057 request->rdata.opcode = CTDB_CONTROL_SET_DB_READONLY;
2058 request->rdata.data.db_id = db_id;
2061 int ctdb_reply_control_set_db_readonly(struct ctdb_reply_control *reply)
2063 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_DB_READONLY);
2066 /* CTDB_CONTROL_CHECK_SRVIDS */
2068 void ctdb_req_control_check_srvids(struct ctdb_req_control *request,
2069 struct ctdb_uint64_array *u64_array)
2071 request->opcode = CTDB_CONTROL_CHECK_SRVIDS;
2074 request->client_id = 0;
2077 request->rdata.opcode = CTDB_CONTROL_CHECK_SRVIDS;
2078 request->rdata.data.u64_array = u64_array;
2081 int ctdb_reply_control_check_srvids(struct ctdb_reply_control *reply,
2082 TALLOC_CTX *mem_ctx,
2083 struct ctdb_uint8_array **u8_array)
2085 if (reply->rdata.opcode != CTDB_CONTROL_CHECK_SRVIDS) {
2089 if (reply->status == 0) {
2090 *u8_array = talloc_steal(mem_ctx, reply->rdata.data.u8_array);
2092 return reply->status;
2095 /* CTDB_CONTROL_TRAVERSE_START_EXT */
2097 void ctdb_req_control_traverse_start_ext(struct ctdb_req_control *request,
2098 struct ctdb_traverse_start_ext *traverse)
2100 request->opcode = CTDB_CONTROL_TRAVERSE_START_EXT;
2103 request->client_id = 0;
2106 request->rdata.opcode = CTDB_CONTROL_TRAVERSE_START_EXT;
2107 request->rdata.data.traverse_start_ext = traverse;
2110 int ctdb_reply_control_traverse_start_ext(struct ctdb_reply_control *reply)
2112 return ctdb_reply_control_generic(reply,
2113 CTDB_CONTROL_TRAVERSE_START_EXT);
2116 /* CTDB_CONTROL_GET_DB_STATISTICS */
2118 void ctdb_req_control_get_db_statistics(struct ctdb_req_control *request,
2121 request->opcode = CTDB_CONTROL_GET_DB_STATISTICS;
2124 request->client_id = 0;
2127 request->rdata.opcode = CTDB_CONTROL_GET_DB_STATISTICS;
2128 request->rdata.data.db_id = db_id;
2131 int ctdb_reply_control_get_db_statistics(struct ctdb_reply_control *reply,
2132 TALLOC_CTX *mem_ctx,
2133 struct ctdb_db_statistics **dbstats)
2135 if (reply->rdata.opcode != CTDB_CONTROL_GET_DB_STATISTICS) {
2139 if (reply->status == 0) {
2140 *dbstats = talloc_steal(mem_ctx, reply->rdata.data.dbstats);
2142 return reply->status;
2145 /* CTDB_CONTROL_SET_DB_STICKY */
2147 void ctdb_req_control_set_db_sticky(struct ctdb_req_control *request,
2150 request->opcode = CTDB_CONTROL_SET_DB_STICKY;
2153 request->client_id = 0;
2156 request->rdata.opcode = CTDB_CONTROL_SET_DB_STICKY;
2157 request->rdata.data.db_id = db_id;
2160 int ctdb_reply_control_set_db_sticky(struct ctdb_reply_control *reply)
2162 return ctdb_reply_control_generic(reply, CTDB_CONTROL_SET_DB_STICKY);
2165 /* CTDB_CONTROL_RELOAD_PUBLIC_IPS */
2167 void ctdb_req_control_reload_public_ips(struct ctdb_req_control *request)
2169 request->opcode = CTDB_CONTROL_RELOAD_PUBLIC_IPS;
2172 request->client_id = 0;
2175 request->rdata.opcode = CTDB_CONTROL_RELOAD_PUBLIC_IPS;
2178 int ctdb_reply_control_reload_public_ips(struct ctdb_reply_control *reply)
2180 return ctdb_reply_control_generic(reply,
2181 CTDB_CONTROL_RELOAD_PUBLIC_IPS);
2184 /* CTDB_CONTROL_TRAVERSE_ALL_EXT */
2186 /* CTDB_CONTROL_RECEIVE_RECORDS */
2188 void ctdb_req_control_receive_records(struct ctdb_req_control *request,
2189 struct ctdb_rec_buffer *recbuf)
2191 request->opcode = CTDB_CONTROL_RECEIVE_RECORDS;
2194 request->client_id = 0;
2197 request->rdata.opcode = CTDB_CONTROL_RECEIVE_RECORDS;
2198 request->rdata.data.recbuf = recbuf;
2201 int ctdb_reply_control_receive_records(struct ctdb_reply_control *reply,
2202 TALLOC_CTX *mem_ctx,
2203 struct ctdb_rec_buffer **recbuf)
2205 if (reply->rdata.opcode != CTDB_CONTROL_RECEIVE_RECORDS) {
2209 if (reply->status == 0) {
2210 *recbuf = talloc_steal(mem_ctx, reply->rdata.data.recbuf);
2212 return reply->status;
2215 /* CTDB_CONTROL_IPREALLOCATED */
2217 void ctdb_req_control_ipreallocated(struct ctdb_req_control *request)
2219 request->opcode = CTDB_CONTROL_IPREALLOCATED;
2222 request->client_id = 0;
2225 request->rdata.opcode = CTDB_CONTROL_IPREALLOCATED;
2228 int ctdb_reply_control_ipreallocated(struct ctdb_reply_control *reply)
2230 return ctdb_reply_control_generic(reply, CTDB_CONTROL_IPREALLOCATED);
2233 /* CTDB_CONTROL_GET_RUNSTATE */
2235 void ctdb_req_control_get_runstate(struct ctdb_req_control *request)
2237 request->opcode = CTDB_CONTROL_GET_RUNSTATE;
2240 request->client_id = 0;
2243 request->rdata.opcode = CTDB_CONTROL_GET_RUNSTATE;
2246 int ctdb_reply_control_get_runstate(struct ctdb_reply_control *reply,
2247 enum ctdb_runstate *runstate)
2249 if (reply->rdata.opcode != CTDB_CONTROL_GET_RUNSTATE) {
2253 if (reply->status == 0) {
2254 *runstate = reply->rdata.data.runstate;
2256 return reply->status;
2259 /* CTDB_CONTROL_DB_DETACH */
2261 void ctdb_req_control_db_detach(struct ctdb_req_control *request,
2264 request->opcode = CTDB_CONTROL_DB_DETACH;
2267 request->client_id = 0;
2270 request->rdata.opcode = CTDB_CONTROL_DB_DETACH;
2271 request->rdata.data.db_id = db_id;
2274 int ctdb_reply_control_db_detach(struct ctdb_reply_control *reply)
2276 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_DETACH);
2279 /* CTDB_CONTROL_GET_NODES_FILE */
2281 void ctdb_req_control_get_nodes_file(struct ctdb_req_control *request)
2283 request->opcode = CTDB_CONTROL_GET_NODES_FILE;
2286 request->client_id = 0;
2289 request->rdata.opcode = CTDB_CONTROL_GET_NODES_FILE;
2292 int ctdb_reply_control_get_nodes_file(struct ctdb_reply_control *reply,
2293 TALLOC_CTX *mem_ctx,
2294 struct ctdb_node_map **nodemap)
2296 if (reply->rdata.opcode != CTDB_CONTROL_GET_NODES_FILE) {
2300 if (reply->status == 0) {
2301 *nodemap = talloc_steal(mem_ctx, reply->rdata.data.nodemap);
2303 return reply->status;
2306 /* CTDB_CONTROL_DB_FREEZE */
2308 void ctdb_req_control_db_freeze(struct ctdb_req_control *request,
2311 request->opcode = CTDB_CONTROL_DB_FREEZE;
2314 request->client_id = 0;
2317 request->rdata.opcode = CTDB_CONTROL_DB_FREEZE;
2318 request->rdata.data.db_id = db_id;
2321 int ctdb_reply_control_db_freeze(struct ctdb_reply_control *reply)
2323 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_FREEZE);
2326 /* CTDB_CONTROL_DB_THAW */
2328 void ctdb_req_control_db_thaw(struct ctdb_req_control *request,
2331 request->opcode = CTDB_CONTROL_DB_THAW;
2334 request->client_id = 0;
2337 request->rdata.opcode = CTDB_CONTROL_DB_THAW;
2338 request->rdata.data.db_id = db_id;
2341 int ctdb_reply_control_db_thaw(struct ctdb_reply_control *reply)
2343 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_THAW);
2346 /* CTDB_CONTROL_DB_TRANSACTION_START */
2348 void ctdb_req_control_db_transaction_start(struct ctdb_req_control *request,
2349 struct ctdb_transdb *transdb)
2351 request->opcode = CTDB_CONTROL_DB_TRANSACTION_START;
2354 request->client_id = 0;
2357 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_START;
2358 request->rdata.data.transdb = transdb;
2361 int ctdb_reply_control_db_transaction_start(struct ctdb_reply_control *reply)
2363 return ctdb_reply_control_generic(reply,
2364 CTDB_CONTROL_DB_TRANSACTION_START);
2367 /* CTDB_CONTROL_DB_TRANSACTION_COMMIT */
2369 void ctdb_req_control_db_transaction_commit(struct ctdb_req_control *request,
2370 struct ctdb_transdb *transdb)
2372 request->opcode = CTDB_CONTROL_DB_TRANSACTION_COMMIT;
2375 request->client_id = 0;
2378 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_COMMIT;
2379 request->rdata.data.transdb = transdb;
2382 int ctdb_reply_control_db_transaction_commit(struct ctdb_reply_control *reply)
2384 return ctdb_reply_control_generic(reply,
2385 CTDB_CONTROL_DB_TRANSACTION_COMMIT);
2388 /* CTDB_CONTROL_DB_TRANSACTION_CANCEL */
2390 void ctdb_req_control_db_transaction_cancel(struct ctdb_req_control *request,
2393 request->opcode = CTDB_CONTROL_DB_TRANSACTION_CANCEL;
2396 request->client_id = 0;
2399 request->rdata.opcode = CTDB_CONTROL_DB_TRANSACTION_CANCEL;
2400 request->rdata.data.db_id = db_id;
2403 int ctdb_reply_control_db_transaction_cancel(struct ctdb_reply_control *reply)
2405 return ctdb_reply_control_generic(reply,
2406 CTDB_CONTROL_DB_TRANSACTION_CANCEL);
2409 /* CTDB_CONTROL_DB_PULL */
2411 void ctdb_req_control_db_pull(struct ctdb_req_control *request,
2412 struct ctdb_pulldb_ext *pulldb_ext)
2414 request->opcode = CTDB_CONTROL_DB_PULL;
2417 request->client_id = 0;
2420 request->rdata.opcode = CTDB_CONTROL_DB_PULL;
2421 request->rdata.data.pulldb_ext = pulldb_ext;
2424 int ctdb_reply_control_db_pull(struct ctdb_reply_control *reply,
2425 uint32_t *num_records)
2427 if (reply->rdata.opcode != CTDB_CONTROL_DB_PULL) {
2431 if (reply->status == 0) {
2432 *num_records = reply->rdata.data.num_records;
2434 return reply->status;
2437 /* CTDB_CONTROL_DB_PUSH_START */
2439 void ctdb_req_control_db_push_start(struct ctdb_req_control *request,
2440 struct ctdb_pulldb_ext *pulldb_ext)
2442 request->opcode = CTDB_CONTROL_DB_PUSH_START;
2445 request->client_id = 0;
2448 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_START;
2449 request->rdata.data.pulldb_ext = pulldb_ext;
2452 int ctdb_reply_control_db_push_start(struct ctdb_reply_control *reply)
2454 return ctdb_reply_control_generic(reply, CTDB_CONTROL_DB_PUSH_START);
2457 /* CTDB_CONTROL_DB_PUSH_CONFIRM */
2459 void ctdb_req_control_db_push_confirm(struct ctdb_req_control *request,
2462 request->opcode = CTDB_CONTROL_DB_PUSH_CONFIRM;
2465 request->client_id = 0;
2468 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_CONFIRM;
2469 request->rdata.data.db_id = db_id;
2472 int ctdb_reply_control_db_push_confirm(struct ctdb_reply_control *reply,
2473 uint32_t *num_records)
2475 if (reply->rdata.opcode != CTDB_CONTROL_DB_PUSH_CONFIRM) {
2479 if (reply->status == 0) {
2480 *num_records = reply->rdata.data.num_records;
2482 return reply->status;