ctdb-protocol: Optionally print port for address printing functions
[vlendec/samba-autobuild/.git] / ctdb / protocol / protocol.h
index 7f2ba92bbc1ee53c543a2137077fa38e86d33f95..28a28f41b2f6dd9b13992cbc709faf14159a3853 100644 (file)
@@ -209,11 +209,17 @@ struct ctdb_call {
  */
 #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_CLIENT_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  0xBE00000000000000LL
+#define CTDB_SRVID_TEST_RANGE  0xAE00000000000000LL
 
 
 enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
@@ -250,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 */
@@ -281,8 +287,8 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    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,
@@ -291,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 */
@@ -309,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 */
@@ -342,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,
@@ -361,11 +367,10 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    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
 
@@ -449,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;
 };
 
@@ -472,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
 */
@@ -551,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 {
@@ -632,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 {
@@ -751,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;
@@ -795,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,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;
@@ -903,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;
@@ -911,10 +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;
 };
 
@@ -925,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;
 };
@@ -988,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;
@@ -1011,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__ */