static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen, uint32_t opcode, TALLOC_CTX *mem_ctx, struct ctdb_req_control_data *cd, size_t *npull) { size_t np = 0, offset; uint32_t u32; int ret = 0; cd->opcode = opcode; switch (opcode) { case CTDB_CONTROL_PROCESS_EXISTS: ret = ctdb_pid_pull(buf, buflen, &cd->data.pid, &np); break; case CTDB_CONTROL_GETDBPATH: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_SETVNNMAP: ret = ctdb_vnn_map_pull(buf, buflen, mem_ctx, &cd->data.vnnmap, &np); break; case CTDB_CONTROL_SET_DEBUG: ret = ctdb_uint32_pull(buf, buflen, &cd->data.loglevel, &np); break; case CTDB_CONTROL_PULL_DB: ret = ctdb_pulldb_pull(buf, buflen, mem_ctx, &cd->data.pulldb, &np); break; case CTDB_CONTROL_PUSH_DB: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_SET_RECMODE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.recmode, &np); break; case CTDB_CONTROL_DB_ATTACH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name, &np); break; case CTDB_CONTROL_SET_CALL: break; case CTDB_CONTROL_TRAVERSE_START: ret = ctdb_traverse_start_pull(buf, buflen, mem_ctx, &cd->data.traverse_start, &np); break; case CTDB_CONTROL_TRAVERSE_ALL: ret = ctdb_traverse_all_pull(buf, buflen, mem_ctx, &cd->data.traverse_all, &np); break; case CTDB_CONTROL_TRAVERSE_DATA: ret = ctdb_rec_data_pull(buf, buflen, mem_ctx, &cd->data.rec_data, &np); break; case CTDB_CONTROL_GET_DBNAME: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_ENABLE_SEQNUM: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_UPDATE_SEQNUM: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_SET_RECMASTER: ret = ctdb_uint32_pull(buf, buflen, &cd->data.recmaster, &np); break; case CTDB_CONTROL_TCP_CLIENT: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn, &np); break; case CTDB_CONTROL_TCP_ADD: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn, &np); break; case CTDB_CONTROL_TCP_REMOVE: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn, &np); break; case CTDB_CONTROL_SET_TUNABLE: ret = ctdb_tunable_pull(buf, buflen, mem_ctx, &cd->data.tunable, &np); break; case CTDB_CONTROL_GET_TUNABLE: ret = ctdb_stringn_pull(buf, buflen, mem_ctx, &cd->data.tun_var, &np); break; case CTDB_CONTROL_MODIFY_FLAGS: ret = ctdb_node_flag_change_pull(buf, buflen, mem_ctx, &cd->data.flag_change, &np); break; case CTDB_CONTROL_GET_TCP_TICKLE_LIST: ret = ctdb_sock_addr_pull(buf, buflen, mem_ctx, &cd->data.addr, &np); break; case CTDB_CONTROL_SET_TCP_TICKLE_LIST: ret = ctdb_tickle_list_pull(buf, buflen, mem_ctx, &cd->data.tickles, &np); break; case CTDB_CONTROL_DB_ATTACH_PERSISTENT: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name, &np); break; case CTDB_CONTROL_UPDATE_RECORD: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_SEND_GRATUITOUS_ARP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info, &np); break; case CTDB_CONTROL_WIPE_DATABASE: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb, &np); break; case CTDB_CONTROL_TRY_DELETE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_ADD_PUBLIC_IP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info, &np); break; case CTDB_CONTROL_DEL_PUBLIC_IP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info, &np); break; case CTDB_CONTROL_RELEASE_IP: ret = ctdb_public_ip_pull(buf, buflen, mem_ctx, &cd->data.pubip, &np); break; case CTDB_CONTROL_TAKEOVER_IP: ret = ctdb_public_ip_pull(buf, buflen, mem_ctx, &cd->data.pubip, &np); break; case CTDB_CONTROL_TRAVERSE_KILL: ret = ctdb_traverse_start_pull(buf, buflen, mem_ctx, &cd->data.traverse_start, &np); break; case CTDB_CONTROL_RECD_RECLOCK_LATENCY: ret = ctdb_double_pull(buf, buflen, &cd->data.reclock_latency, &np); break; case CTDB_CONTROL_SET_LMASTERROLE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.role, &np); break; case CTDB_CONTROL_SET_RECMASTERROLE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.role, &np); break; case CTDB_CONTROL_SET_BAN_STATE: ret = ctdb_ban_state_pull(buf, buflen, mem_ctx, &cd->data.ban_state, &np); break; case CTDB_CONTROL_REGISTER_NOTIFY: ret = ctdb_notify_data_pull(buf, buflen, mem_ctx, &cd->data.notify, &np); break; case CTDB_CONTROL_DEREGISTER_NOTIFY: ret = ctdb_uint64_pull(buf, buflen, &cd->data.srvid, &np); break; case CTDB_CONTROL_TRANS3_COMMIT: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_GET_DB_SEQNUM: offset = 0; ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); if (ret != 0) { break; } offset += np; ret = ctdb_uint32_pull(buf+offset, buflen-offset, &u32, &np); offset += np; np = offset; break; case CTDB_CONTROL_DB_SET_HEALTHY: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_GET_HEALTH: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_GET_PUBLIC_IP_INFO: ret = ctdb_sock_addr_pull(buf, buflen, mem_ctx, &cd->data.addr, &np); break; case CTDB_CONTROL_SET_IFACE_LINK_STATE: ret = ctdb_iface_pull(buf, buflen, mem_ctx, &cd->data.iface, &np); break; case CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn, &np); break; case CTDB_CONTROL_SCHEDULE_FOR_DELETION: ret = ctdb_key_data_pull(buf, buflen, mem_ctx, &cd->data.key, &np); break; case CTDB_CONTROL_SET_DB_READONLY: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_CHECK_SRVIDS: break; case CTDB_CONTROL_TRAVERSE_START_EXT: ret = ctdb_traverse_start_ext_pull(buf, buflen, mem_ctx, &cd->data.traverse_start_ext, &np); break; case CTDB_CONTROL_GET_DB_STATISTICS: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_SET_DB_STICKY: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_TRAVERSE_ALL_EXT: ret = ctdb_traverse_all_ext_pull(buf, buflen, mem_ctx, &cd->data.traverse_all_ext, &np); break; case CTDB_CONTROL_RECEIVE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_DB_DETACH: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_FREEZE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_THAW: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_TRANSACTION_START: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb, &np); break; case CTDB_CONTROL_DB_TRANSACTION_COMMIT: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb, &np); break; case CTDB_CONTROL_DB_TRANSACTION_CANCEL: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_PULL: ret = ctdb_pulldb_ext_pull(buf, buflen, mem_ctx, &cd->data.pulldb_ext, &np); break; case CTDB_CONTROL_DB_PUSH_START: ret = ctdb_pulldb_ext_pull(buf, buflen, mem_ctx, &cd->data.pulldb_ext, &np); break; case CTDB_CONTROL_DB_PUSH_CONFIRM: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_OPEN_FLAGS: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_DB_ATTACH_REPLICATED: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name, &np); break; case CTDB_CONTROL_CHECK_PID_SRVID: ret = ctdb_pid_srvid_pull(buf, buflen, mem_ctx, &cd->data.pid_srvid, &np); break; } if (ret != 0) { return ret; } *npull = np; return 0; }
static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen, uint32_t opcode, TALLOC_CTX *mem_ctx, struct ctdb_req_control_data *cd) { int ret = 0; uint64_t u64 = 0; cd->opcode = opcode; switch (opcode) { case CTDB_CONTROL_PROCESS_EXISTS: ret = ctdb_pid_pull(buf, buflen, mem_ctx, &cd->data.pid); break; case CTDB_CONTROL_GETDBPATH: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_SETVNNMAP: ret = ctdb_vnn_map_pull(buf, buflen, mem_ctx, &cd->data.vnnmap); break; case CTDB_CONTROL_SET_DEBUG: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.loglevel); break; case CTDB_CONTROL_PULL_DB: ret = ctdb_pulldb_pull(buf, buflen, mem_ctx, &cd->data.pulldb); break; case CTDB_CONTROL_PUSH_DB: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_SET_RECMODE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.recmode); break; case CTDB_CONTROL_DB_ATTACH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name); break; case CTDB_CONTROL_SET_CALL: break; case CTDB_CONTROL_TRAVERSE_START: ret = ctdb_traverse_start_pull(buf, buflen, mem_ctx, &cd->data.traverse_start); break; case CTDB_CONTROL_TRAVERSE_ALL: ret = ctdb_traverse_all_pull(buf, buflen, mem_ctx, &cd->data.traverse_all); break; case CTDB_CONTROL_TRAVERSE_DATA: ret = ctdb_rec_data_pull(buf, buflen, mem_ctx, &cd->data.rec_data); break; case CTDB_CONTROL_GET_DBNAME: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_ENABLE_SEQNUM: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_UPDATE_SEQNUM: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_SET_RECMASTER: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.recmaster); break; case CTDB_CONTROL_TCP_CLIENT: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn); break; case CTDB_CONTROL_TCP_ADD: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn); break; case CTDB_CONTROL_TCP_REMOVE: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn); break; case CTDB_CONTROL_SET_TUNABLE: ret = ctdb_tunable_pull(buf, buflen, mem_ctx, &cd->data.tunable); break; case CTDB_CONTROL_GET_TUNABLE: ret = ctdb_stringn_pull(buf, buflen, mem_ctx, &cd->data.tun_var); break; case CTDB_CONTROL_MODIFY_FLAGS: ret = ctdb_node_flag_change_pull(buf, buflen, mem_ctx, &cd->data.flag_change); break; case CTDB_CONTROL_KILL_TCP: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn); break; case CTDB_CONTROL_GET_TCP_TICKLE_LIST: ret = ctdb_sock_addr_pull(buf, buflen, mem_ctx, &cd->data.addr); break; case CTDB_CONTROL_SET_TCP_TICKLE_LIST: ret = ctdb_tickle_list_pull(buf, buflen, mem_ctx, &cd->data.tickles); break; case CTDB_CONTROL_REGISTER_SERVER_ID: ret = ctdb_client_id_pull(buf, buflen, mem_ctx, &cd->data.cid); break; case CTDB_CONTROL_UNREGISTER_SERVER_ID: ret = ctdb_client_id_pull(buf, buflen, mem_ctx, &cd->data.cid); break; case CTDB_CONTROL_CHECK_SERVER_ID: ret = ctdb_client_id_pull(buf, buflen, mem_ctx, &cd->data.cid); break; case CTDB_CONTROL_DB_ATTACH_PERSISTENT: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name); break; case CTDB_CONTROL_UPDATE_RECORD: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_SEND_GRATUITOUS_ARP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info); break; case CTDB_CONTROL_TRANSACTION_START: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.tid); break; case CTDB_CONTROL_TRANSACTION_COMMIT: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.tid); break; case CTDB_CONTROL_WIPE_DATABASE: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb); break; case CTDB_CONTROL_TRY_DELETE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_ADD_PUBLIC_IP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info); break; case CTDB_CONTROL_DEL_PUBLIC_IP: ret = ctdb_addr_info_pull(buf, buflen, mem_ctx, &cd->data.addr_info); break; case CTDB_CONTROL_RUN_EVENTSCRIPTS: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.event_str); break; case CTDB_CONTROL_RELEASE_IP: ret = ctdb_public_ip_pull(buf, buflen, mem_ctx, &cd->data.pubip); break; case CTDB_CONTROL_TAKEOVER_IP: ret = ctdb_public_ip_pull(buf, buflen, mem_ctx, &cd->data.pubip); break; case CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.event); break; case CTDB_CONTROL_TRAVERSE_KILL: ret = ctdb_traverse_start_pull(buf, buflen, mem_ctx, &cd->data.traverse_start); break; case CTDB_CONTROL_RECD_RECLOCK_LATENCY: ret = ctdb_double_pull(buf, buflen, mem_ctx, &cd->data.reclock_latency); break; case CTDB_CONTROL_SET_RECLOCK_FILE: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.reclock_file); break; case CTDB_CONTROL_SET_NATGWSTATE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.role); break; case CTDB_CONTROL_SET_LMASTERROLE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.role); break; case CTDB_CONTROL_SET_RECMASTERROLE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.role); break; case CTDB_CONTROL_ENABLE_SCRIPT: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.script); break; case CTDB_CONTROL_DISABLE_SCRIPT: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.script); break; case CTDB_CONTROL_SET_BAN_STATE: ret = ctdb_ban_state_pull(buf, buflen, mem_ctx, &cd->data.ban_state); break; case CTDB_CONTROL_SET_DB_PRIORITY: ret = ctdb_db_priority_pull(buf, buflen, mem_ctx, &cd->data.db_prio); break; case CTDB_CONTROL_GET_DB_PRIORITY: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_REGISTER_NOTIFY: ret = ctdb_notify_data_pull(buf, buflen, mem_ctx, &cd->data.notify); break; case CTDB_CONTROL_DEREGISTER_NOTIFY: ctdb_uint64_pull(buf, buflen, mem_ctx, &cd->data.srvid); break; case CTDB_CONTROL_TRANS3_COMMIT: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_GET_DB_SEQNUM: ret = ctdb_uint64_pull(buf, buflen, mem_ctx, &u64); cd->data.db_id = (uint32_t)u64; break; case CTDB_CONTROL_DB_SET_HEALTHY: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_DB_GET_HEALTH: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_GET_PUBLIC_IP_INFO: ret = ctdb_sock_addr_pull(buf, buflen, mem_ctx, &cd->data.addr); break; case CTDB_CONTROL_SET_IFACE_LINK_STATE: ret = ctdb_iface_pull(buf, buflen, mem_ctx, &cd->data.iface); break; case CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE: ret = ctdb_connection_pull(buf, buflen, mem_ctx, &cd->data.conn); break; case CTDB_CONTROL_SCHEDULE_FOR_DELETION: ret = ctdb_key_data_pull(buf, buflen, mem_ctx, &cd->data.key); break; case CTDB_CONTROL_SET_DB_READONLY: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_CHECK_SRVIDS: ret = ctdb_uint64_array_pull(buf, buflen, mem_ctx, &cd->data.u64_array); break; case CTDB_CONTROL_TRAVERSE_START_EXT: ret = ctdb_traverse_start_ext_pull(buf, buflen, mem_ctx, &cd->data.traverse_start_ext); break; case CTDB_CONTROL_GET_DB_STATISTICS: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_SET_DB_STICKY: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_TRAVERSE_ALL_EXT: ret = ctdb_traverse_all_ext_pull(buf, buflen, mem_ctx, &cd->data.traverse_all_ext); break; case CTDB_CONTROL_RECEIVE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_DB_DETACH: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_DB_FREEZE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_DB_THAW: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_DB_TRANSACTION_START: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb); break; case CTDB_CONTROL_DB_TRANSACTION_COMMIT: ret = ctdb_transdb_pull(buf, buflen, mem_ctx, &cd->data.transdb); break; case CTDB_CONTROL_DB_TRANSACTION_CANCEL: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; } return ret; }
static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen, uint32_t opcode, TALLOC_CTX *mem_ctx, struct ctdb_reply_control_data *cd, size_t *npull) { size_t np = 0; int ret = 0; cd->opcode = opcode; switch (opcode) { case CTDB_CONTROL_STATISTICS: ret = ctdb_statistics_pull(buf, buflen, mem_ctx, &cd->data.stats, &np); break; case CTDB_CONTROL_GETDBPATH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_path, &np); break; case CTDB_CONTROL_GETVNNMAP: ret = ctdb_vnn_map_pull(buf, buflen, mem_ctx, &cd->data.vnnmap, &np); break; case CTDB_CONTROL_GET_DEBUG: ret = ctdb_uint32_pull(buf, buflen, &cd->data.loglevel, &np); break; case CTDB_CONTROL_GET_DBMAP: ret = ctdb_dbid_map_pull(buf, buflen, mem_ctx, &cd->data.dbmap, &np); break; case CTDB_CONTROL_PULL_DB: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_PUSH_DB: break; case CTDB_CONTROL_DB_ATTACH: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_GET_DBNAME: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name, &np); break; case CTDB_CONTROL_DUMP_MEMORY: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.mem_str, &np); break; case CTDB_CONTROL_GET_PID: break; case CTDB_CONTROL_GET_RECMASTER: break; case CTDB_CONTROL_GET_TUNABLE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.tun_value, &np); break; case CTDB_CONTROL_LIST_TUNABLES: ret = ctdb_var_list_pull(buf, buflen, mem_ctx, &cd->data.tun_var_list, &np); break; case CTDB_CONTROL_GET_ALL_TUNABLES: ret = ctdb_tunable_list_pull(buf, buflen, mem_ctx, &cd->data.tun_list, &np); break; case CTDB_CONTROL_GET_TCP_TICKLE_LIST: ret = ctdb_tickle_list_pull(buf, buflen, mem_ctx, &cd->data.tickles, &np); break; case CTDB_CONTROL_DB_ATTACH_PERSISTENT: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_UPTIME: ret = ctdb_uptime_pull(buf, buflen, mem_ctx, &cd->data.uptime, &np); break; case CTDB_CONTROL_TRY_DELETE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_GET_CAPABILITIES: ret = ctdb_uint32_pull(buf, buflen, &cd->data.caps, &np); break; case CTDB_CONTROL_GET_PUBLIC_IPS: ret = ctdb_public_ip_list_pull(buf, buflen, mem_ctx, &cd->data.pubip_list, &np); break; case CTDB_CONTROL_GET_NODEMAP: ret = ctdb_node_map_pull(buf, buflen, mem_ctx, &cd->data.nodemap, &np); break; case CTDB_CONTROL_GET_RECLOCK_FILE: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.reclock_file, &np); break; case CTDB_CONTROL_GET_BAN_STATE: ret = ctdb_ban_state_pull(buf, buflen, mem_ctx, &cd->data.ban_state, &np); break; case CTDB_CONTROL_GET_DB_PRIORITY: break; case CTDB_CONTROL_GET_DB_SEQNUM: ret = ctdb_uint64_pull(buf, buflen, &cd->data.seqnum, &np); break; case CTDB_CONTROL_DB_GET_HEALTH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.reason, &np); break; case CTDB_CONTROL_GET_PUBLIC_IP_INFO: ret = ctdb_public_ip_info_pull(buf, buflen, mem_ctx, &cd->data.ipinfo, &np); break; case CTDB_CONTROL_GET_IFACES: ret = ctdb_iface_list_pull(buf, buflen, mem_ctx, &cd->data.iface_list, &np); break; case CTDB_CONTROL_GET_STAT_HISTORY: ret = ctdb_statistics_list_pull(buf, buflen, mem_ctx, &cd->data.stats_list, &np); break; case CTDB_CONTROL_CHECK_SRVIDS: break; case CTDB_CONTROL_GET_DB_STATISTICS: ret = ctdb_db_statistics_pull(buf, buflen, mem_ctx, &cd->data.dbstats, &np); break; case CTDB_CONTROL_RECEIVE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf, &np); break; case CTDB_CONTROL_GET_RUNSTATE: ret = ctdb_uint32_pull(buf, buflen, &cd->data.runstate, &np); break; case CTDB_CONTROL_GET_NODES_FILE: ret = ctdb_node_map_pull(buf, buflen, mem_ctx, &cd->data.nodemap, &np); break; case CTDB_CONTROL_DB_PULL: ret = ctdb_uint32_pull(buf, buflen, &cd->data.num_records, &np); break; case CTDB_CONTROL_DB_PUSH_CONFIRM: ret = ctdb_uint32_pull(buf, buflen, &cd->data.num_records, &np); break; case CTDB_CONTROL_DB_OPEN_FLAGS: ret = ctdb_int32_pull(buf, buflen, &cd->data.tdb_flags, &np); break; case CTDB_CONTROL_DB_ATTACH_REPLICATED: ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np); break; case CTDB_CONTROL_CHECK_PID_SRVID: break; } if (ret != 0) { return ret; } *npull = np; return 0; }
static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen, uint32_t opcode, TALLOC_CTX *mem_ctx, struct ctdb_reply_control_data *cd) { int ret = 0; cd->opcode = opcode; switch (opcode) { case CTDB_CONTROL_STATISTICS: ret = ctdb_statistics_pull(buf, buflen, mem_ctx, &cd->data.stats); break; case CTDB_CONTROL_GETDBPATH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_path); break; case CTDB_CONTROL_GETVNNMAP: ret = ctdb_vnn_map_pull(buf, buflen, mem_ctx, &cd->data.vnnmap); break; case CTDB_CONTROL_GET_DEBUG: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.loglevel); break; case CTDB_CONTROL_GET_DBMAP: ret = ctdb_dbid_map_pull(buf, buflen, mem_ctx, &cd->data.dbmap); break; case CTDB_CONTROL_PULL_DB: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_PUSH_DB: break; case CTDB_CONTROL_DB_ATTACH: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_GET_DBNAME: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.db_name); break; case CTDB_CONTROL_DUMP_MEMORY: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.mem_str); break; case CTDB_CONTROL_GET_PID: break; case CTDB_CONTROL_GET_RECMASTER: break; case CTDB_CONTROL_GET_TUNABLE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.tun_value); break; case CTDB_CONTROL_LIST_TUNABLES: ret = ctdb_var_list_pull(buf, buflen, mem_ctx, &cd->data.tun_var_list); break; case CTDB_CONTROL_GET_ALL_TUNABLES: ret = ctdb_tunable_list_pull(buf, buflen, mem_ctx, &cd->data.tun_list); break; case CTDB_CONTROL_GET_TCP_TICKLE_LIST: ret = ctdb_tickle_list_pull(buf, buflen, mem_ctx, &cd->data.tickles); break; case CTDB_CONTROL_GET_SERVER_ID_LIST: ret = ctdb_client_id_map_pull(buf, buflen, mem_ctx, &cd->data.cid_map); break; case CTDB_CONTROL_DB_ATTACH_PERSISTENT: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.db_id); break; case CTDB_CONTROL_UPTIME: ret = ctdb_uptime_pull(buf, buflen, mem_ctx, &cd->data.uptime); break; case CTDB_CONTROL_TRY_DELETE_RECORDS: ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_GET_CAPABILITIES: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.caps); break; case CTDB_CONTROL_GET_PUBLIC_IPS: ret = ctdb_public_ip_list_pull(buf, buflen, mem_ctx, &cd->data.pubip_list); break; case CTDB_CONTROL_GET_NODEMAP: ret = ctdb_node_map_pull(buf, buflen, mem_ctx, &cd->data.nodemap); break; case CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS: ret = ctdb_script_list_pull(buf, buflen, mem_ctx, &cd->data.script_list); break; case CTDB_CONTROL_GET_RECLOCK_FILE: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.reclock_file); break; case CTDB_CONTROL_GET_BAN_STATE: ret = ctdb_ban_state_pull(buf, buflen, mem_ctx, &cd->data.ban_state); break; case CTDB_CONTROL_GET_DB_PRIORITY: break; case CTDB_CONTROL_GET_DB_SEQNUM: ret = ctdb_uint64_pull(buf, buflen, mem_ctx, &cd->data.seqnum); break; case CTDB_CONTROL_DB_GET_HEALTH: ret = ctdb_string_pull(buf, buflen, mem_ctx, &cd->data.reason); break; case CTDB_CONTROL_GET_PUBLIC_IP_INFO: ret = ctdb_public_ip_info_pull(buf, buflen, mem_ctx, &cd->data.ipinfo); break; case CTDB_CONTROL_GET_IFACES: ret = ctdb_iface_list_pull(buf, buflen, mem_ctx, &cd->data.iface_list); break; case CTDB_CONTROL_GET_STAT_HISTORY: ret = ctdb_statistics_list_pull(buf, buflen, mem_ctx, &cd->data.stats_list); break; case CTDB_CONTROL_CHECK_SRVIDS: ret = ctdb_uint8_array_pull(buf, buflen, mem_ctx, &cd->data.u8_array); break; case CTDB_CONTROL_GET_DB_STATISTICS: ret = ctdb_db_statistics_pull(buf, buflen, mem_ctx, &cd->data.dbstats); break; case CTDB_CONTROL_RECEIVE_RECORDS: ret = ctdb_rec_buffer_pull(buf, buflen, mem_ctx, &cd->data.recbuf); break; case CTDB_CONTROL_GET_RUNSTATE: ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &cd->data.runstate); break; case CTDB_CONTROL_GET_NODES_FILE: ret = ctdb_node_map_pull(buf, buflen, mem_ctx, &cd->data.nodemap); break; } return ret; }