X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=ndmp-src%2Fndmp2.x;fp=ndmp-src%2Fndmp2.x;h=d4dea6be3cfdcfb642975d4d5e97d9a05871469a;hb=fd48f3e498442f0cbff5f3606c7c403d0566150e;hp=0000000000000000000000000000000000000000;hpb=96f35b20267e8b1a1c846d476f27fcd330e0b018;p=debian%2Famanda diff --git a/ndmp-src/ndmp2.x b/ndmp-src/ndmp2.x new file mode 100644 index 0000000..d4dea6b --- /dev/null +++ b/ndmp-src/ndmp2.x @@ -0,0 +1,928 @@ +/* + * Copyright (c) 2000 + * Traakan, Inc., Los Altos, CA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Project: NDMJOB + * Ident: $Id: $ + * + * Description: + * + */ + + +/* + * Copyright (c) 1997 Network Appliance. All Rights Reserved. + * + * Network Appliance makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + * + */ + +%#ifndef NDMOS_OPTION_NO_NDMP2 + +const NDMP2VER = 2; +const NDMP2PORT = 10000; + +%#define ndmp2_u_quad unsigned long long +%extern bool_t xdr_ndmp2_u_quad(); + +struct _ndmp2_u_quad +{ + u_long high; + u_long low; +}; + +struct ndmp2_pval +{ + string name<>; + string value<>; +}; + +struct ndmp2_scsi_device +{ + string name<>; +}; + +struct ndmp2_tape_device +{ + string name<>; +}; + +enum ndmp2_error +{ + NDMP2_NO_ERR, /* No error */ + NDMP2_NOT_SUPPORTED_ERR, /* Call is not supported */ + NDMP2_DEVICE_BUSY_ERR, /* The device is in use */ + NDMP2_DEVICE_OPENED_ERR, /* Another tape or scsi device + * is already open */ + NDMP2_NOT_AUTHORIZED_ERR, /* connection has not been authorized*/ + NDMP2_PERMISSION_ERR, /* some sort of permission problem */ + NDMP2_DEV_NOT_OPEN_ERR, /* SCSI device is not open */ + NDMP2_IO_ERR, /* I/O error */ + NDMP2_TIMEOUT_ERR, /* command timed out */ + NDMP2_ILLEGAL_ARGS_ERR, /* illegal arguments in request */ + NDMP2_NO_TAPE_LOADED_ERR, /* Cannot open because there is + no tape loaded */ + NDMP2_WRITE_PROTECT_ERR, /* tape cannot be open for write */ + NDMP2_EOF_ERR, /* Command encountered EOF */ + NDMP2_EOM_ERR, /* Command encountered EOM */ + NDMP2_FILE_NOT_FOUND_ERR, /* File not found during restore */ + NDMP2_BAD_FILE_ERR, /* The file descriptor is invalid */ + NDMP2_NO_DEVICE_ERR, /* The device is not at that target */ + NDMP2_NO_BUS_ERR, /* Invalid controller */ + NDMP2_XDR_DECODE_ERR, /* Can't decode the request argument */ + NDMP2_ILLEGAL_STATE_ERR, /* Call can't be done at this state */ + NDMP2_UNDEFINED_ERR, /* Undefined Error */ + NDMP2_XDR_ENCODE_ERR, /* Can't encode the reply argument */ + NDMP2_NO_MEM_ERR /* no memory */ +}; + +enum ndmp2_header_message_type +{ + NDMP2_MESSAGE_REQUEST, + NDMP2_MESSAGE_REPLY +}; + +enum ndmp2_message +{ + NDMP2_CONNECT_OPEN = 0x900, /* CONNECT INTERFACE */ + NDMP2_CONNECT_CLIENT_AUTH, + NDMP2_CONNECT_CLOSE, + NDMP2_CONNECT_SERVER_AUTH, + + NDMP2_CONFIG_GET_HOST_INFO = 0x100, /* CONFIG INTERFACE */ + NDMP2_CONFIG_GET_BUTYPE_ATTR, + NDMP2_CONFIG_GET_MOVER_TYPE, + NDMP2_CONFIG_GET_AUTH_ATTR, + + NDMP2_SCSI_OPEN = 0x200, /* SCSI INTERFACE */ + NDMP2_SCSI_CLOSE, + NDMP2_SCSI_GET_STATE, + NDMP2_SCSI_SET_TARGET, + NDMP2_SCSI_RESET_DEVICE, + NDMP2_SCSI_RESET_BUS, + NDMP2_SCSI_EXECUTE_CDB, + + NDMP2_TAPE_OPEN = 0x300, /* TAPE INTERFACE */ + NDMP2_TAPE_CLOSE, + NDMP2_TAPE_GET_STATE, + NDMP2_TAPE_MTIO, + NDMP2_TAPE_WRITE, + NDMP2_TAPE_READ, + NDMP2_TAPE_RESVD1, + NDMP2_TAPE_EXECUTE_CDB, + + NDMP2_DATA_GET_STATE = 0x400, /* DATA INTERFACE */ + NDMP2_DATA_START_BACKUP, + NDMP2_DATA_START_RECOVER, + NDMP2_DATA_ABORT, + NDMP2_DATA_GET_ENV, + NDMP2_DATA_RESVD1, + NDMP2_DATA_RESVD2, + NDMP2_DATA_STOP, + NDMP2_DATA_START_RECOVER_FILEHIST = 0x40b, /* same as V3.1 */ + + NDMP2_NOTIFY_RESVD1 = 0x500, /* NOTIFY INTERFACE */ + NDMP2_NOTIFY_DATA_HALTED, + NDMP2_NOTIFY_CONNECTED, + NDMP2_NOTIFY_MOVER_HALTED, + NDMP2_NOTIFY_MOVER_PAUSED, + NDMP2_NOTIFY_DATA_READ, + + NDMP2_LOG_LOG = 0x600, /* LOGGING INTERFACE */ + NDMP2_LOG_DEBUG, + NDMP2_LOG_FILE, + + NDMP2_FH_ADD_UNIX_PATH = 0x700, /* FILE HISTORY INTERFACE */ + NDMP2_FH_ADD_UNIX_DIR, + NDMP2_FH_ADD_UNIX_NODE, + + NDMP2_MOVER_GET_STATE = 0xa00, /* MOVER INTERFACE */ + NDMP2_MOVER_LISTEN, + NDMP2_MOVER_CONTINUE, + NDMP2_MOVER_ABORT, + NDMP2_MOVER_STOP, + NDMP2_MOVER_SET_WINDOW, + NDMP2_MOVER_READ, + NDMP2_MOVER_CLOSE, + NDMP2_MOVER_SET_RECORD_SIZE, + + NDMP2_RESERVED = 0xff00 /* Reserved for prototyping */ +}; + +struct ndmp2_header +{ + u_long sequence; /* monotonically increasing */ + u_long time_stamp; /* time stamp of message */ + ndmp2_header_message_type message_type; /* what type of message */ + ndmp2_message message; /* message number */ + u_long reply_sequence; /* reply is in response to */ + ndmp2_error error; /* communications errors */ +}; + +/**********************/ +/* CONNECT INTERFACE */ +/**********************/ +/* NDMP2_CONNECT_OPEN */ +struct ndmp2_connect_open_request +{ + u_short protocol_version; /* the version of protocol supported */ +}; + +struct ndmp2_connect_open_reply +{ + ndmp2_error error; +}; + +/* NDMP2_CONNECT_CLIENT_AUTH */ +enum ndmp2_auth_type +{ + NDMP2_AUTH_NONE, /* no password is required */ + NDMP2_AUTH_TEXT, /* the clear text password */ + NDMP2_AUTH_MD5 /* md5 */ +}; + +struct ndmp2_auth_text +{ + string auth_id<>; + string auth_password<>; +}; + +struct ndmp2_auth_md5 +{ + string auth_id<>; + opaque auth_digest[16]; +}; + +union ndmp2_auth_data switch (enum ndmp2_auth_type auth_type) +{ + case NDMP2_AUTH_NONE: + void; + case NDMP2_AUTH_TEXT: + ndmp2_auth_text auth_text; + case NDMP2_AUTH_MD5: + ndmp2_auth_md5 auth_md5; +}; + +struct ndmp2_connect_client_auth_request +{ + ndmp2_auth_data auth_data; +}; + +struct ndmp2_connect_client_auth_reply +{ + ndmp2_error error; +}; + +/* NDMP2_CONNECT_CLOSE */ +/* no request arguments */ +/* no reply arguments */ + +/* NDMP2_CONNECT_SERVER_AUTH */ +union ndmp2_auth_attr switch (enum ndmp2_auth_type auth_type) +{ + case NDMP2_AUTH_NONE: + void; + case NDMP2_AUTH_TEXT: + void; + case NDMP2_AUTH_MD5: + opaque challenge[64]; +}; + +struct ndmp2_connect_server_auth_request +{ + ndmp2_auth_attr client_attr; +}; + +struct ndmp2_connect_server_auth_reply +{ + ndmp2_error error; + ndmp2_auth_data auth_result; +}; + +/********************/ +/* CONFIG INTERFACE */ +/********************/ +/* NDMP2_CONFIG_GET_HOST_INFO */ +/* no request arguments */ +struct ndmp2_config_get_host_info_reply +{ + ndmp2_error error; + string hostname<>; /* host name */ + string os_type<>; /* The O/S type (e.g. SOLARIS) */ + string os_vers<>; /* The O/S version (e.g. 2.5) */ + string hostid<>; + ndmp2_auth_type auth_type<>; +}; + +/* NDMP2_CONFIG_GET_BUTYPE_ATTR */ +const NDMP2_NO_BACKUP_FILELIST = 0x0001; +const NDMP2_NO_BACKUP_FHINFO = 0x0002; +const NDMP2_NO_RECOVER_FILELIST = 0x0004; +const NDMP2_NO_RECOVER_FHINFO = 0x0008; +const NDMP2_NO_RECOVER_RESVD = 0x0010; +const NDMP2_NO_RECOVER_INC_ONLY = 0x0020; + +struct ndmp2_config_get_butype_attr_request +{ + string name<>; /* backup type name */ +}; + +struct ndmp2_config_get_butype_attr_reply +{ + ndmp2_error error; + u_long attrs; +}; + +/* NDMP2_CONFIG_GET_MOVER_TYPE */ +/* no request arguments */ +enum ndmp2_mover_addr_type +{ + NDMP2_ADDR_LOCAL, + NDMP2_ADDR_TCP +}; + +struct ndmp2_config_get_mover_type_reply +{ + ndmp2_error error; + ndmp2_mover_addr_type methods<>; +}; + +/* NDMP2_CONFIG_GET_AUTH_ATTR */ +struct ndmp2_config_get_auth_attr_request +{ + ndmp2_auth_type auth_type; +}; + +struct ndmp2_config_get_auth_attr_reply +{ + ndmp2_error error; + ndmp2_auth_attr server_attr; +}; + +/******************/ +/* SCSI INTERFACE */ +/******************/ +/* NDMP2_SCSI_OPEN */ +struct ndmp2_scsi_open_request +{ + ndmp2_scsi_device device; +}; + +struct ndmp2_scsi_open_reply +{ + ndmp2_error error; +}; + +/* NDMP2_SCSI_CLOSE */ +/* no request arguments */ +struct ndmp2_scsi_close_reply +{ + ndmp2_error error; +}; + +/* NDMP2_SCSI_GET_STATE */ +/* no request arguments */ +struct ndmp2_scsi_get_state_reply +{ + ndmp2_error error; + short target_controller; + short target_id; + short target_lun; +}; + +/* NDMP2_SCSI_SET_TARGET */ +struct ndmp2_scsi_set_target_request +{ + ndmp2_scsi_device device; + u_short target_controller; + u_short target_id; + u_short target_lun; +}; + +struct ndmp2_scsi_set_target_reply +{ + ndmp2_error error; +}; + +/* NDMP2_SCSI_RESET_DEVICE */ +/* no request arguments */ +struct ndmp2_scsi_reset_device_reply +{ + ndmp2_error error; +}; + +/* NDMP2_SCSI_RESET_BUS */ +/* no request arguments */ +struct ndmp2_scsi_reset_bus_reply +{ + ndmp2_error error; +}; + +/* NDMP2_SCSI_EXECUTE_CDB */ +const NDMP2_SCSI_DATA_IN = 0x00000001; /* Expect data from SCSI device */ +const NDMP2_SCSI_DATA_OUT = 0x00000002; /* Transfer data to SCSI device */ + +struct ndmp2_execute_cdb_request +{ + u_long flags; + u_long timeout; + u_long datain_len; /* Set for expected datain */ + opaque cdb<>; + opaque dataout<>; +}; + +struct ndmp2_execute_cdb_reply +{ + ndmp2_error error; + u_char status; /* SCSI status bytes */ + u_long dataout_len; + opaque datain<>; /* SCSI datain */ + opaque ext_sense<>; /* Extended sense data */ +}; +typedef ndmp2_execute_cdb_request ndmp2_scsi_execute_cdb_request; +typedef ndmp2_execute_cdb_reply ndmp2_scsi_execute_cdb_reply; + + +/******************/ +/* TAPE INTERFACE */ +/******************/ +/* NDMP2_TAPE_OPEN */ +enum ndmp2_tape_open_mode +{ + NDMP2_TAPE_READ_MODE, + NDMP2_TAPE_WRITE_MODE +}; + +struct ndmp2_tape_open_request +{ + ndmp2_tape_device device; + ndmp2_tape_open_mode mode; +}; + +struct ndmp2_tape_open_reply +{ + ndmp2_error error; +}; + +/* NDMP2_TAPE_CLOSE */ +/* no request arguments */ +struct ndmp2_tape_close_reply +{ + ndmp2_error error; +}; + +/* NDMP2_TAPE_GET_STATE */ +/* no request arguments */ +const NDMP2_TAPE_NOREWIND = 0x0008; /* non-rewind device */ +const NDMP2_TAPE_WR_PROT = 0x0010; /* write-protected */ +const NDMP2_TAPE_ERROR = 0x0020; /* media error */ +const NDMP2_TAPE_UNLOAD = 0x0040; /* tape will be unloaded when + * the device is closed */ +struct ndmp2_tape_get_state_reply +{ + ndmp2_error error; + u_long flags; + u_long file_num; + u_long soft_errors; + u_long block_size; + u_long blockno; + ndmp2_u_quad total_space; + ndmp2_u_quad space_remain; +}; + +/* NDMP2_TAPE_MTIO */ +enum ndmp2_tape_mtio_op +{ + NDMP2_MTIO_FSF, + NDMP2_MTIO_BSF, + NDMP2_MTIO_FSR, + NDMP2_MTIO_BSR, + NDMP2_MTIO_REW, + NDMP2_MTIO_EOF, + NDMP2_MTIO_OFF +}; + +struct ndmp2_tape_mtio_request +{ + ndmp2_tape_mtio_op tape_op; + u_long count; +}; + +struct ndmp2_tape_mtio_reply +{ + ndmp2_error error; + u_long resid_count; +}; + +/* NDMP2_TAPE_WRITE */ +struct ndmp2_tape_write_request +{ + opaque data_out<>; +}; + +struct ndmp2_tape_write_reply +{ + ndmp2_error error; + u_long count; +}; + +/* NDMP2_TAPE_READ */ +struct ndmp2_tape_read_request +{ + u_long count; +}; + +struct ndmp2_tape_read_reply +{ + ndmp2_error error; + opaque data_in<>; +}; + +/* NDMP2_TAPE_EXECUTE_CDB */ +typedef ndmp2_execute_cdb_request ndmp2_tape_execute_cdb_request; +typedef ndmp2_execute_cdb_reply ndmp2_tape_execute_cdb_reply; + +/********************************/ +/* MOVER INTERFACE */ +/********************************/ +/* NDMP2_MOVER_GET_STATE */ +enum ndmp2_mover_state +{ + NDMP2_MOVER_STATE_IDLE, + NDMP2_MOVER_STATE_LISTEN, + NDMP2_MOVER_STATE_ACTIVE, + NDMP2_MOVER_STATE_PAUSED, + NDMP2_MOVER_STATE_HALTED +}; + +enum ndmp2_mover_pause_reason +{ + NDMP2_MOVER_PAUSE_NA, + NDMP2_MOVER_PAUSE_EOM, + NDMP2_MOVER_PAUSE_EOF, + NDMP2_MOVER_PAUSE_SEEK, + NDMP2_MOVER_PAUSE_MEDIA_ERROR +}; + +enum ndmp2_mover_halt_reason +{ + NDMP2_MOVER_HALT_NA, + NDMP2_MOVER_HALT_CONNECT_CLOSED, + NDMP2_MOVER_HALT_ABORTED, + NDMP2_MOVER_HALT_INTERNAL_ERROR, + NDMP2_MOVER_HALT_CONNECT_ERROR +}; + +/* no request arguments */ +struct ndmp2_mover_get_state_reply +{ + ndmp2_error error; + ndmp2_mover_state state; + ndmp2_mover_pause_reason pause_reason; + ndmp2_mover_halt_reason halt_reason; + u_long record_size; + u_long record_num; + ndmp2_u_quad data_written; + ndmp2_u_quad seek_position; + ndmp2_u_quad bytes_left_to_read; + ndmp2_u_quad window_offset; + ndmp2_u_quad window_length; +}; + +/* NDMP2_MOVER_LISTEN */ +enum ndmp2_mover_mode +{ + NDMP2_MOVER_MODE_READ, /* read from data conn; write to tape */ + NDMP2_MOVER_MODE_WRITE, /* write to data conn; read from tape */ + NDMP2_MOVER_MODE_DATA /* write to data conn; read from data conn */ +}; + +struct ndmp2_mover_tcp_addr +{ + u_long ip_addr; + u_short port; +}; + +union ndmp2_mover_addr switch (ndmp2_mover_addr_type addr_type) +{ + case NDMP2_ADDR_LOCAL: + void; + case NDMP2_ADDR_TCP: + ndmp2_mover_tcp_addr addr; +}; + +struct ndmp2_mover_listen_request +{ + ndmp2_mover_mode mode; + ndmp2_mover_addr_type addr_type; +}; + +struct ndmp2_mover_listen_reply +{ + ndmp2_error error; + ndmp2_mover_addr mover; +}; + +/* NDMP2_MOVER_SET_RECORD_SIZE */ +struct ndmp2_mover_set_record_size_request +{ + u_long len; +}; + +struct ndmp2_mover_set_record_size_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_SET_WINDOW */ +struct ndmp2_mover_set_window_request +{ + ndmp2_u_quad offset; + ndmp2_u_quad length; +}; + +struct ndmp2_mover_set_window_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_CONTINUE */ +/* no request arguments */ +struct ndmp2_mover_continue_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_ABORT */ +/* no request arguments */ +struct ndmp2_mover_abort_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_STOP */ +/* no request arguments */ +struct ndmp2_mover_stop_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_READ */ +struct ndmp2_mover_read_request +{ + ndmp2_u_quad offset; + ndmp2_u_quad length; +}; + +struct ndmp2_mover_read_reply +{ + ndmp2_error error; +}; + +/* NDMP2_MOVER_CLOSE */ +/* no request arguments */ +struct ndmp2_mover_close_reply +{ + ndmp2_error error; +}; + +/****************************/ +/* DATA INTERFACE */ +/****************************/ +/* NDMP2_DATA_GET_STATE */ +/* no request arguments */ +enum ndmp2_data_operation +{ + NDMP2_DATA_OP_NOACTION, + NDMP2_DATA_OP_BACKUP, + NDMP2_DATA_OP_RESTORE, + NDMP2_DATA_OP_RESTORE_FILEHIST +}; + +enum ndmp2_data_state +{ + NDMP2_DATA_STATE_IDLE, + NDMP2_DATA_STATE_ACTIVE, + NDMP2_DATA_STATE_HALTED +}; + +enum ndmp2_data_halt_reason +{ + NDMP2_DATA_HALT_NA, + NDMP2_DATA_HALT_SUCCESSFUL, + NDMP2_DATA_HALT_ABORTED, + NDMP2_DATA_HALT_INTERNAL_ERROR, + NDMP2_DATA_HALT_CONNECT_ERROR +}; + +struct ndmp2_data_get_state_reply +{ + ndmp2_error error; + ndmp2_data_operation operation; + ndmp2_data_state state; + ndmp2_data_halt_reason halt_reason; + ndmp2_u_quad bytes_processed; + ndmp2_u_quad est_bytes_remain; + u_long est_time_remain; + ndmp2_mover_addr mover; + ndmp2_u_quad read_offset; + ndmp2_u_quad read_length; +}; + +/* NDMP2_DATA_START_BACKUP */ +struct ndmp2_data_start_backup_request +{ + ndmp2_mover_addr mover; /* mover to receive data */ + string bu_type<>; /* backup method to use */ + ndmp2_pval env<>; /* Parameters that may modify backup */ +}; + +struct ndmp2_data_start_backup_reply +{ + ndmp2_error error; +}; + +/* NDMP2_DATA_START_RECOVER */ +struct ndmp2_name +{ + string name<>; + string dest<>; + u_short ssid; + ndmp2_u_quad fh_info; +}; + +struct ndmp2_data_start_recover_request +{ + ndmp2_mover_addr mover; + ndmp2_pval env<>; + ndmp2_name nlist<>; + string bu_type<>; +}; + +struct ndmp2_data_start_recover_reply +{ + ndmp2_error error; +}; + +/* NDMP2_DATA_START_RECOVER_FILEHIST */ +typedef ndmp2_data_start_recover_request ndmp2_data_start_recover_filehist_request; +typedef ndmp2_data_start_recover_reply ndmp2_data_start_recover_filehist_reply; + +/* NDMP2_DATA_ABORT */ +/* no request arguments */ +struct ndmp2_data_abort_reply +{ + ndmp2_error error; +}; + +/* NDMP2_DATA_STOP */ +/* no request arguments */ +struct ndmp2_data_stop_reply +{ + ndmp2_error error; +}; + +/* NDMP2_DATA_GET_ENV */ +/* no request arguments */ +struct ndmp2_data_get_env_reply +{ + ndmp2_error error; + ndmp2_pval env<>; +}; + +/****************************/ +/* NOTIFY INTERFACE */ +/****************************/ +/* NDMP2_NOTIFY_DATA_HALTED */ +struct ndmp2_notify_data_halted_request +{ + ndmp2_data_halt_reason reason; + string text_reason<>; +}; + +/* No reply */ + +/* NDMP2_NOTIFY_CONNECTED */ +enum ndmp2_connect_reason +{ + NDMP2_CONNECTED, /* Connect sucessfully */ + NDMP2_SHUTDOWN, /* Connection shutdown */ + NDMP2_REFUSED /* reach the maximum number of connections */ +}; + +struct ndmp2_notify_connected_request +{ + ndmp2_connect_reason reason; + u_short protocol_version; + string text_reason<>; +}; + +/* NDMP2_NOTIFY_MOVER_PAUSED */ +struct ndmp2_notify_mover_paused_request +{ + ndmp2_mover_pause_reason reason; + ndmp2_u_quad seek_position; +}; +/* No reply */ + +/* NDMP2_NOTIFY_MOVER_HALTED */ +struct ndmp2_notify_mover_halted_request +{ + ndmp2_mover_halt_reason reason; + string text_reason<>; +}; +/* No reply */ + +/* NDMP2_NOTIFY_DATA_READ */ +struct ndmp2_notify_data_read_request +{ + ndmp2_u_quad offset; + ndmp2_u_quad length; +}; +/* No reply */ + +/********************************/ +/* LOG INTERFACE */ +/********************************/ +/* NDMP2_LOG_LOG */ +struct ndmp2_log_log_request +{ + string entry<>; +}; +/* No reply */ + +/* NDMP2_LOG_DEBUG */ +enum ndmp2_debug_level +{ + NDMP2_DBG_USER_INFO, + NDMP2_DBG_USER_SUMMARY, + NDMP2_DBG_USER_DETAIL, + NDMP2_DBG_DIAG_INFO, + NDMP2_DBG_DIAG_SUMMARY, + NDMP2_DBG_DIAG_DETAIL, + NDMP2_DBG_PROG_INFO, + NDMP2_DBG_PROG_SUMMARY, + NDMP2_DBG_PROG_DETAIL +}; + +struct ndmp2_log_debug_request +{ + ndmp2_debug_level level; + string message<>; +}; +/* No reply */ + +/* NDMP2_LOG_FILE */ +struct ndmp2_log_file_request +{ + string name<>; + u_short ssid; + ndmp2_error error; +}; +/* No reply */ + +/********************************/ +/* File History INTERFACE */ +/********************************/ +/* NDMP2_FH_ADD_UNIX_PATH */ +typedef string ndmp2_unix_path<>; +enum ndmp2_unix_file_type +{ + NDMP2_FILE_DIR, + NDMP2_FILE_FIFO, + NDMP2_FILE_CSPEC, + NDMP2_FILE_BSPEC, + NDMP2_FILE_REG, + NDMP2_FILE_SLINK, + NDMP2_FILE_SOCK +}; + +struct ndmp2_unix_file_stat +{ + ndmp2_unix_file_type ftype; + u_long mtime; + u_long atime; + u_long ctime; + u_long uid; + u_long gid; + u_long mode; + ndmp2_u_quad size; + ndmp2_u_quad fh_info; +}; + +struct ndmp2_fh_unix_path +{ + ndmp2_unix_path name; + ndmp2_unix_file_stat fstat; +}; + +struct ndmp2_fh_add_unix_path_request +{ + ndmp2_fh_unix_path paths<>; +}; +/* No reply */ + +/* NDMP2_FH_ADD_UNIX_DIR */ +struct ndmp2_fh_unix_dir +{ + ndmp2_unix_path name; + u_long node; + u_long parent; +}; + +struct ndmp2_fh_add_unix_dir_request +{ + ndmp2_fh_unix_dir dirs<>; +}; +/* No reply */ + +struct ndmp2_fh_unix_node +{ + ndmp2_unix_file_stat fstat; + u_long node; +}; + +struct ndmp2_fh_add_unix_node_request +{ + ndmp2_fh_unix_node nodes<>; +}; +/* No reply */ + + +/**************************************************************** +* +* End of file : ndmp.x +* +****************************************************************/ +%#endif /* !NDMOS_OPTION_NO_NDMP2 */