--- /dev/null
+/*
+ * 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:
+ * NDMPv0, represented here, is a ficticious version
+ * used to negotiate NDMP protocol version for the
+ * remainder of the session. Early, as a connection is
+ * being set up, the version of the protocol is unknown.
+ * The first messages exchanged negotiate the protocol
+ * version, and such messages are in the NDMP format.
+ * This is different than other protocols, such as ONC RPC
+ * which negotiate version by lower layers before the
+ * objective protocol becomes involved. During the
+ * negotiation, we deem the connection to be in "v0" mode.
+ * This NDMPv0 protocol specification is the subset of
+ * the NDMP protocol(s) required for the negotiation,
+ * and necessarily must remain immutable for all time.
+ */
+
+
+/*
+ * 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.
+ *
+ */
+
+const NDMPPORT = 10000;
+
+enum ndmp0_error
+{
+ NDMP0_NO_ERR, /* No error */
+ NDMP0_NOT_SUPPORTED_ERR, /* Call is not supported */
+ NDMP0_DEVICE_BUSY_ERR, /* The device is in use */
+ NDMP0_DEVICE_OPENED_ERR, /* Another tape or scsi device
+ * is already open */
+ NDMP0_NOT_AUTHORIZED_ERR, /* connection has not been authorized*/
+ NDMP0_PERMISSION_ERR, /* some sort of permission problem */
+ NDMP0_DEV_NOT_OPEN_ERR, /* SCSI device is not open */
+ NDMP0_IO_ERR, /* I/O error */
+ NDMP0_TIMEOUT_ERR, /* command timed out */
+ NDMP0_ILLEGAL_ARGS_ERR, /* illegal arguments in request */
+ NDMP0_NO_TAPE_LOADED_ERR, /* Cannot open because there is
+ no tape loaded */
+ NDMP0_WRITE_PROTECT_ERR, /* tape cannot be open for write */
+ NDMP0_EOF_ERR, /* Command encountered EOF */
+ NDMP0_EOM_ERR, /* Command encountered EOM */
+ NDMP0_FILE_NOT_FOUND_ERR, /* File not found during restore */
+ NDMP0_BAD_FILE_ERR, /* The file descriptor is invalid */
+ NDMP0_NO_DEVICE_ERR, /* The device is not at that target */
+ NDMP0_NO_BUS_ERR, /* Invalid controller */
+ NDMP0_XDR_DECODE_ERR, /* Can't decode the request argument */
+ NDMP0_ILLEGAL_STATE_ERR, /* Call can't be done at this state */
+ NDMP0_UNDEFINED_ERR, /* Undefined Error */
+ NDMP0_XDR_ENCODE_ERR, /* Can't encode the reply argument */
+ NDMP0_NO_MEM_ERR /* no memory */
+};
+
+enum ndmp0_header_message_type
+{
+ NDMP0_MESSAGE_REQUEST,
+ NDMP0_MESSAGE_REPLY
+};
+
+enum ndmp0_message
+{
+ NDMP0_CONNECT_OPEN = 0x900, /* CONNECT INTERFACE */
+ NDMP0_CONNECT_CLOSE = 0x902,
+
+ NDMP0_NOTIFY_CONNECTED = 0x502
+};
+
+struct ndmp0_header
+{
+ u_long sequence; /* monotonically increasing */
+ u_long time_stamp; /* time stamp of message */
+ ndmp0_header_message_type message_type; /* what type of message */
+ ndmp0_message message; /* message number */
+ u_long reply_sequence; /* reply is in response to */
+ ndmp0_error error; /* communications errors */
+};
+
+/**********************/
+/* CONNECT INTERFACE */
+/**********************/
+/* NDMP0_CONNECT_OPEN */
+struct ndmp0_connect_open_request
+{
+ u_short protocol_version; /* the version of protocol supported */
+};
+
+struct ndmp0_connect_open_reply
+{
+ ndmp0_error error;
+};
+
+/* NDMP0_CONNECT_CLOSE */
+/* no request arguments */
+/* no reply arguments */
+
+/****************************/
+/* NOTIFY INTERFACE */
+/****************************/
+
+/* NDMP0_NOTIFY_CONNECTED */
+enum ndmp0_connect_reason
+{
+ NDMP0_CONNECTED, /* Connect sucessfully */
+ NDMP0_SHUTDOWN, /* Connection shutdown */
+ NDMP0_REFUSED /* reach the maximum number of connections */
+};
+
+struct ndmp0_notify_connected_request
+{
+ ndmp0_connect_reason reason;
+ u_short protocol_version;
+ string text_reason<>;
+};