4 Copyright (C) Andrew Tridgell 2006
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #ifndef _CTDB_PROTOCOL_H
21 #define _CTDB_PROTOCOL_H
23 #include <sys/socket.h>
24 #include "protocol/protocol.h"
26 /* define ctdb port number */
27 #define CTDB_PORT 4379
29 /* we must align packets to ensure ctdb works on all architectures (eg. sparc) */
30 #define CTDB_DS_ALIGNMENT 8
33 structure passed to a ctdb call backend function
35 struct ctdb_call_info
{
36 TDB_DATA key
; /* record key */
37 struct ctdb_ltdb_header
*header
;
38 TDB_DATA record_data
; /* current data in the record */
39 TDB_DATA
*new_data
; /* optionally updated record data */
40 TDB_DATA
*call_data
; /* optionally passed from caller */
41 TDB_DATA
*reply_data
; /* optionally returned by function */
42 uint32_t status
; /* optional reply status - defaults to zero */
48 #define CTDB_FLAG_TORTURE (1<<1)
50 struct ctdb_script_list_old
{
52 struct ctdb_script scripts
[1];
55 /* Mapping from enum to names. */
56 extern const char *ctdb_eventscript_call_names
[];
61 struct ctdb_req_call_old
{
62 struct ctdb_req_header hdr
;
69 uint8_t data
[1]; /* key[] followed by calldata[] */
72 struct ctdb_reply_call_old
{
73 struct ctdb_req_header hdr
;
79 struct ctdb_reply_error_old
{
80 struct ctdb_req_header hdr
;
86 struct ctdb_req_dmaster_old
{
87 struct ctdb_req_header hdr
;
96 struct ctdb_reply_dmaster_old
{
97 struct ctdb_req_header hdr
;
105 struct ctdb_req_message_old
{
106 struct ctdb_req_header hdr
;
112 struct ctdb_req_control_old
{
113 struct ctdb_req_header hdr
;
123 struct ctdb_reply_control_old
{
124 struct ctdb_req_header hdr
;
131 struct ctdb_req_keepalive_old
{
132 struct ctdb_req_header hdr
;
136 Structure used for a nodemap.
137 The nodemap is the structure containing a list of all nodes
138 known to the cluster and their associated flags.
140 struct ctdb_node_map_old
{
142 struct ctdb_node_and_flags nodes
[1];
145 struct ctdb_public_ip_list_old
{
147 struct ctdb_public_ip ips
[1];
151 structure used to pass record data between the child and parent
153 struct ctdb_rec_data_old
{
162 * wire format for statistics history
164 struct ctdb_statistics_list_old
{
166 struct ctdb_statistics stats
[1];
172 struct ctdb_db_statistics_old
{
175 uint32_t num_current
;
176 uint32_t num_pending
;
178 struct ctdb_latency_counter latency
;
179 uint32_t buckets
[MAX_COUNT_BUCKETS
];
182 struct ctdb_latency_counter latency
;
184 uint32_t db_ro_delegations
;
185 uint32_t db_ro_revokes
;
186 uint32_t hop_count_bucket
[MAX_COUNT_BUCKETS
];
187 uint32_t num_hot_keys
;
191 } hot_keys
[MAX_HOT_KEYS
];
192 char hot_keys_wire
[1];
196 a wire representation of the vnn map
198 struct ctdb_vnn_map_wire
{
204 struct ctdb_notify_data_old
{
207 uint8_t notify_data
[1];
210 /* table that contains a list of all dbids on a node
212 struct ctdb_dbid_map_old
{
214 struct ctdb_dbid dbs
[1];
217 /* the list of tcp tickles used by get/set tcp tickle list */
218 struct ctdb_tickle_list_old
{
221 struct ctdb_connection connections
[1];
225 struct holding a ctdb_sock_addr and an interface name,
226 used to add/remove public addresses and grat arp
228 struct ctdb_addr_info_old
{
235 /* structure used for sending lists of records */
236 struct ctdb_marshall_buffer
{
243 structure for setting a tunable
245 struct ctdb_tunable_old
{
252 structure for getting a tunable
254 struct ctdb_control_get_tunable
{
260 structure for listing tunables
262 struct ctdb_control_list_tunable
{
264 /* returns a : separated list of tunable names */
269 struct ctdb_public_ip_info_old
{
270 struct ctdb_public_ip ip
;
273 struct ctdb_iface ifaces
[1];
276 struct ctdb_iface_list_old
{
278 struct ctdb_iface ifaces
[1];
282 * structure to pass to a schedule_for_deletion_control
284 struct ctdb_control_schedule_for_deletion
{
286 struct ctdb_ltdb_header hdr
;
288 uint8_t key
[1]; /* key[] */