ctdb-protocol: Optionally print port for address printing functions
[vlendec/samba-autobuild/.git] / ctdb / protocol / protocol.h
index 1b48c3920fa74c38f3affd9e8849648b5a0a13dd..28a28f41b2f6dd9b13992cbc709faf14159a3853 100644 (file)
@@ -118,8 +118,11 @@ struct ctdb_call {
 /* SRVID to catch all messages */
 #define CTDB_SRVID_ALL (~(uint64_t)0)
 
-/* SRVID prefix used by CTDB */
-#define CTDB_SRVID_PREFIX      0xF000000000000000LL
+/* SRVID prefix used during recovery for pulling and pushing databases */
+#define CTDB_SRVID_RECOVERY    0xF001000000000000LL
+
+/* SRVID to assign of banning credits */
+#define CTDB_SRVID_BANNING     0xF002000000000000LL
 
 /* SRVID to inform of election data */
 #define CTDB_SRVID_ELECTION    0xF100000000000000LL
@@ -175,9 +178,6 @@ struct ctdb_call {
 /* SRVID to inform recovery daemon to disable the public ip checks */
 #define CTDB_SRVID_DISABLE_IP_CHECK  0xFC00000000000000LL
 
-/* SRVID to inform recovery daemon of ipreallocate resposnes from ctdbd */
-#define CTDB_SRVID_TAKEOVER_RUN_RESPONSE  0xFD00000000000000LL
-
 /* A range of ports reserved for registering a PID (top 8 bits)
  * All ports matching the 8 top bits are reserved for exclusive use by
  * registering a SRVID that matches the process-id of the requesting process
@@ -203,14 +203,23 @@ struct ctdb_call {
  */
 #define CTDB_SRVID_ISCSID_RANGE  0xDE00000000000000LL
 
-/* A range of ports reserved for testing (top 8 bits)
+/* A range of ports reserved for CTDB tool (top 8 bits)
  * All ports matching the 8 top bits are reserved for exclusive use by
- * test applications
+ * CTDB tool
+ */
+#define CTDB_SRVID_TOOL_RANGE  0xCE00000000000000LL
+
+/* A range of ports reserved by client (top 8 bits)
+ * All ports matching the 8 top bits are reserved for exclusive use by
+ * CTDB client code
  */
-#define CTDB_SRVID_TEST_RANGE  0xCE00000000000000LL
+#define CTDB_SRVID_CLIENT_RANGE  0xBE00000000000000LL
 
-/* Range of ports reserved for traversals */
-#define CTDB_SRVID_TRAVERSE_RANGE  0xBE00000000000000LL
+/* Range of ports reserved for test applications (top 8 bits)
+ * All ports matching the 8 top bits are reserved for exclusive use by
+ * test applications
+ */
+#define CTDB_SRVID_TEST_RANGE  0xAE00000000000000LL
 
 
 enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
@@ -247,10 +256,10 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_GET_RECMASTER           = 31,
                    CTDB_CONTROL_SET_RECMASTER           = 32,
                    CTDB_CONTROL_FREEZE                  = 33,
-                   CTDB_CONTROL_THAW                    = 34,
+                   CTDB_CONTROL_THAW                    = 34, /* obsolete */
                    CTDB_CONTROL_GET_PNN                 = 35,
                    CTDB_CONTROL_SHUTDOWN                = 36,
-                   CTDB_CONTROL_GET_MONMODE             = 37,
+                   CTDB_CONTROL_GET_MONMODE             = 37, /* obsolete */
                    /* #38 removed */
                    /* #39 removed */
                    /* #40 removed */
@@ -267,19 +276,19 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_GET_PUBLIC_IPSv4        = 51, /* obsolete */
                    CTDB_CONTROL_MODIFY_FLAGS            = 52,
                    CTDB_CONTROL_GET_ALL_TUNABLES        = 53,
-                   CTDB_CONTROL_KILL_TCP                = 54,
+                   CTDB_CONTROL_KILL_TCP                = 54, /* obsolete */
                    CTDB_CONTROL_GET_TCP_TICKLE_LIST     = 55,
                    CTDB_CONTROL_SET_TCP_TICKLE_LIST     = 56,
-                   CTDB_CONTROL_REGISTER_SERVER_ID      = 57,
-                   CTDB_CONTROL_UNREGISTER_SERVER_ID    = 58,
-                   CTDB_CONTROL_CHECK_SERVER_ID         = 59,
-                   CTDB_CONTROL_GET_SERVER_ID_LIST      = 60,
+                   CTDB_CONTROL_REGISTER_SERVER_ID      = 57, /* obsolete */
+                   CTDB_CONTROL_UNREGISTER_SERVER_ID    = 58, /* obsolete */
+                   CTDB_CONTROL_CHECK_SERVER_ID         = 59, /* obsolete */
+                   CTDB_CONTROL_GET_SERVER_ID_LIST      = 60, /* obsolete */
                    CTDB_CONTROL_DB_ATTACH_PERSISTENT    = 61,
                    CTDB_CONTROL_PERSISTENT_STORE        = 62, /* obsolete */
                    CTDB_CONTROL_UPDATE_RECORD           = 63,
                    CTDB_CONTROL_SEND_GRATUITOUS_ARP     = 64,
-                   CTDB_CONTROL_TRANSACTION_START       = 65,
-                   CTDB_CONTROL_TRANSACTION_COMMIT      = 66,
+                   CTDB_CONTROL_TRANSACTION_START       = 65, /* obsolete */
+                   CTDB_CONTROL_TRANSACTION_COMMIT      = 66, /* obsolete */
                    CTDB_CONTROL_WIPE_DATABASE           = 67,
                    /* #68 removed */
                    CTDB_CONTROL_UPTIME                  = 69,
@@ -288,11 +297,11 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_RELOAD_NODES_FILE       = 72,
                    /* #73 removed */
                    CTDB_CONTROL_TRY_DELETE_RECORDS      = 74,
-                   CTDB_CONTROL_ENABLE_MONITOR          = 75,
-                   CTDB_CONTROL_DISABLE_MONITOR         = 76,
+                   CTDB_CONTROL_ENABLE_MONITOR          = 75, /* obsolete */
+                   CTDB_CONTROL_DISABLE_MONITOR         = 76, /* obsolete */
                    CTDB_CONTROL_ADD_PUBLIC_IP           = 77,
                    CTDB_CONTROL_DEL_PUBLIC_IP           = 78,
-                   CTDB_CONTROL_RUN_EVENTSCRIPTS        = 79,
+                   CTDB_CONTROL_RUN_EVENTSCRIPTS        = 79, /* obsolete */
                    CTDB_CONTROL_GET_CAPABILITIES        = 80,
                    CTDB_CONTROL_START_PERSISTENT_UPDATE = 81, /* obsolete */
                    CTDB_CONTROL_CANCEL_PERSISTENT_UPDATE= 82, /* obsolete */
@@ -306,23 +315,23 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_GET_PUBLIC_IPS          = 90,
                    CTDB_CONTROL_GET_NODEMAP             = 91,
                    /* missing */
-                   CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96,
+                   CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96, /* obsolete */
                    CTDB_CONTROL_TRAVERSE_KILL           = 97,
                    CTDB_CONTROL_RECD_RECLOCK_LATENCY    = 98,
                    CTDB_CONTROL_GET_RECLOCK_FILE        = 99,
-                   CTDB_CONTROL_SET_RECLOCK_FILE        = 100,
+                   CTDB_CONTROL_SET_RECLOCK_FILE        = 100, /* obsolete */
                    CTDB_CONTROL_STOP_NODE               = 101,
                    CTDB_CONTROL_CONTINUE_NODE           = 102,
                    CTDB_CONTROL_SET_NATGWSTATE          = 103, /* obsolete */
                    CTDB_CONTROL_SET_LMASTERROLE         = 104,
                    CTDB_CONTROL_SET_RECMASTERROLE       = 105,
-                   CTDB_CONTROL_ENABLE_SCRIPT           = 107,
-                   CTDB_CONTROL_DISABLE_SCRIPT          = 108,
+                   CTDB_CONTROL_ENABLE_SCRIPT           = 107, /* obsolete */
+                   CTDB_CONTROL_DISABLE_SCRIPT          = 108, /* obsolete */
                    CTDB_CONTROL_SET_BAN_STATE           = 109,
                    CTDB_CONTROL_GET_BAN_STATE           = 110,
-                   CTDB_CONTROL_SET_DB_PRIORITY         = 111,
-                   CTDB_CONTROL_GET_DB_PRIORITY         = 112,
-                   CTDB_CONTROL_TRANSACTION_CANCEL      = 113,
+                   CTDB_CONTROL_SET_DB_PRIORITY         = 111, /* obsolete */
+                   CTDB_CONTROL_GET_DB_PRIORITY         = 112, /* obsolete */
+                   CTDB_CONTROL_TRANSACTION_CANCEL      = 113, /* obsolete */
                    CTDB_CONTROL_REGISTER_NOTIFY         = 114,
                    CTDB_CONTROL_DEREGISTER_NOTIFY       = 115,
                    CTDB_CONTROL_TRANS2_ACTIVE           = 116, /* obsolete */
@@ -339,7 +348,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_GET_STAT_HISTORY        = 127,
                    CTDB_CONTROL_SCHEDULE_FOR_DELETION   = 128,
                    CTDB_CONTROL_SET_DB_READONLY         = 129,
-                   CTDB_CONTROL_CHECK_SRVIDS            = 130,
+                   CTDB_CONTROL_CHECK_SRVIDS            = 130, /* obsolete */
                    CTDB_CONTROL_TRAVERSE_START_EXT      = 131,
                    CTDB_CONTROL_GET_DB_STATISTICS       = 132,
                    CTDB_CONTROL_SET_DB_STICKY           = 133,
@@ -355,11 +364,13 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_DB_TRANSACTION_START    = 143,
                    CTDB_CONTROL_DB_TRANSACTION_COMMIT   = 144,
                    CTDB_CONTROL_DB_TRANSACTION_CANCEL   = 145,
+                   CTDB_CONTROL_DB_PULL                 = 146,
+                   CTDB_CONTROL_DB_PUSH_START           = 147,
+                   CTDB_CONTROL_DB_PUSH_CONFIRM         = 148,
+                   CTDB_CONTROL_DB_OPEN_FLAGS           = 149,
+                   CTDB_CONTROL_DB_ATTACH_REPLICATED    = 150,
 };
 
-#define CTDB_MONITORING_ACTIVE         0
-#define CTDB_MONITORING_DISABLED       1
-
 #define MAX_COUNT_BUCKETS 16
 #define MAX_HOT_KEYS      10
 
@@ -443,6 +454,7 @@ struct ctdb_dbid {
 #define CTDB_DB_FLAGS_PERSISTENT       0x01
 #define CTDB_DB_FLAGS_READONLY         0x02
 #define CTDB_DB_FLAGS_STICKY           0x04
+#define CTDB_DB_FLAGS_REPLICATED       0x08
        uint8_t flags;
 };
 
@@ -466,8 +478,6 @@ struct ctdb_pulldb_ext {
 #define CTDB_RECOVERY_NORMAL           0
 #define CTDB_RECOVERY_ACTIVE           1
 
-#define CTDB_NUM_DB_PRIORITIES         3
-
 /*
   the extended header for records in the ltdb
 */
@@ -545,8 +555,14 @@ typedef union {
 } ctdb_sock_addr;
 
 struct ctdb_connection {
-       ctdb_sock_addr src;
-       ctdb_sock_addr dst;
+       union {
+               ctdb_sock_addr src;
+               ctdb_sock_addr server;
+       };
+       union {
+               ctdb_sock_addr dst;
+               ctdb_sock_addr client;
+       };
 };
 
 struct ctdb_tunable {
@@ -626,6 +642,9 @@ struct ctdb_tunable_list {
        uint32_t mutex_enabled;
        uint32_t lock_processes_per_db;
        uint32_t rec_buffer_size_limit;
+       uint32_t queue_buffer_size;
+       uint32_t ip_alloc_algorithm;
+       uint32_t allow_mixed_versions;
 };
 
 struct ctdb_tickle_list {
@@ -634,29 +653,6 @@ struct ctdb_tickle_list {
        struct ctdb_connection *conn;
 };
 
-enum ctdb_client_type {
-       SERVER_TYPE_CTDB = 0,
-       SERVER_TYPE_SAMBA = 1,
-       SERVER_TYPE_NFSD = 2,
-       SERVER_TYPE_ISCSID = 3
-};
-
-struct ctdb_client_id {
-       enum ctdb_client_type type;
-       uint32_t pnn;
-       uint32_t server_id;
-};
-
-struct ctdb_client_id_list {
-       uint32_t num;
-       struct ctdb_client_id *cid;
-};
-
-struct ctdb_client_id_map {
-       int count;
-       struct ctdb_client_id_list *list;
-};
-
 struct ctdb_addr_info {
        ctdb_sock_addr addr;
        uint32_t mask;
@@ -702,16 +698,17 @@ struct ctdb_public_ip_list {
  */
 #define CTDB_CAP_RECMASTER             0x00000001
 #define CTDB_CAP_LMASTER               0x00000002
-/* This capability is set if CTDB_LVS_PUBLIC_IP is set */
-#define CTDB_CAP_LVS                   0x00000004
+#define CTDB_CAP_LVS                   0x00000004 /* obsolete */
 #define CTDB_CAP_NATGW                 0x00000008 /* obsolete */
 
 /*
  * Node features
  */
 #define CTDB_CAP_PARALLEL_RECOVERY     0x00010000
+#define CTDB_CAP_FRAGMENTED_CONTROLS   0x00020000
 
-#define CTDB_CAP_FEATURES              (CTDB_CAP_PARALLEL_RECOVERY)
+#define CTDB_CAP_FEATURES              (CTDB_CAP_PARALLEL_RECOVERY | \
+                                        CTDB_CAP_FRAGMENTED_CONTROLS)
 
 #define CTDB_CAP_DEFAULT               (CTDB_CAP_RECMASTER | \
                                         CTDB_CAP_LMASTER   | \
@@ -767,11 +764,6 @@ struct ctdb_ban_state {
        uint32_t time;
 };
 
-struct ctdb_db_priority {
-       uint32_t db_id;
-       uint32_t priority;
-};
-
 struct ctdb_notify_data {
        uint64_t srvid;
        TDB_DATA data;
@@ -811,16 +803,6 @@ struct ctdb_key_data {
        TDB_DATA key;
 };
 
-struct ctdb_uint8_array {
-       int num;
-       uint8_t *val;
-};
-
-struct ctdb_uint64_array {
-       int num;
-       uint64_t *val;
-};
-
 struct ctdb_db_statistics {
        struct {
                uint32_t num_calls;
@@ -861,6 +843,7 @@ struct ctdb_req_control_data {
                struct ctdb_vnn_map *vnnmap;
                uint32_t loglevel;
                struct ctdb_pulldb *pulldb;
+               struct ctdb_pulldb_ext *pulldb_ext;
                struct ctdb_rec_buffer *recbuf;
                uint32_t recmode;
                const char *db_name;
@@ -876,22 +859,16 @@ struct ctdb_req_control_data {
                struct ctdb_tickle_list *tickles;
                struct ctdb_client_id *cid;
                struct ctdb_addr_info *addr_info;
-               uint32_t tid;
                struct ctdb_transdb *transdb;
-               const char *event_str;
                struct ctdb_public_ip *pubip;
                enum ctdb_event event;
                double reclock_latency;
-               const char *reclock_file;
                uint32_t role;
-               const char *script;
                struct ctdb_ban_state *ban_state;
-               struct ctdb_db_priority *db_prio;
                struct ctdb_notify_data *notify;
                uint64_t srvid;
                struct ctdb_iface *iface;
                struct ctdb_key_data *key;
-               struct ctdb_uint64_array *u64_array;
                struct ctdb_traverse_start_ext *traverse_start_ext;
                struct ctdb_traverse_all_ext *traverse_all_ext;
        } data;
@@ -918,7 +895,6 @@ struct ctdb_reply_control_data {
                uint32_t caps;
                struct ctdb_public_ip_list *pubip_list;
                struct ctdb_node_map *nodemap;
-               struct ctdb_script_list *script_list;
                const char *reclock_file;
                struct ctdb_ban_state *ban_state;
                uint64_t seqnum;
@@ -926,9 +902,10 @@ struct ctdb_reply_control_data {
                struct ctdb_public_ip_info *ipinfo;
                struct ctdb_iface_list *iface_list;
                struct ctdb_statistics_list *stats_list;
-               struct ctdb_uint8_array *u8_array;
                struct ctdb_db_statistics *dbstats;
                enum ctdb_runstate runstate;
+               uint32_t num_records;
+               int tdb_flags;
        } data;
 };
 
@@ -939,6 +916,8 @@ struct ctdb_req_control {
        uint32_t client_id;
 #define CTDB_CTRL_FLAG_NOREPLY   1
 #define CTDB_CTRL_FLAG_OPCODE_SPECIFIC   0xFFFF0000
+/* Ugly overloading of this field... */
+#define CTDB_PUBLIC_IP_FLAGS_ONLY_AVAILABLE 0x00010000
        uint32_t flags;
        struct ctdb_req_control_data rdata;
 };
@@ -982,7 +961,7 @@ union ctdb_message_data {
        uint32_t db_id;
        /* SRVID_MEM_DUMP, SRVID_TAKEOVER_RUN */
        struct ctdb_srvid_message *msg;
-       /* SRVID_REBALANCE_NODE */
+       /* SRVID_BANNING, SRVID_REBALANCE_NODE */
        uint32_t pnn;
        /* SRVID_DISABLE_TAKEOVER_RUNS, SRVID_DISABLE_RECOVERIES */
        struct ctdb_disable_message *disable;
@@ -1002,6 +981,12 @@ struct ctdb_req_message_data {
        TDB_DATA data;
 };
 
+struct ctdb_req_keepalive {
+       uint32_t version;
+       uint32_t uptime;
+};
+
+
 /* This is equivalent to server_id */
 struct ctdb_server_id {
        uint64_t pid;
@@ -1025,4 +1010,88 @@ struct ctdb_g_lock_list {
        struct ctdb_g_lock *lock;
 };
 
+/*
+ * Generic packet header
+ */
+
+struct sock_packet_header {
+       uint32_t length;
+       uint32_t reqid;
+};
+
+/*
+ * Eventd protocol
+ */
+
+enum ctdb_event_command {
+       CTDB_EVENT_COMMAND_RUN            = 1,
+       CTDB_EVENT_COMMAND_STATUS         = 2,
+       CTDB_EVENT_COMMAND_SCRIPT_LIST    = 3,
+       CTDB_EVENT_COMMAND_SCRIPT_ENABLE  = 4,
+       CTDB_EVENT_COMMAND_SCRIPT_DISABLE = 5,
+};
+
+enum ctdb_event_status_state {
+       CTDB_EVENT_LAST_RUN     = 1,
+       CTDB_EVENT_LAST_PASS    = 2,
+       CTDB_EVENT_LAST_FAIL    = 3,
+};
+
+struct ctdb_event_request_run {
+       enum ctdb_event event;
+       uint32_t timeout;
+       const char *arg_str;
+};
+
+struct ctdb_event_request_status {
+       enum ctdb_event event;
+       enum ctdb_event_status_state state;
+};
+
+struct ctdb_event_request_script_enable {
+       const char *script_name;
+};
+
+struct ctdb_event_request_script_disable {
+       const char *script_name;
+};
+
+struct ctdb_event_request_data {
+       enum ctdb_event_command command;
+       union {
+               struct ctdb_event_request_run *run;
+               struct ctdb_event_request_status *status;
+               struct ctdb_event_request_script_enable *script_enable;
+               struct ctdb_event_request_script_disable *script_disable;
+       } data;
+};
+
+struct ctdb_event_reply_status {
+       int status;
+       struct ctdb_script_list *script_list;
+};
+
+struct ctdb_event_reply_script_list {
+       struct ctdb_script_list *script_list;
+};
+
+struct ctdb_event_reply_data {
+       enum ctdb_event_command command;
+       int32_t result;
+       union {
+               struct ctdb_event_reply_status *status;
+               struct ctdb_event_reply_script_list *script_list;
+       } data;
+};
+
+struct ctdb_event_request {
+       struct sock_packet_header header;
+       struct ctdb_event_request_data rdata;
+};
+
+struct ctdb_event_reply {
+       struct sock_packet_header header;
+       struct ctdb_event_reply_data rdata;
+};
+
 #endif /* __CTDB_PROTOCOL_H__ */