Imported Upstream version 3.1.0
[debian/amanda] / ndmp-src / ndmp2.x
diff --git a/ndmp-src/ndmp2.x b/ndmp-src/ndmp2.x
new file mode 100644 (file)
index 0000000..d4dea6b
--- /dev/null
@@ -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 */