ctdb-daemon: Rename struct ctdb_dbid_map to ctdb_dbid_map_old
[obnox/samba/samba-obnox.git] / ctdb / include / ctdb_protocol.h
index e195e5787ab7315bb1d410ffa9d1d98c430f0693..6505873d5d8267f07678b30d934229519216fc1f 100644 (file)
 
 #include <sys/socket.h>
 
-/* location of daemon socket, set at configure time */
-#ifdef SOCKPATH
-#define CTDB_SOCKET    SOCKPATH
-#else
-#define CTDB_SOCKET    "/var/run/ctdb/ctdbd.socket"
-#endif
-
 /* default ctdb port number */
 #define CTDB_PORT 4379
 
@@ -225,7 +218,7 @@ struct ctdb_call_info {
 
 #define MAX_SCRIPT_NAME 31
 #define MAX_SCRIPT_OUTPUT 511
-struct ctdb_script_wire {
+struct ctdb_script {
        char name[MAX_SCRIPT_NAME+1];
        struct timeval start;
        struct timeval finished;
@@ -233,13 +226,13 @@ struct ctdb_script_wire {
        char output[MAX_SCRIPT_OUTPUT+1];
 };
 
-struct ctdb_scripts_wire {
+struct ctdb_script_list_old {
        uint32_t num_scripts;
-       struct ctdb_script_wire scripts[1];
+       struct ctdb_script scripts[1];
 };
 
 /* different calls to event scripts. */
-enum ctdb_eventscript_call {
+enum ctdb_event {
        CTDB_EVENT_INIT,                /* CTDB starting up: no args */
        CTDB_EVENT_SETUP,               /* CTDB starting up after transport is readdy: no args. */
        CTDB_EVENT_STARTUP,             /* CTDB starting up after initial recovery: no args. */
@@ -436,7 +429,7 @@ struct ctdb_req_header {
        uint32_t reqid;
 };
 
-struct ctdb_req_call {
+struct ctdb_req_call_old {
        struct ctdb_req_header hdr;
        uint32_t flags;
        uint32_t db_id;
@@ -447,21 +440,21 @@ struct ctdb_req_call {
        uint8_t data[1]; /* key[] followed by calldata[] */
 };
 
-struct ctdb_reply_call {
+struct ctdb_reply_call_old {
        struct ctdb_req_header hdr;
        uint32_t status;
        uint32_t datalen;
        uint8_t  data[1];
 };
 
-struct ctdb_reply_error {
+struct ctdb_reply_error_old {
        struct ctdb_req_header hdr;
        uint32_t status;
        uint32_t msglen;
        uint8_t  msg[1];
 };
 
-struct ctdb_req_dmaster {
+struct ctdb_req_dmaster_old {
        struct ctdb_req_header hdr;
        uint32_t db_id;
        uint64_t rsn;
@@ -471,7 +464,7 @@ struct ctdb_req_dmaster {
        uint8_t  data[1];
 };
 
-struct ctdb_reply_dmaster {
+struct ctdb_reply_dmaster_old {
        struct ctdb_req_header hdr;
        uint32_t db_id;
        uint64_t rsn;
@@ -480,14 +473,14 @@ struct ctdb_reply_dmaster {
        uint8_t  data[1];
 };
 
-struct ctdb_req_message {
+struct ctdb_req_message_old {
        struct ctdb_req_header hdr;
        uint64_t srvid;
        uint32_t datalen;
        uint8_t data[1];
 };
 
-struct ctdb_req_control {
+struct ctdb_req_control_old {
        struct ctdb_req_header hdr;
        uint32_t opcode;
        uint32_t pad;
@@ -500,7 +493,7 @@ struct ctdb_req_control {
        uint8_t data[1];
 };
 
-struct ctdb_reply_control {
+struct ctdb_reply_control_old {
        struct ctdb_req_header hdr;
        int32_t  status;
        uint32_t datalen;
@@ -508,7 +501,7 @@ struct ctdb_reply_control {
        uint8_t data[1];
 };
 
-struct ctdb_req_keepalive {
+struct ctdb_req_keepalive_old {
        struct ctdb_req_header hdr;
 };
 
@@ -539,12 +532,10 @@ struct ctdb_ltdb_header {
 /*
   definitions for different socket structures
  */
-typedef struct sockaddr_in ctdb_addr_in;
-typedef struct sockaddr_in6 ctdb_addr_in6;
 typedef union {
        struct sockaddr sa;
-       ctdb_addr_in    ip;
-       ctdb_addr_in6   ip6;
+       struct sockaddr_in ip;
+       struct sockaddr_in6 ip6;
 } ctdb_sock_addr;
 
 /*
@@ -562,7 +553,7 @@ struct ctdb_node_and_flags {
    The nodemap is the structure containing a list of all nodes
    known to the cluster and their associated flags.
 */
-struct ctdb_node_map {
+struct ctdb_node_map_old {
        uint32_t num;
        struct ctdb_node_and_flags nodes[1];
 };
@@ -589,19 +580,29 @@ struct ctdb_node_map {
 /* This capability is set if NATGW is enabled */
 #define CTDB_CAP_NATGW                 0x00000008
 
+/*
+ * Node features
+ */
+#define CTDB_CAP_PARALLEL_RECOVERY     0x00010000
+
+#define CTDB_CAP_FEATURES              (CTDB_CAP_PARALLEL_RECOVERY)
+
+#define CTDB_CAP_DEFAULT               (CTDB_CAP_RECMASTER | \
+                                        CTDB_CAP_LMASTER   | \
+                                        CTDB_CAP_FEATURES)
 
 struct ctdb_public_ip {
        uint32_t pnn;
        ctdb_sock_addr addr;
 };
 
-struct ctdb_all_public_ips {
+struct ctdb_public_ip_list_old {
        uint32_t num;
        struct ctdb_public_ip ips[1];
 };
 
 
-struct latency_counter {
+struct ctdb_latency_counter {
        int num;
        double min;
        double max;
@@ -611,7 +612,7 @@ struct latency_counter {
 /*
   structure used to pass record data between the child and parent
  */
-struct ctdb_rec_data {
+struct ctdb_rec_data_old {
        uint32_t length;
        uint32_t reqid;
        uint32_t keylen;
@@ -669,15 +670,15 @@ struct ctdb_statistics {
                uint32_t traverse;
        } timeouts;
        struct {
-               struct latency_counter ctdbd;
-               struct latency_counter recd;
+               struct ctdb_latency_counter ctdbd;
+               struct ctdb_latency_counter recd;
        } reclock;
        struct {
                uint32_t num_calls;
                uint32_t num_current;
                uint32_t num_pending;
                uint32_t num_failed;
-               struct latency_counter latency;
+               struct ctdb_latency_counter latency;
                uint32_t buckets[MAX_COUNT_BUCKETS];
        } locks;
        uint32_t total_calls;
@@ -688,8 +689,8 @@ struct ctdb_statistics {
        uint32_t __last_counter; /* hack for control_statistics_all */
        uint32_t max_hop_count;
        uint32_t hop_count_bucket[MAX_COUNT_BUCKETS];
-       struct latency_counter call_latency;
-       struct latency_counter childwrite_latency;
+       struct ctdb_latency_counter call_latency;
+       struct ctdb_latency_counter childwrite_latency;
        uint32_t num_recoveries;
        struct timeval statistics_start_time;
        struct timeval statistics_current_time;
@@ -700,7 +701,7 @@ struct ctdb_statistics {
 /*
  * wire format for statistics history
  */
-struct ctdb_statistics_wire {
+struct ctdb_statistics_list_old {
        uint32_t num;
        struct ctdb_statistics stats[1];
 };
@@ -708,17 +709,17 @@ struct ctdb_statistics_wire {
 /*
  * db statistics
  */
-struct ctdb_db_statistics {
+struct ctdb_db_statistics_old {
        struct {
                uint32_t num_calls;
                uint32_t num_current;
                uint32_t num_pending;
                uint32_t num_failed;
-               struct latency_counter latency;
+               struct ctdb_latency_counter latency;
                uint32_t buckets[MAX_COUNT_BUCKETS];
        } locks;
        struct {
-               struct latency_counter latency;
+               struct ctdb_latency_counter latency;
        } vacuum;
        uint32_t db_ro_delegations;
        uint32_t db_ro_revokes;
@@ -740,17 +741,6 @@ struct ctdb_db_statistics {
 #define CTDB_IFACE_SIZE 16
 #endif
 
-struct ctdb_iface_info {
-       char name[CTDB_IFACE_SIZE+2];
-       uint16_t link_state;
-       uint32_t references;
-};
-
-struct ctdb_ifaces_list {
-       uint32_t num;
-       struct ctdb_iface_info ifaces[1];
-};
-
 #define INVALID_GENERATION 1
 /* table that contains the mapping between a hash value and lmaster
  */
@@ -769,4 +759,286 @@ struct ctdb_vnn_map_wire {
        uint32_t map[1];
 };
 
+struct ctdb_notify_data_old {
+       uint64_t srvid;
+       uint32_t len;
+       uint8_t notify_data[1];
+};
+
+/* table that contains a list of all dbids on a node
+ */
+
+struct ctdb_dbid {
+       uint32_t db_id;
+#define CTDB_DB_FLAGS_PERSISTENT       0x01
+#define CTDB_DB_FLAGS_READONLY         0x02
+#define CTDB_DB_FLAGS_STICKY           0x04
+       uint8_t flags;
+};
+
+struct ctdb_dbid_map_old {
+       uint32_t num;
+       struct ctdb_dbid dbs[1];
+};
+
+#define CTDB_RECOVERY_NORMAL           0
+#define CTDB_RECOVERY_ACTIVE           1
+
+enum ctdb_server_id_type {
+       SERVER_TYPE_SAMBA=1,
+       SERVER_TYPE_NFSD=2,
+       SERVER_TYPE_ISCSID=3
+};
+
+struct ctdb_server_id {
+       enum ctdb_server_id_type type;
+       uint32_t pnn;
+       uint32_t server_id;
+};
+
+struct ctdb_server_id_list {
+       uint32_t num;
+       struct ctdb_server_id server_ids[1];
+};
+
+struct ctdb_uptime {
+       struct timeval current_time;
+       struct timeval ctdbd_start_time;
+       struct timeval last_recovery_started;
+       struct timeval last_recovery_finished;
+};
+
+struct ctdb_control_tcp_addr {
+       ctdb_sock_addr src;
+       ctdb_sock_addr dest;
+};
+
+struct ctdb_ban_time {
+       uint32_t pnn;
+       uint32_t time;
+};
+
+struct ctdb_db_priority {
+       uint32_t db_id;
+       uint32_t priority;
+};
+
+/*
+ * Structures to support SRVID requests and replies
+ */
+struct srvid_request {
+       uint32_t pnn;
+       uint64_t srvid;
+};
+
+struct srvid_request_data {
+       uint32_t pnn;
+       uint64_t srvid;
+       uint32_t data;
+};
+
+/*
+  a tcp connection description
+  also used by tcp_add and tcp_remove controls
+ */
+struct ctdb_tcp_connection {
+       ctdb_sock_addr src_addr;
+       ctdb_sock_addr dst_addr;
+};
+
+/* the wire representation for a tcp tickle array */
+struct ctdb_tcp_wire_array {
+       uint32_t num;
+       struct ctdb_tcp_connection connections[1];
+};
+
+/* the list of tcp tickles used by get/set tcp tickle list */
+struct ctdb_control_tcp_tickle_list {
+       ctdb_sock_addr addr;
+       struct ctdb_tcp_wire_array tickles;
+};
+
+/* all tunable variables go in here */
+struct ctdb_tunable {
+       uint32_t max_redirect_count;
+       uint32_t seqnum_interval; /* unit is ms */
+       uint32_t control_timeout;
+       uint32_t traverse_timeout;
+       uint32_t keepalive_interval;
+       uint32_t keepalive_limit;
+       uint32_t recover_timeout;
+       uint32_t recover_interval;
+       uint32_t election_timeout;
+       uint32_t takeover_timeout;
+       uint32_t monitor_interval;
+       uint32_t tickle_update_interval;
+       uint32_t script_timeout;
+       uint32_t script_timeout_count; /* allow dodgy scripts to hang this many times in a row before we mark the node unhealthy */
+       uint32_t script_unhealthy_on_timeout; /* obsolete */
+       uint32_t recovery_grace_period;
+       uint32_t recovery_ban_period;
+       uint32_t database_hash_size;
+       uint32_t database_max_dead;
+       uint32_t rerecovery_timeout;
+       uint32_t enable_bans;
+       uint32_t deterministic_public_ips;
+       uint32_t reclock_ping_period;
+       uint32_t no_ip_failback;
+       uint32_t disable_ip_failover;
+       uint32_t verbose_memory_names;
+       uint32_t recd_ping_timeout;
+       uint32_t recd_ping_failcount;
+       uint32_t log_latency_ms;
+       uint32_t reclock_latency_ms;
+       uint32_t recovery_drop_all_ips;
+       uint32_t verify_recovery_lock;
+       uint32_t vacuum_interval;
+       uint32_t vacuum_max_run_time;
+       uint32_t repack_limit;
+       uint32_t vacuum_limit;
+       uint32_t max_queue_depth_drop_msg;
+       uint32_t allow_unhealthy_db_read;
+       uint32_t stat_history_interval;
+       uint32_t deferred_attach_timeout;
+       uint32_t vacuum_fast_path_count;
+       uint32_t lcp2_public_ip_assignment;
+       uint32_t allow_client_db_attach;
+       uint32_t recover_pdb_by_seqnum;
+       uint32_t deferred_rebalance_on_node_add;
+       uint32_t fetch_collapse;
+       uint32_t hopcount_make_sticky;
+       uint32_t sticky_duration;
+       uint32_t sticky_pindown;
+       uint32_t no_ip_takeover;
+       uint32_t db_record_count_warn;
+       uint32_t db_record_size_warn;
+       uint32_t db_size_warn;
+       uint32_t pulldb_preallocation_size;
+       uint32_t no_ip_host_on_all_disabled;
+       uint32_t samba3_hack;
+       uint32_t mutex_enabled;
+       uint32_t lock_processes_per_db;
+};
+
+enum ctdb_runstate {
+       CTDB_RUNSTATE_UNKNOWN,
+       CTDB_RUNSTATE_INIT,
+       CTDB_RUNSTATE_SETUP,
+       CTDB_RUNSTATE_FIRST_RECOVERY,
+       CTDB_RUNSTATE_STARTUP,
+       CTDB_RUNSTATE_RUNNING,
+       CTDB_RUNSTATE_SHUTDOWN,
+};
+
+#define CTDB_MONITORING_ACTIVE         0
+#define CTDB_MONITORING_DISABLED       1
+
+/*
+  struct holding a ctdb_sock_addr and an interface name,
+  used to add/remove public addresses
+ */
+struct ctdb_control_ip_iface {
+       ctdb_sock_addr addr;
+       uint32_t mask;
+       uint32_t len;
+       char iface[1];
+};
+
+/*
+  struct holding a ctdb_sock_addr and an interface name,
+  used for send_gratious_arp
+ */
+struct ctdb_control_gratious_arp {
+       ctdb_sock_addr addr;
+       uint32_t mask;
+       uint32_t len;
+       char iface[1];
+};
+
+/*
+  structure used for CTDB_SRVID_NODE_FLAGS_CHANGED
+ */
+struct ctdb_node_flag_change {
+       uint32_t pnn;
+       uint32_t new_flags;
+       uint32_t old_flags;
+};
+
+#define CTDB_LMASTER_ANY       0xffffffff
+
+/* structure used for pulldb control */
+struct ctdb_control_pulldb {
+       uint32_t db_id;
+       uint32_t lmaster;
+};
+
+/* structure used for sending lists of records */
+struct ctdb_marshall_buffer {
+       uint32_t db_id;
+       uint32_t count;
+       uint8_t data[1];
+};
+
+/*
+  structure for setting a tunable
+ */
+struct ctdb_control_set_tunable {
+       uint32_t value;
+       uint32_t length;
+       uint8_t  name[1];
+};
+
+/*
+  structure for getting a tunable
+ */
+struct ctdb_control_get_tunable {
+       uint32_t length;
+       uint8_t  name[1];
+};
+
+/*
+  structure for listing tunables
+ */
+struct ctdb_control_list_tunable {
+       uint32_t length;
+       /* returns a : separated list of tunable names */
+       uint8_t  data[1];
+};
+
+
+struct ctdb_control_transdb {
+       uint32_t db_id;
+       uint32_t transaction_id;
+};
+
+#define CTDB_PUBLIC_IP_FLAGS_ONLY_AVAILABLE 0x00010000
+
+struct ctdb_control_iface_info {
+       char name[CTDB_IFACE_SIZE+2];
+       uint16_t link_state;
+       uint32_t references;
+};
+
+struct ctdb_control_public_ip_info {
+       struct ctdb_public_ip ip;
+       uint32_t active_idx;
+       uint32_t num;
+       struct ctdb_control_iface_info ifaces[1];
+};
+
+struct ctdb_control_get_ifaces {
+       uint32_t num;
+       struct ctdb_control_iface_info ifaces[1];
+};
+
+/**
+ * structure to pass to a schedule_for_deletion_control
+ */
+struct ctdb_control_schedule_for_deletion {
+       uint32_t db_id;
+       struct ctdb_ltdb_header hdr;
+       uint32_t keylen;
+       uint8_t key[1]; /* key[] */
+};
+
 #endif