/*
* 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:
*
*/
/*
* ndmp3.x
*
* Description : NDMP protocol rpcgen file.
*
* Copyright (c) 1999 Intelliguard Software, Network Appliance.
* All Rights Reserved.
*
* $Id: ndmp.x,v 1.11 1998/05/26 03:52:12 tim Exp $
*/
%#ifndef NDMOS_OPTION_NO_NDMP3
const NDMP3VER = 3;
const NDMP3PORT = 10000;
%#define ndmp3_u_quad unsigned long long
%extern bool_t xdr_ndmp3_u_quad();
struct _ndmp3_u_quad
{
u_long high;
u_long low;
};
struct ndmp3_pval
{
string name<>;
string value<>;
};
enum ndmp3_error
{
NDMP3_NO_ERR, /* No error */
NDMP3_NOT_SUPPORTED_ERR, /* Call is not supported */
NDMP3_DEVICE_BUSY_ERR, /* The device is in use */
NDMP3_DEVICE_OPENED_ERR, /* Another tape or scsi device
* is already open */
NDMP3_NOT_AUTHORIZED_ERR, /* connection has not been authorized*/
NDMP3_PERMISSION_ERR, /* some sort of permission problem */
NDMP3_DEV_NOT_OPEN_ERR, /* SCSI device is not open */
NDMP3_IO_ERR, /* I/O error */
NDMP3_TIMEOUT_ERR, /* command timed out */
NDMP3_ILLEGAL_ARGS_ERR, /* illegal arguments in request */
NDMP3_NO_TAPE_LOADED_ERR, /* Cannot open because there is
* no tape loaded */
NDMP3_WRITE_PROTECT_ERR, /* tape cannot be open for write */
NDMP3_EOF_ERR, /* Command encountered EOF */
NDMP3_EOM_ERR, /* Command encountered EOM */
NDMP3_FILE_NOT_FOUND_ERR, /* File not found during restore */
NDMP3_BAD_FILE_ERR, /* The file descriptor is invalid */
NDMP3_NO_DEVICE_ERR, /* The device is not at that target */
NDMP3_NO_BUS_ERR, /* Invalid controller */
NDMP3_XDR_DECODE_ERR, /* Can't decode the request argument */
NDMP3_ILLEGAL_STATE_ERR, /* Call can't be done at this state */
NDMP3_UNDEFINED_ERR, /* Undefined Error */
NDMP3_XDR_ENCODE_ERR, /* Can't encode the reply argument */
NDMP3_NO_MEM_ERR, /* no memory */
NDMP3_CONNECT_ERR /* Error connecting to another
* NDMP server */
};
enum ndmp3_header_message_type
{
NDMP3_MESSAGE_REQUEST,
NDMP3_MESSAGE_REPLY
};
enum ndmp3_message
{
NDMP3_CONNECT_OPEN = 0x900, /* CONNECT INTERFACE */
NDMP3_CONNECT_CLIENT_AUTH = 0x901,
NDMP3_CONNECT_CLOSE = 0x902,
NDMP3_CONNECT_SERVER_AUTH = 0x903,
NDMP3_CONFIG_GET_HOST_INFO = 0x100, /* CONFIG INTERFACE */
NDMP3_CONFIG_GET_CONNECTION_TYPE = 0x102, /* NDMP2_CONFIG_GET_MOVER_TYPE on v2*/
NDMP3_CONFIG_GET_AUTH_ATTR = 0x103,
NDMP3_CONFIG_GET_BUTYPE_INFO = 0x104, /* new from v3 */
NDMP3_CONFIG_GET_FS_INFO = 0x105, /* new from v3 */
NDMP3_CONFIG_GET_TAPE_INFO = 0x106, /* new from v3 */
NDMP3_CONFIG_GET_SCSI_INFO = 0x107, /* new from v3 */
NDMP3_CONFIG_GET_SERVER_INFO =0x108, /* new from v3 */
NDMP3_SCSI_OPEN = 0x200, /* SCSI INTERFACE */
NDMP3_SCSI_CLOSE = 0x201,
NDMP3_SCSI_GET_STATE = 0x202,
NDMP3_SCSI_SET_TARGET = 0x203,
NDMP3_SCSI_RESET_DEVICE = 0x204,
NDMP3_SCSI_RESET_BUS = 0x205,
NDMP3_SCSI_EXECUTE_CDB = 0x206,
NDMP3_TAPE_OPEN = 0x300, /* TAPE INTERFACE */
NDMP3_TAPE_CLOSE = 0x301,
NDMP3_TAPE_GET_STATE = 0x302,
NDMP3_TAPE_MTIO = 0x303,
NDMP3_TAPE_WRITE = 0x304,
NDMP3_TAPE_READ = 0x305,
NDMP3_TAPE_EXECUTE_CDB = 0x307,
NDMP3_DATA_GET_STATE = 0x400, /* DATA INTERFACE */
NDMP3_DATA_START_BACKUP = 0x401,
NDMP3_DATA_START_RECOVER = 0x402,
NDMP3_DATA_ABORT = 0x403,
NDMP3_DATA_GET_ENV = 0x404,
NDMP3_DATA_STOP = 0x407,
NDMP3_DATA_LISTEN = 0x409, /* new from V3 */
NDMP3_DATA_CONNECT = 0x40a, /* new from V3 */
NDMP3_DATA_START_RECOVER_FILEHIST = 0x40b, /* same as V3.1 */
NDMP3_NOTIFY_DATA_HALTED =0x501,/* NOTIFY INTERFACE */
NDMP3_NOTIFY_CONNECTED = 0x502,
NDMP3_NOTIFY_MOVER_HALTED = 0x503,
NDMP3_NOTIFY_MOVER_PAUSED = 0x504,
NDMP3_NOTIFY_DATA_READ =0x505,
NDMP3_LOG_FILE = 0x602, /* LOGGING INTERFACE */
NDMP3_LOG_MESSAGE = 0x603, /* new from v3 */
NDMP3_FH_ADD_FILE = 0x703, /* FILE HISTORY INTERFACE */
NDMP3_FH_ADD_DIR = 0x704,
NDMP3_FH_ADD_NODE = 0x705,
NDMP3_MOVER_GET_STATE = 0xa00, /* MOVER INTERFACE */
NDMP3_MOVER_LISTEN = 0xa01,
NDMP3_MOVER_CONTINUE = 0xa02,
NDMP3_MOVER_ABORT = 0xa03,
NDMP3_MOVER_STOP = 0xa04,
NDMP3_MOVER_SET_WINDOW = 0xa05,
NDMP3_MOVER_READ = 0xa06,
NDMP3_MOVER_CLOSE =0xa07,
NDMP3_MOVER_SET_RECORD_SIZE =0xa08,
NDMP3_MOVER_CONNECT =0xa09, /* new from V3 */
NDMP3_VENDORS_BASE = 0xf000, /* Reserved for the vendor
* specific usage
* from 0xf000 to 0xfeff */
NDMP3_RESERVED_BASE = 0xff00 /* Reserved for prototyping
* from 0xff00 to 0xffff */
};
struct ndmp3_header
{
u_long sequence; /* monotonically increasing */
u_long time_stamp; /* time stamp of message */
ndmp3_header_message_type message_type; /* what type of message */
ndmp3_message message; /* message number */
u_long reply_sequence; /* reply is in response to */
ndmp3_error error; /* communications errors */
};
/**********************/
/* CONNECT INTERFACE */
/**********************/
/* NDMP3_CONNECT_OPEN */
struct ndmp3_connect_open_request
{
u_short protocol_version; /* the version of protocol supported */
};
struct ndmp3_connect_open_reply
{
ndmp3_error error;
};
/* NDMP3_CONNECT_CLIENT_AUTH */
enum ndmp3_auth_type
{
NDMP3_AUTH_NONE, /* no password is required */
NDMP3_AUTH_TEXT, /* the clear text password */
NDMP3_AUTH_MD5 /* md5 */
};
struct ndmp3_auth_text
{
string auth_id<>;
string auth_password<>;
};
struct ndmp3_auth_md5
{
string auth_id<>;
opaque auth_digest[16];
};
union ndmp3_auth_data switch (enum ndmp3_auth_type auth_type)
{
case NDMP3_AUTH_NONE:
void;
case NDMP3_AUTH_TEXT:
struct ndmp3_auth_text auth_text;
case NDMP3_AUTH_MD5:
struct ndmp3_auth_md5 auth_md5;
};
struct ndmp3_connect_client_auth_request
{
ndmp3_auth_data auth_data;
};
struct ndmp3_connect_client_auth_reply
{
ndmp3_error error;
};
/* NDMP3_CONNECT_CLOSE */
/* no request arguments */
/* no reply arguments */
/* NDMP3_CONNECT_SERVER_AUTH */
union ndmp3_auth_attr switch (enum ndmp3_auth_type auth_type)
{
case NDMP3_AUTH_NONE:
void;
case NDMP3_AUTH_TEXT:
void;
case NDMP3_AUTH_MD5:
opaque challenge[64];
};
struct ndmp3_connect_server_auth_request
{
ndmp3_auth_attr client_attr;
};
struct ndmp3_connect_server_auth_reply
{
ndmp3_error error;
ndmp3_auth_data server_result;
};
/********************/
/* CONFIG INTERFACE */
/********************/
/* NDMP3_CONFIG_GET_HOST_INFO */
/* no request arguments */
struct ndmp3_config_get_host_info_reply
{
ndmp3_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<>;
};
enum ndmp3_addr_type
{
NDMP3_ADDR_LOCAL,
NDMP3_ADDR_TCP,
NDMP3_ADDR_FC,
NDMP3_ADDR_IPC
};
/* NDMP3_CONFIG_GET_CONNECTION_TYPE */
/* no request arguments */
struct ndmp3_config_get_connection_type_reply
{
ndmp3_error error;
ndmp3_addr_type addr_types<>;
};
/* NDMP3_CONFIG_GET_AUTH_ATTR */
struct ndmp3_config_get_auth_attr_request
{
ndmp3_auth_type auth_type;
};
struct ndmp3_config_get_auth_attr_reply
{
ndmp3_error error;
ndmp3_auth_attr server_attr;
};
/* NDMP3_CONFIG_GET_SERVER_INFO */
/* no requset arguments */
struct ndmp3_config_get_server_info_reply
{
ndmp3_error error;
string vendor_name<>;
string product_name<>;
string revision_number<>;
ndmp3_auth_type auth_type<>;
};
/* backup type attributes */
const NDMP3_BUTYPE_BACKUP_FILE_HISTORY = 0x0001;
const NDMP3_BUTYPE_BACKUP_FILELIST = 0x0002;
const NDMP3_BUTYPE_RECOVER_FILELIST = 0x0004;
const NDMP3_BUTYPE_BACKUP_DIRECT = 0x0008;
const NDMP3_BUTYPE_RECOVER_DIRECT = 0x0010;
const NDMP3_BUTYPE_BACKUP_INCREMENTAL = 0x0020;
const NDMP3_BUTYPE_RECOVER_INCREMENTAL = 0x0040;
const NDMP3_BUTYPE_BACKUP_UTF8 = 0x0080;
const NDMP3_BUTYPE_RECOVER_UTF8 = 0x0100;
const NDMP3_BUTYPE_RECOVER_FILE_HISTORY = 0x0200;
struct ndmp3_butype_info
{
string butype_name<>;
ndmp3_pval default_env<>;
u_long attrs;
};
/* NDMP3_CONFIG_GET_BUTYPE_INFO */
/* no request arguments */
struct ndmp3_config_get_butype_info_reply
{
ndmp3_error error;
ndmp3_butype_info butype_info<>;
};
/* invalid bit */
const NDMP3_FS_INFO_TOTAL_SIZE_INVALID = 0x00000001;
const NDMP3_FS_INFO_USED_SIZE_INVALID = 0x00000002;
const NDMP3_FS_INFO_AVAIL_SIZE_INVALID = 0x00000004;
const NDMP3_FS_INFO_TOTAL_INODES_INVALID = 0x00000008;
const NDMP3_FS_INFO_USED_INODES_INVALID = 0x00000010;
struct ndmp3_fs_info
{
u_long invalid;
string fs_type<>;
string fs_logical_device<>;
string fs_physical_device<>;
ndmp3_u_quad total_size;
ndmp3_u_quad used_size;
ndmp3_u_quad avail_size;
ndmp3_u_quad total_inodes;
ndmp3_u_quad used_inodes;
ndmp3_pval fs_env<>;
string fs_status<>;
};
/* NDMP3_CONFIG_GET_FS_INFO */
/* no request arguments */
struct ndmp3_config_get_fs_info_reply
{
ndmp3_error error;
ndmp3_fs_info fs_info<>;
};
/* NDMP3_CONFIG_GET_TAPE_INFO */
/* no request arguments */
/* tape attributes */
const NDMP3_TAPE_ATTR_REWIND = 0x00000001;
const NDMP3_TAPE_ATTR_UNLOAD = 0x00000002;
struct ndmp3_device_capability
{
string device<>;
u_long attr;
ndmp3_pval capability<>;
};
struct ndmp3_device_info
{
string model<>;
ndmp3_device_capability caplist<>;
};
struct ndmp3_config_get_tape_info_reply
{
ndmp3_error error;
ndmp3_device_info tape_info<>;
};
/* NDMP3_CONFIG_GET_SCSI_INFO */
/* jukebox attributes */
struct ndmp3_config_get_scsi_info_reply
{
ndmp3_error error;
ndmp3_device_info scsi_info<>;
};
/******************/
/* SCSI INTERFACE */
/******************/
/* NDMP3_SCSI_OPEN */
struct ndmp3_scsi_open_request
{
string device<>;
};
struct ndmp3_scsi_open_reply
{
ndmp3_error error;
};
/* NDMP3_SCSI_CLOSE */
/* no request arguments */
struct ndmp3_scsi_close_reply
{
ndmp3_error error;
};
/* NDMP3_SCSI_GET_STATE */
/* no request arguments */
struct ndmp3_scsi_get_state_reply
{
ndmp3_error error;
short target_controller;
short target_id;
short target_lun;
};
/* NDMP3_SCSI_SET_TARGET */
struct ndmp3_scsi_set_target_request
{
string device<>;
u_short target_controller;
u_short target_id;
u_short target_lun;
};
struct ndmp3_scsi_set_target_reply
{
ndmp3_error error;
};
/* NDMP3_SCSI_RESET_DEVICE */
/* no request arguments */
struct ndmp3_scsi_reset_device_reply
{
ndmp3_error error;
};
/* NDMP3_SCSI_RESET_BUS */
/* no request arguments */
struct ndmp3_scsi_reset_bus_reply
{
ndmp3_error error;
};
/* NDMP3_SCSI_EXECUTE_CDB */
const NDMP3_SCSI_DATA_IN = 0x00000001; /* Expect data from SCSI device */
const NDMP3_SCSI_DATA_OUT = 0x00000002; /* Transfer data to SCSI device */
struct ndmp3_execute_cdb_request
{
u_long flags;
u_long timeout;
u_long datain_len; /* Set for expected datain */
opaque cdb<>;
opaque dataout<>;
};
struct ndmp3_execute_cdb_reply
{
ndmp3_error error;
u_char status; /* SCSI status bytes */
u_long dataout_len;
opaque datain<>; /* SCSI datain */
opaque ext_sense<>; /* Extended sense data */
};
typedef ndmp3_execute_cdb_request ndmp3_scsi_execute_cdb_request;
typedef ndmp3_execute_cdb_reply ndmp3_scsi_execute_cdb_reply;
/******************/
/* TAPE INTERFACE */
/******************/
/* NDMP3_TAPE_OPEN */
enum ndmp3_tape_open_mode
{
NDMP3_TAPE_READ_MODE,
NDMP3_TAPE_RDWR_MODE
};
struct ndmp3_tape_open_request
{
string device<>;
ndmp3_tape_open_mode mode;
};
struct ndmp3_tape_open_reply
{
ndmp3_error error;
};
/* NDMP3_TAPE_CLOSE */
/* no request arguments */
struct ndmp3_tape_close_reply
{
ndmp3_error error;
};
/*NDMP3_TAPE_GET_STATE */
/* no request arguments */
const NDMP3_TAPE_STATE_NOREWIND = 0x0008; /* non-rewind device */
const NDMP3_TAPE_STATE_WR_PROT = 0x0010; /* write-protected */
const NDMP3_TAPE_STATE_ERROR = 0x0020; /* media error */
const NDMP3_TAPE_STATE_UNLOAD = 0x0040; /* tape will be unloaded when
* the device is closed */
/* invalid bit */
const NDMP3_TAPE_STATE_FILE_NUM_INVALID = 0x00000001;
const NDMP3_TAPE_STATE_SOFT_ERRORS_INVALID = 0x00000002;
const NDMP3_TAPE_STATE_BLOCK_SIZE_INVALID = 0x00000004;
const NDMP3_TAPE_STATE_BLOCKNO_INVALID = 0x00000008;
const NDMP3_TAPE_STATE_TOTAL_SPACE_INVALID = 0x00000010;
const NDMP3_TAPE_STATE_SPACE_REMAIN_INVALID = 0x00000020;
const NDMP3_TAPE_STATE_PARTITION_INVALID = 0x00000040;
struct ndmp3_tape_get_state_reply
{
u_long invalid;
ndmp3_error error;
u_long flags;
u_long file_num;
u_long soft_errors;
u_long block_size;
u_long blockno;
ndmp3_u_quad total_space;
ndmp3_u_quad space_remain;
u_long partition;
};
/* NDMP3_TAPE_MTIO */
enum ndmp3_tape_mtio_op
{
NDMP3_MTIO_FSF,
NDMP3_MTIO_BSF,
NDMP3_MTIO_FSR,
NDMP3_MTIO_BSR,
NDMP3_MTIO_REW,
NDMP3_MTIO_EOF,
NDMP3_MTIO_OFF
};
struct ndmp3_tape_mtio_request
{
ndmp3_tape_mtio_op tape_op;
u_long count;
};
struct ndmp3_tape_mtio_reply
{
ndmp3_error error;
u_long resid_count;
};
/* NDMP3_TAPE_WRITE */
struct ndmp3_tape_write_request
{
opaque data_out<>;
};
struct ndmp3_tape_write_reply
{
ndmp3_error error;
u_long count;
};
/* NDMP3_TAPE_READ */
struct ndmp3_tape_read_request
{
u_long count;
};
struct ndmp3_tape_read_reply
{
ndmp3_error error;
opaque data_in<>;
};
/* NDMP3_TAPE_EXECUTE_CDB */
typedef ndmp3_execute_cdb_request ndmp3_tape_execute_cdb_request;
typedef ndmp3_execute_cdb_reply ndmp3_tape_execute_cdb_reply;
/********************************/
/* MOVER INTERFACE */
/********************************/
/* NDMP3_MOVER_GET_STATE */
enum ndmp3_mover_state
{
NDMP3_MOVER_STATE_IDLE,
NDMP3_MOVER_STATE_LISTEN,
NDMP3_MOVER_STATE_ACTIVE,
NDMP3_MOVER_STATE_PAUSED,
NDMP3_MOVER_STATE_HALTED
};
enum ndmp3_mover_pause_reason
{
NDMP3_MOVER_PAUSE_NA,
NDMP3_MOVER_PAUSE_EOM,
NDMP3_MOVER_PAUSE_EOF,
NDMP3_MOVER_PAUSE_SEEK,
NDMP3_MOVER_PAUSE_MEDIA_ERROR,
NDMP3_MOVER_PAUSE_EOW
};
enum ndmp3_mover_halt_reason
{
NDMP3_MOVER_HALT_NA,
NDMP3_MOVER_HALT_CONNECT_CLOSED,
NDMP3_MOVER_HALT_ABORTED,
NDMP3_MOVER_HALT_INTERNAL_ERROR,
NDMP3_MOVER_HALT_CONNECT_ERROR
};
/* mover address */
enum ndmp3_mover_mode
{
NDMP3_MOVER_MODE_READ, /* read from data connection; write to tape */
NDMP3_MOVER_MODE_WRITE /* write to data connection; read from tape */
};
struct ndmp3_tcp_addr
{
u_long ip_addr;
u_short port;
};
struct ndmp3_fc_addr
{
u_long loop_id;
};
struct ndmp3_ipc_addr
{
opaque comm_data<>;
};
union ndmp3_addr switch (ndmp3_addr_type addr_type)
{
case NDMP3_ADDR_LOCAL:
void;
case NDMP3_ADDR_TCP:
ndmp3_tcp_addr tcp_addr;
case NDMP3_ADDR_FC:
ndmp3_fc_addr fc_addr;
case NDMP3_ADDR_IPC:
ndmp3_ipc_addr ipc_addr;
};
/* no request arguments */
struct ndmp3_mover_get_state_reply
{
ndmp3_error error;
ndmp3_mover_state state;
ndmp3_mover_pause_reason pause_reason;
ndmp3_mover_halt_reason halt_reason;
u_long record_size;
u_long record_num;
ndmp3_u_quad data_written;
ndmp3_u_quad seek_position;
ndmp3_u_quad bytes_left_to_read;
ndmp3_u_quad window_offset;
ndmp3_u_quad window_length;
ndmp3_addr data_connection_addr;
};
/* NDMP3_MOVER_LISTEN */
struct ndmp3_mover_listen_request
{
ndmp3_mover_mode mode;
ndmp3_addr_type addr_type;
};
struct ndmp3_mover_listen_reply
{
ndmp3_error error;
ndmp3_addr data_connection_addr;
};
/* NDMP3_MOVER_CONNECT */
struct ndmp3_mover_connect_request
{
ndmp3_mover_mode mode;
ndmp3_addr addr;
};
struct ndmp3_mover_connect_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_SET_RECORD_SIZE */
struct ndmp3_mover_set_record_size_request
{
u_long len;
};
struct ndmp3_mover_set_record_size_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_SET_WINDOW */
struct ndmp3_mover_set_window_request
{
ndmp3_u_quad offset;
ndmp3_u_quad length;
};
struct ndmp3_mover_set_window_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_CONTINUE */
/* no request arguments */
struct ndmp3_mover_continue_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_ABORT */
/* no request arguments */
struct ndmp3_mover_abort_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_STOP */
/* no request arguments */
struct ndmp3_mover_stop_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_READ */
struct ndmp3_mover_read_request
{
ndmp3_u_quad offset;
ndmp3_u_quad length;
};
struct ndmp3_mover_read_reply
{
ndmp3_error error;
};
/* NDMP3_MOVER_CLOSE */
/* no request arguments */
struct ndmp3_mover_close_reply
{
ndmp3_error error;
};
/********************************/
/* DATA INTERFACE */
/********************************/
/* NDMP3_DATA_GET_STATE */
/* no request arguments */
enum ndmp3_data_operation
{
NDMP3_DATA_OP_NOACTION,
NDMP3_DATA_OP_BACKUP,
NDMP3_DATA_OP_RESTORE,
NDMP3_DATA_OP_RESTORE_FILEHIST
};
enum ndmp3_data_state
{
NDMP3_DATA_STATE_IDLE,
NDMP3_DATA_STATE_ACTIVE,
NDMP3_DATA_STATE_HALTED,
NDMP3_DATA_STATE_LISTEN,
NDMP3_DATA_STATE_CONNECTED
};
enum ndmp3_data_halt_reason
{
NDMP3_DATA_HALT_NA,
NDMP3_DATA_HALT_SUCCESSFUL,
NDMP3_DATA_HALT_ABORTED,
NDMP3_DATA_HALT_INTERNAL_ERROR,
NDMP3_DATA_HALT_CONNECT_ERROR
};
/* invalid bit */
const NDMP3_DATA_STATE_EST_BYTES_REMAIN_INVALID = 0x00000001;
const NDMP3_DATA_STATE_EST_TIME_REMAIN_INVALID = 0x00000002;
struct ndmp3_data_get_state_reply
{
u_long invalid;
ndmp3_error error;
ndmp3_data_operation operation;
ndmp3_data_state state;
ndmp3_data_halt_reason halt_reason;
ndmp3_u_quad bytes_processed;
ndmp3_u_quad est_bytes_remain;
u_long est_time_remain;
ndmp3_addr data_connection_addr;
ndmp3_u_quad read_offset;
ndmp3_u_quad read_length;
};
/* NDMP3_DATA_START_BACKUP */
struct ndmp3_data_start_backup_request
{
string bu_type<>; /* backup method to use */
ndmp3_pval env<>; /* Parameters that may modify backup */
};
struct ndmp3_data_start_backup_reply
{
ndmp3_error error;
};
/* NDMP3_DATA_START_RECOVER */
struct ndmp3_name
{
string original_path<>;
string destination_dir<>;
string new_name<>; /* Direct access restore only */
string other_name<>; /* Direct access restore only */
ndmp3_u_quad node; /* Direct access restore only */
ndmp3_u_quad fh_info; /* Direct access restore only */
};
struct ndmp3_data_start_recover_request
{
ndmp3_pval env<>;
ndmp3_name nlist<>;
string bu_type<>;
};
struct ndmp3_data_start_recover_reply
{
ndmp3_error error;
};
/* NDMP3_DATA_START_RECOVER_FILEHIST */
typedef ndmp3_data_start_recover_request ndmp3_data_start_recover_filehist_request;
typedef ndmp3_data_start_recover_reply ndmp3_data_start_recover_filehist_reply;
/* NDMP3_DATA_ABORT */
/* no request arguments */
struct ndmp3_data_abort_reply
{
ndmp3_error error;
};
/* NDMP3_DATA_STOP */
/* no request arguments */
struct ndmp3_data_stop_reply
{
ndmp3_error error;
};
/* NDMP3_DATA_GET_ENV */
/* no request arguments */
struct ndmp3_data_get_env_reply
{
ndmp3_error error;
ndmp3_pval env<>;
};
/* NDMP3_DATA_LISTEN */
struct ndmp3_data_listen_request
{
ndmp3_addr_type addr_type;
};
struct ndmp3_data_listen_reply
{
ndmp3_error error;
ndmp3_addr data_connection_addr;
};
/* NDMP3_DATA_CONNECT */
struct ndmp3_data_connect_request
{
ndmp3_addr addr;
};
struct ndmp3_data_connect_reply
{
ndmp3_error error;
};
/****************************************/
/* NOTIFY INTERFACE */
/****************************************/
/* NDMP3_NOTIFY_DATA_HALTED */
struct ndmp3_notify_data_halted_request
{
ndmp3_data_halt_reason reason;
string text_reason<>;
};
/* NDMP3_NOTIFY_CONNECTED */
enum ndmp3_connect_reason
{
NDMP3_CONNECTED, /* Connect sucessfully */
NDMP3_SHUTDOWN, /* Connection shutdown */
NDMP3_REFUSED /* reach the maximum number of connections */
};
struct ndmp3_notify_connected_request
{
ndmp3_connect_reason reason;
u_short protocol_version;
string text_reason<>;
};
/* NDMP3_NOTIFY_MOVER_PAUSED */
struct ndmp3_notify_mover_paused_request
{
ndmp3_mover_pause_reason reason;
ndmp3_u_quad seek_position;
};
/* No reply */
/* NDMP3_NOTIFY_MOVER_HALTED */
struct ndmp3_notify_mover_halted_request
{
ndmp3_mover_halt_reason reason;
string text_reason<>;
};
/* No reply */
/* NDMP3_NOTIFY_DATA_READ */
struct ndmp3_notify_data_read_request
{
ndmp3_u_quad offset;
ndmp3_u_quad length;
};
/* No reply */
/********************************/
/* LOG INTERFACE */
/********************************/
/* NDMP3_LOG_MESSAGE */
enum ndmp3_log_type
{
NDMP3_LOG_NORMAL,
NDMP3_LOG_DEBUG,
NDMP3_LOG_ERROR,
NDMP3_LOG_WARNING
};
struct ndmp3_log_message_request
{
ndmp3_log_type log_type;
u_long message_id;
string entry<>;
};
/* No reply */
/* NDMP3_LOG_FILE */
struct ndmp3_log_file_request
{
string name<>;
ndmp3_error error;
};
/* No reply */
/*****************************/
/* File History INTERFACE */
/*****************************/
/* NDMP3_FH_ADD_FILE */
enum ndmp3_fs_type
{
NDMP3_FS_UNIX, /* UNIX */
NDMP3_FS_NT, /* NT */
NDMP3_FS_OTHER
};
typedef string ndmp3_path<>;
struct ndmp3_nt_path
{
ndmp3_path nt_path;
ndmp3_path dos_path;
};
union ndmp3_file_name switch (ndmp3_fs_type fs_type)
{
case NDMP3_FS_UNIX:
ndmp3_path unix_name;
case NDMP3_FS_NT:
ndmp3_nt_path nt_name;
default:
ndmp3_path other_name;
};
enum ndmp3_file_type
{
NDMP3_FILE_DIR,
NDMP3_FILE_FIFO,
NDMP3_FILE_CSPEC,
NDMP3_FILE_BSPEC,
NDMP3_FILE_REG,
NDMP3_FILE_SLINK,
NDMP3_FILE_SOCK,
NDMP3_FILE_REGISTRY,
NDMP3_FILE_OTHER
};
/* invalid bit */
const NDMP3_FILE_STAT_ATIME_INVALID = 0x00000001;
const NDMP3_FILE_STAT_CTIME_INVALID = 0x00000002;
const NDMP3_FILE_STAT_GROUP_INVALID = 0x00000004;
struct ndmp3_file_stat
{
u_long invalid;
ndmp3_fs_type fs_type;
ndmp3_file_type ftype;
u_long mtime;
u_long atime;
u_long ctime;
u_long owner; /* uid for UNIX, owner for NT */
u_long group; /* gid for UNIX, NA for NT */
u_long fattr; /* mode for UNIX, fattr for NT */
ndmp3_u_quad size;
u_long links;
};
/* one file could have both UNIX and NT name and attributes */
struct ndmp3_file
{
ndmp3_file_name names<>;
ndmp3_file_stat stats<>;
ndmp3_u_quad node; /* used for the direct access */
ndmp3_u_quad fh_info;/* used for the direct access */
};
struct ndmp3_fh_add_file_request
{
ndmp3_file files<>;
};
/* No reply */
/* NDMP3_FH_ADD_DIR */
struct ndmp3_dir
{
ndmp3_file_name names<>;
ndmp3_u_quad node;
ndmp3_u_quad parent;
};
struct ndmp3_fh_add_dir_request
{
ndmp3_dir dirs<>;
};
/* No reply */
/* NDMP3_FH_ADD_NODE */
struct ndmp3_node
{
ndmp3_file_stat stats<>;
ndmp3_u_quad node;
ndmp3_u_quad fh_info;
};
struct ndmp3_fh_add_node_request
{
ndmp3_node nodes<>;
};
/* No reply */
%#endif /* !NDMOS_OPTION_NO_NDMP3 */