/*
* 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<>;
};