Home | History | Annotate | Download | only in ndmp
      1 /*
      2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
      3  * Use is subject to license terms.
      4  */
      5 
      6 /*
      7  * BSD 3 Clause License
      8  *
      9  * Copyright (c) 2007, The Storage Networking Industry Association.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 	- Redistributions of source code must retain the above copyright
     15  *	  notice, this list of conditions and the following disclaimer.
     16  *
     17  * 	- Redistributions in binary form must reproduce the above copyright
     18  *	  notice, this list of conditions and the following disclaimer in
     19  *	  the documentation and/or other materials provided with the
     20  *	  distribution.
     21  *
     22  *	- Neither the name of The Storage Networking Industry Association (SNIA)
     23  *	  nor the names of its contributors may be used to endorse or promote
     24  *	  products derived from this software without specific prior written
     25  *	  permission.
     26  *
     27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37  * POSSIBILITY OF SUCH DAMAGE.
     38  */
     39 /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
     40 
     41 #define VER 3
     42 
     43 const NDMPV2 = 2;
     44 const NDMPV3 = 3;
     45 const NDMPV4 = 4;
     46 const NDMPVER = NDMPV4;
     47 const NDMPPORT = 10000;
     48 
     49 struct ndmp_u_quad
     50 {
     51 	u_long	high;
     52 	u_long	low;
     53 };
     54 
     55 struct ndmp_pval
     56 {
     57 	string	name<>;
     58 	string	value<>;
     59 };
     60 
     61 struct ndmp_scsi_device
     62 {
     63 	string	name<>;
     64 };
     65 
     66 struct ndmp_tape_device
     67 {
     68 	string	name<>;
     69 };
     70 
     71 enum ndmp_error
     72 {
     73 	NDMP_NO_ERR                     =  0, /* No error */
     74 	NDMP_NOT_SUPPORTED_ERR          =  1, /* Call is not supported */
     75 	NDMP_DEVICE_BUSY_ERR            =  2, /* The device is in use */
     76 	NDMP_DEVICE_OPENED_ERR          =  3, /* Another tape or scsi device is already open */
     77 	NDMP_NOT_AUTHORIZED_ERR         =  4, /* Connection has not been authorized */
     78 	NDMP_PERMISSION_ERR             =  5, /* Some sort of permission problem */
     79 	NDMP_DEV_NOT_OPEN_ERR           =  6, /* SCSI device is not open */
     80 	NDMP_IO_ERR                     =  7, /* I/O error */
     81 	NDMP_TIMEOUT_ERR                =  8, /* command timed out */
     82 	NDMP_ILLEGAL_ARGS_ERR           =  9, /* illegal arguments in request */
     83 	NDMP_NO_TAPE_LOADED_ERR         = 10, /* Cannot open because there is no tape loaded */
     84 	NDMP_WRITE_PROTECT_ERR          = 11, /* tape cannot be open for write */
     85 	NDMP_EOF_ERR                    = 12, /* Command encountered EOF */
     86 	NDMP_EOM_ERR                    = 13, /* Command encountered EOM */
     87 	NDMP_FILE_NOT_FOUND_ERR         = 14, /* File not found during restore */
     88 	NDMP_BAD_FILE_ERR               = 15, /* The file descriptor is invalid */
     89 	NDMP_NO_DEVICE_ERR              = 16, /* The device is not at that target */
     90 	NDMP_NO_BUS_ERR                 = 17, /* Invalid controller */
     91 	NDMP_XDR_DECODE_ERR             = 18, /* Can't decode the request argument */
     92 	NDMP_ILLEGAL_STATE_ERR          = 19, /* Call can't be performed at this state */
     93 	NDMP_UNDEFINED_ERR              = 20, /* Undefined Error */
     94 	NDMP_XDR_ENCODE_ERR             = 21, /* Can't encode the reply argument */
     95 	NDMP_NO_MEM_ERR                 = 22, /* No memory */
     96 
     97 	/*
     98 	 * NDMP V3
     99 	 */
    100 	NDMP_CONNECT_ERR                = 23,
    101 
    102 	/*
    103 	 * NDMP V4
    104 	 */
    105 	NDMP_SEQUENCE_NUM_ERR           = 24,
    106 	NDMP_READ_IN_PROGRESS_ERR       = 25,
    107 	NDMP_PRECONDITION_ERR           = 26,
    108 	NDMP_CLASS_NOT_SUPPORTED_ERR    = 27,
    109 	NDMP_VERSION_NOT_SUPPORTED_ERR  = 28,
    110 	NDMP_EXT_DUPL_CLASSES_ERR       = 29,
    111 	NDMP_EXT_DANDN_ILLEGAL_ERR      = 30
    112 };
    113 
    114 enum ndmp_header_message_type
    115 {
    116 	NDMP_MESSAGE_REQUEST,
    117 	NDMP_MESSAGE_REPLY
    118 };
    119 
    120 enum ndmp_message
    121 {
    122 	NDMP_CONNECT_OPEN               = 0x900,
    123 	NDMP_CONNECT_CLIENT_AUTH        = 0x901,
    124 	NDMP_CONNECT_CLOSE              = 0x902,
    125 	NDMP_CONNECT_SERVER_AUTH        = 0x903,
    126 
    127 	NDMP_CONFIG_GET_HOST_INFO       = 0x100,
    128 	NDMP_CONFIG_GET_BUTYPE_ATTR     = 0x101, 	/* NDMP V2 */
    129 	NDMP_CONFIG_GET_CONNECTION_TYPE = 0x102,
    130 	NDMP_CONFIG_GET_AUTH_ATTR       = 0x103,
    131 	NDMP_CONFIG_GET_BUTYPE_INFO     = 0x104, 	/* NDMP V3,4 */
    132 	NDMP_CONFIG_GET_FS_INFO         = 0x105,  	/* NDMP V3,4 */
    133 	NDMP_CONFIG_GET_TAPE_INFO       = 0x106,  	/* NDMP V3,4 */
    134 	NDMP_CONFIG_GET_SCSI_INFO       = 0x107,  	/* NDMP V3,4 */
    135 	NDMP_CONFIG_GET_SERVER_INFO     = 0x108,  	/* NDMP V3,4 */
    136 	NDMP_CONFIG_SET_EXT_LIST        = 0x109, 	/* NDMP V4 */
    137 	NDMP_CONFIG_GET_EXT_LIST        = 0x10A, 	/* NDMP V4 */
    138 
    139 	NDMP_SCSI_OPEN                  = 0x200,
    140 	NDMP_SCSI_CLOSE                 = 0x201,
    141 	NDMP_SCSI_GET_STATE             = 0x202,
    142 	NDMP_SCSI_SET_TARGET            = 0x203,	/* NDMP V2,3 */
    143 	NDMP_SCSI_RESET_DEVICE          = 0x204,
    144 	NDMP_SCSI_RESET_BUS             = 0x205,	/* NDMP V2,3 */
    145 	NDMP_SCSI_EXECUTE_CDB           = 0x206,
    146 
    147 	NDMP_TAPE_OPEN                  = 0x300,
    148 	NDMP_TAPE_CLOSE                 = 0x301,
    149 	NDMP_TAPE_GET_STATE             = 0x302,
    150 	NDMP_TAPE_MTIO                  = 0x303,
    151 	NDMP_TAPE_WRITE                 = 0x304,
    152 	NDMP_TAPE_READ                  = 0x305,
    153 	NDMP_TAPE_SET_RECORD_SIZE	= 0x306,	/* NDMP V1 */
    154 	NDMP_TAPE_EXECUTE_CDB           = 0x307,
    155 
    156 	NDMP_DATA_GET_STATE             = 0x400,
    157 	NDMP_DATA_START_BACKUP          = 0x401,
    158 	NDMP_DATA_START_RECOVER         = 0x402,
    159 	NDMP_DATA_ABORT                 = 0x403,
    160 	NDMP_DATA_GET_ENV               = 0x404,
    161 	NDMP_DATA_RESVD1                = 0x405,
    162 	NDMP_DATA_RESVD2                = 0x406,
    163 	NDMP_DATA_STOP                  = 0x407,
    164 	NDMP_DATA_CONTINUE		= 0x408,	/* NDMP V1 */
    165 	NDMP_DATA_LISTEN                = 0x409,
    166 	NDMP_DATA_CONNECT               = 0x40A,
    167 	NDMP_DATA_START_RECOVER_FILEHIST = 0x40B, 	/* NDMP V4 */
    168 
    169 	NDMP_NOTIFY_RESERVED            = 0x500,
    170 	NDMP_NOTIFY_DATA_HALTED         = 0x501,
    171 	NDMP_NOTIFY_CONNECTION_STATUS   = 0x502,
    172 	NDMP_NOTIFY_MOVER_HALTED        = 0x503,
    173 	NDMP_NOTIFY_MOVER_PAUSED        = 0x504,
    174 	NDMP_NOTIFY_DATA_READ           = 0x505,
    175 
    176 	_NDMP_LOG_LOG                   = 0x600, 	/* NDMP V2 */
    177 	_NDMP_LOG_DEBUG                 = 0x601, 	/* NDMP V2 */
    178 	NDMP_LOG_FILE                   = 0x602, 	/* NDMP V3,4 */
    179 	NDMP_LOG_MESSAGE                = 0x603, 	/* NDMP V3,4 */
    180 
    181 	NDMP_FH_ADD_UNIX_PATH           = 0x700, 	/* NDMP V2,3 */
    182 	NDMP_FH_ADD_UNIX_DIR            = 0x701, 	/* NDMP V2,3 */
    183 	NDMP_FH_ADD_UNIX_NODE           = 0x702, 	/* NDMP V2,3 */
    184 	NDMP_FH_ADD_FILE                = 0x703, 	/* NDMP V3,4 */
    185 	NDMP_FH_ADD_DIR                 = 0x704, 	/* NDMP V3,4 */
    186 	NDMP_FH_ADD_NODE                = 0x705, 	/* NDMP V3,4 */
    187 
    188 	NDMP_MOVER_GET_STATE            = 0xA00,
    189 	NDMP_MOVER_LISTEN               = 0xA01,
    190 	NDMP_MOVER_CONTINUE             = 0xA02,
    191 	NDMP_MOVER_ABORT                = 0xA03,
    192 	NDMP_MOVER_STOP                 = 0xA04,
    193 	NDMP_MOVER_SET_WINDOW           = 0xA05,
    194 	NDMP_MOVER_READ                 = 0xA06,
    195 	NDMP_MOVER_CLOSE                = 0xA07,
    196 	NDMP_MOVER_SET_RECORD_SIZE      = 0xA08,
    197 	NDMP_MOVER_CONNECT              = 0xA09, 	/* NDMP V3,4 */
    198 
    199 	NDMP_EXT_STANDARD_BASE          = 0x10000,
    200 
    201 	NDMP_EXT_PROPRIETARY_BASE       = 0x20000000
    202 
    203 };
    204 
    205 const NDMP_CONNECT_AUTH = NDMP_CONNECT_CLIENT_AUTH;
    206 const NDMP_MESSAGE_POST = NDMP_MESSAGE_REQUEST;
    207 
    208 struct ndmp_header
    209 {
    210 	u_long sequence;			/* Monotonically increasing number */
    211 	u_long time_stamp;			/* Time stamp of message */
    212 	ndmp_header_message_type message_type;	/* What type of message */
    213 	enum ndmp_message message;		/* Message number */
    214 	u_long reply_sequence;			/* Reply is in response to */
    215 	ndmp_error error;			/* Communications errors */
    216 };
    217 
    218 
    219 /***************************/
    220 /*  CONNECT INTERFACE (V2) */
    221 /***************************/
    222 
    223 /* NDMP_CONNECT_OPEN */
    224 struct ndmp_connect_open_request
    225 {
    226 	u_short	protocol_version;	/* the version of protocol supported */
    227 };
    228 
    229 struct ndmp_connect_open_reply
    230 {
    231 	ndmp_error	error;
    232 };
    233 
    234 /* NDMP_CONNECT_CLIENT_AUTH = NDMP_CONNECT_AUTH */
    235 enum ndmp_auth_type
    236 {
    237 	NDMP_AUTH_NONE,		/* no password is required */
    238 	NDMP_AUTH_TEXT,		/* the clear text password */
    239 	NDMP_AUTH_MD5		/* md5 */
    240 };
    241 
    242 struct ndmp_auth_text
    243 {
    244 	string	user<>;
    245 	string	password<>;
    246 };
    247 
    248 struct ndmp_auth_md5
    249 {
    250 	string	user<>;
    251 	opaque	auth_digest[16];
    252 };
    253 
    254 union ndmp_auth_data switch (enum ndmp_auth_type auth_type)
    255 {
    256 	case NDMP_AUTH_NONE:
    257 		void;
    258 	case NDMP_AUTH_TEXT:
    259 		struct ndmp_auth_text	auth_text;
    260 	case NDMP_AUTH_MD5:
    261 		struct ndmp_auth_md5	auth_md5;
    262 };
    263 
    264 struct ndmp_connect_client_auth_request
    265 {
    266 	ndmp_auth_data	auth_data;
    267 };
    268 
    269 struct ndmp_connect_client_auth_reply
    270 {
    271 	ndmp_error	error;
    272 };
    273 
    274 
    275 /* NDMP_CONNECT_CLOSE */
    276 /* no request arguments */
    277 /* no reply arguments */
    278 
    279 /* NDMP_CONNECT_SERVER_AUTH */
    280 union ndmp_auth_attr switch (enum ndmp_auth_type auth_type)
    281 {
    282 	case NDMP_AUTH_NONE:
    283 		void;
    284 	case NDMP_AUTH_TEXT:
    285 		void;
    286 	case NDMP_AUTH_MD5:
    287 		opaque	challenge[64];
    288 };
    289 
    290 struct ndmp_connect_server_auth_request
    291 {
    292 	ndmp_auth_attr	client_attr;
    293 };
    294 
    295 struct ndmp_connect_server_auth_reply
    296 {
    297 	ndmp_error	error;
    298 	ndmp_auth_data	auth_result;
    299 };
    300 
    301 
    302 /***************************/
    303 /*  CONNECT INTERFACE (V3) */
    304 /***************************/
    305 
    306 /* NDMP_CONNECT_OPEN - same as V2 */
    307 
    308 struct ndmp_auth_text_v3
    309 {
    310 	string	auth_id<>;
    311 	string	auth_password<>;
    312 
    313 };
    314 
    315 struct ndmp_auth_md5_v3
    316 {
    317 	string	auth_id<>;
    318 	opaque	auth_digest[16];
    319 };
    320 
    321 union ndmp_auth_data_v3 switch (enum ndmp_auth_type auth_type)
    322 {
    323 	case NDMP_AUTH_NONE:
    324 		void;
    325 	case NDMP_AUTH_TEXT:
    326 		struct ndmp_auth_text_v3	auth_text;
    327 	case NDMP_AUTH_MD5:
    328 		struct ndmp_auth_md5_v3	auth_md5;
    329 };
    330 
    331 struct ndmp_connect_client_auth_request_v3
    332 {
    333 	ndmp_auth_data_v3	auth_data;
    334 };
    335 
    336 struct ndmp_connect_client_auth_reply_v3
    337 {
    338 	ndmp_error	error;
    339 };
    340 
    341 /* NDMP_CONNECT_CLOSE - same as V2 */
    342 
    343 /* NDMP_CONNECT_SERVER_AUTH - same as V2 */
    344 
    345 
    346 /***************************/
    347 /*  CONNECT INTERFACE (V4) */
    348 /***************************/
    349 
    350 /* NDMP_CONNECT_OPEN - same as V3 */
    351 
    352 /* NDMP_CONNECT_CLIENT_AUTH - same as V3 */
    353 
    354 /* NDMP_CONNECT_CLOSE - same as V3 */
    355 
    356 /* NDMP_CONNECT_SERVER_AUTH - same as V3 */
    357 
    358 
    359 /*************************/
    360 /* CONFIG INTERFACE (V2) */
    361 /*************************/
    362 
    363 /* NDMP_CONFIG_GET_HOST_INFO */
    364 /* no request arguments */
    365 
    366 struct ndmp_config_get_host_info_reply
    367 {
    368 	ndmp_error	error;
    369 	string		hostname<>;	/* host name */
    370 	string		os_type<>;	/* The operating system type (i.e. SOLARIS) */
    371 	string		os_vers<>;	/* The version number of the OS (i.e. 2.5) */
    372 	string		hostid<>;
    373 	ndmp_auth_type	auth_type<>;
    374 };
    375 
    376 /* NDMP_CONFIG_GET_BUTYPE_ATTR */
    377 const NDMP_NO_BACKUP_FILELIST	= 0x0001;
    378 const NDMP_NO_BACKUP_FHINFO	= 0x0002;
    379 const NDMP_NO_RECOVER_FILELIST	= 0x0004;
    380 const NDMP_NO_RECOVER_FHINFO	= 0x0008;
    381 const NDMP_NO_RECOVER_SSID	= 0x0010;
    382 const NDMP_NO_RECOVER_INC_ONLY	= 0x0020;
    383 
    384 struct ndmp_config_get_butype_attr_request
    385 {
    386 	string	name<>;		/* backup type name */
    387 };
    388 
    389 struct ndmp_config_get_butype_attr_reply
    390 {
    391 	ndmp_error	error;
    392 	u_long		attrs;
    393 };
    394 
    395 /* NDMP_CONFIG_GET_MOVER_TYPE */
    396 /* no request arguments */
    397 
    398 enum ndmp_addr_type
    399 {
    400 	NDMP_ADDR_LOCAL    = 0,
    401 	NDMP_ADDR_TCP      = 1,
    402 	NDMP_ADDR_FC       = 2, 	/* NDMP V2,3 */
    403 	NDMP_ADDR_IPC      = 3
    404 };
    405 
    406 struct ndmp_config_get_mover_type_reply
    407 {
    408 	ndmp_error		error;
    409 	ndmp_addr_type		methods<>;
    410 };
    411 
    412 /* NDMP_CONFIG_GET_AUTH_ATTR */
    413 struct ndmp_config_get_auth_attr_request
    414 {
    415 	ndmp_auth_type	auth_type;
    416 };
    417 
    418 struct ndmp_config_get_auth_attr_reply
    419 {
    420 	ndmp_error		error;
    421 	ndmp_auth_attr		server_attr;
    422 };
    423 
    424 
    425 /*************************/
    426 /* CONFIG INTERFACE (V3) */
    427 /*************************/
    428 
    429 /* NDMP_CONFIG_GET_HOST_INFO */
    430 /* no request arguments */
    431 
    432 struct ndmp_config_get_host_info_reply_v3
    433 {
    434 	ndmp_error	error;
    435 	string		hostname<>;	/* host name */
    436 	string		os_type<>;	/* The operating system type (i.e. SOLARIS) */
    437 	string		os_vers<>;	/* The version number of the OS (i.e. 2.5) */
    438 	string		hostid<>;
    439 };
    440 
    441 /* NDMP_CONFIG_GET_CONNECTION_TYPE */
    442 /* no request arguments */
    443 
    444 struct ndmp_config_get_connection_type_reply_v3
    445 {
    446 	ndmp_error	error;
    447 	ndmp_addr_type	addr_types<>;
    448 };
    449 
    450 /* NDMP_CONFIG_GET_AUTH_ATTR - same as V2 */
    451 
    452 /* NDMP_CONFIG_GET_SERVER_INFO */
    453 /* no requset arguments */
    454 
    455 struct ndmp_config_get_server_info_reply_v3
    456 {
    457 	ndmp_error	error;
    458 	string		vendor_name<>;
    459 	string		product_name<>;
    460 	string		revision_number<>;
    461 	ndmp_auth_type	auth_type<>;
    462 };
    463 
    464 /* Backup type attributes */
    465 const NDMP_BUTYPE_BACKUP_FILE_HISTORY	 = 0x0001;	/* NDMP V2,3 */
    466 const NDMP_BUTYPE_BACKUP_FILELIST        = 0x0002;
    467 const NDMP_BUTYPE_RECOVER_FILELIST       = 0x0004;
    468 const NDMP_BUTYPE_BACKUP_DIRECT          = 0x0008;
    469 const NDMP_BUTYPE_RECOVER_DIRECT         = 0x0010;
    470 const NDMP_BUTYPE_BACKUP_INCREMENTAL     = 0x0020;
    471 const NDMP_BUTYPE_RECOVER_INCREMENTAL    = 0x0040;
    472 const NDMP_BUTYPE_BACKUP_UTF8            = 0x0080;
    473 const NDMP_BUTYPE_RECOVER_UTF8           = 0x0100;
    474 const NDMP_BUTYPE_BACKUP_FH_FILE         = 0x0200; 	/* NDMP V4 */
    475 const NDMP_BUTYPE_BACKUP_FH_DIR          = 0x0400; 	/* NDMP V4 */
    476 const NDMP_BUTYPE_RECOVER_FILEHIST       = 0x0800; 	/* NDMP V4 */
    477 const NDMP_BUTYPE_RECOVER_FH_FILE        = 0x1000; 	/* NDMP V4 */
    478 const NDMP_BUTYPE_RECOVER_FH_DIR         = 0x2000; 	/* NDMP V4 */
    479 
    480 
    481 struct ndmp_butype_info
    482 {
    483 	string		butype_name<>;
    484 	ndmp_pval	default_env<>;
    485 	u_long		attrs;
    486 };
    487 
    488 /* NDMP_CONFIG_GET_BUTYPE_INFO */
    489 /* no request arguments */
    490 
    491 struct ndmp_config_get_butype_info_reply_v3
    492 {
    493 	ndmp_error		error;
    494 	ndmp_butype_info	butype_info<>;
    495 };
    496 
    497 /* invalid bit */
    498 const	NDMP_FS_INFO_TOTAL_SIZE_INVALID 	= 0x00000001;
    499 const	NDMP_FS_INFO_USED_SIZE_INVALID		= 0x00000002;
    500 const	NDMP_FS_INFO_AVAIL_SIZE_INVALID		= 0x00000004;
    501 const	NDMP_FS_INFO_TOTAL_INODES_INVALID	= 0x00000008;
    502 const	NDMP_FS_INFO_USED_INODES_INVALID	= 0x00000010;
    503 
    504 struct ndmp_fs_info_v3
    505 {
    506 	u_long		invalid;
    507 	string		fs_type<>;
    508 	string		fs_logical_device<>;
    509 	string		fs_physical_device<>;
    510 	ndmp_u_quad	total_size;
    511 	ndmp_u_quad	used_size;
    512 	ndmp_u_quad	avail_size;
    513 	ndmp_u_quad	total_inodes;
    514 	ndmp_u_quad	used_inodes;
    515 	ndmp_pval	fs_env<>;
    516 	string		fs_status<>;
    517 };
    518 
    519 /* NDMP_CONFIG_GET_FS_INFO */
    520 /* no request arguments */
    521 
    522 struct ndmp_config_get_fs_info_reply_v3
    523 {
    524 	ndmp_error		error;
    525 	ndmp_fs_info_v3		fs_info<>;
    526 };
    527 
    528 /* NDMP_CONFIG_GET_TAPE_INFO */
    529 /* no request arguments */
    530 
    531 /* tape attributes */
    532 const NDMP_TAPE_ATTR_REWIND = 0x00000001;
    533 const NDMP_TAPE_ATTR_UNLOAD = 0x00000002;
    534 const NDMP_TAPE_ATTR_RAW    = 0x00000004;
    535 
    536 
    537 struct ndmp_device_capability_v3
    538 {
    539 	string		device<>;
    540 	u_long		attr;
    541 	ndmp_pval	capability<>;
    542 };
    543 
    544 struct ndmp_device_info_v3
    545 {
    546 	string				model<>;
    547 	ndmp_device_capability_v3	caplist<>;
    548 
    549 };
    550 struct ndmp_config_get_tape_info_reply_v3
    551 {
    552 	ndmp_error		error;
    553 	ndmp_device_info_v3	tape_info<>;
    554 
    555 };
    556 
    557 /* NDMP_CONFIG_GET_SCSI_INFO */
    558 
    559 /* jukebox attributes */
    560 struct ndmp_config_get_scsi_info_reply_v3
    561 {
    562 	ndmp_error		error;
    563 	ndmp_device_info_v3	scsi_info<>;
    564 };
    565 
    566 
    567 /*************************/
    568 /* CONFIG INTERFACE (V4) */
    569 /*************************/
    570 
    571 /* NDMP_CONFIG_GET_HOST_INFO - same as V3 */
    572 
    573 /* NDMP_CONFIG_GET_SERVER_INFO - same as V3 */
    574 
    575 /* NDMP_CONFIG_GET_CONNECTION_TYPE - same as V3 */
    576 
    577 /* NDMP_CONFIG_GET_AUTH_ATTR - same as V3 */
    578 
    579 
    580 struct ndmp_config_get_butype_info_reply_v4
    581 {
    582 	ndmp_error            error;
    583 	ndmp_butype_info      butype_info<>;
    584 };
    585 
    586 
    587 /* NDMP_CONFIG_GET_FS_INFO - same as V3 */
    588 
    589 struct ndmp_class_list
    590 {
    591 	u_short      ext_class_id;
    592 	u_short      ext_version<>;
    593 };
    594 
    595 struct ndmp_class_version
    596 {
    597 	u_short      ext_class_id;
    598 	u_short      ext_version;
    599 };
    600 
    601 struct ndmp_config_get_ext_list_reply
    602 {
    603 	ndmp_error         error;
    604 	ndmp_class_list    class_list<>;
    605 };
    606 
    607 struct ndmp_config_set_ext_list_request
    608 {
    609 	ndmp_class_version    ndmp_selected_ext<>;
    610 };
    611 
    612 struct ndmp_config_set_ext_list_reply
    613 {
    614 	ndmp_error      error;
    615 };
    616 
    617 
    618 /***********************/
    619 /* SCSI INTERFACE (V2) */
    620 /***********************/
    621 
    622 /* NDMP_SCSI_OPEN */
    623 struct ndmp_scsi_open_request
    624 {
    625 	ndmp_scsi_device	device;
    626 };
    627 
    628 struct ndmp_scsi_open_reply
    629 {
    630 	ndmp_error	error;
    631 };
    632 
    633 /* NDMP_SCSI_CLOSE */
    634 /* no request arguments */
    635 
    636 struct ndmp_scsi_close_reply
    637 {
    638 	ndmp_error	error;
    639 };
    640 
    641 /* NDMP_SCSI_GET_STATE */
    642 /* no request arguments */
    643 
    644 struct ndmp_scsi_get_state_reply
    645 {
    646 	ndmp_error	error;
    647 	short		target_controller;
    648 	short		target_id;
    649 	short		target_lun;
    650 };
    651 
    652 /* NDMP_SCSI_SET_TARGET */
    653 struct ndmp_scsi_set_target_request
    654 {
    655 	ndmp_scsi_device	device;
    656 	u_short			target_controller;
    657 	u_short			target_id;
    658 	u_short			target_lun;
    659 };
    660 
    661 struct ndmp_scsi_set_target_reply
    662 {
    663 	ndmp_error	error;
    664 };
    665 
    666 /* NDMP_SCSI_RESET_DEVICE */
    667 /* no request arguments */
    668 
    669 struct ndmp_scsi_reset_device_reply
    670 {
    671 	ndmp_error	error;
    672 };
    673 
    674 /* NDMP_SCSI_RESET_BUS */
    675 /* no request arguments */
    676 
    677 struct ndmp_scsi_reset_bus_reply
    678 {
    679 	ndmp_error	error;
    680 };
    681 
    682 /* NDMP_SCSI_EXECUTE_CDB */
    683 const NDMP_SCSI_DATA_IN		= 0x00000001;	/* Expect data from SCSI device */
    684 const NDMP_SCSI_DATA_OUT	= 0x00000002;	/* Transfer data to SCSI device */
    685 
    686 struct ndmp_execute_cdb_request
    687 {
    688 	u_long	flags;
    689 	u_long	timeout;
    690 	u_long	datain_len;		/* Set for expected datain */
    691 	opaque	cdb<>;
    692 	opaque	dataout<>;
    693 };
    694 
    695 struct ndmp_execute_cdb_reply
    696 {
    697 	ndmp_error	error;
    698 	u_char		status;		/* SCSI status bytes */
    699 	u_long		dataout_len;
    700 	opaque		datain<>;	/* SCSI datain */
    701 	opaque		ext_sense<>;	/* Extended sense data */
    702 };
    703 
    704 
    705 /***********************/
    706 /* SCSI INTERFACE (V3) */
    707 /***********************/
    708 
    709 /* NDMP_SCSI_OPEN */
    710 struct ndmp_scsi_open_request_v3
    711 {
    712 	string	device<>;
    713 };
    714 /* reply the same as V2 */
    715 
    716 
    717 /* NDMP_SCSI_CLOSE - same as V2 */
    718 
    719 /* NDMP_SCSI_GET_STATE - same as V2 */
    720 
    721 struct ndmp_scsi_set_target_request_v3
    722 {
    723 	string		device<>;
    724 	u_short		target_controller;
    725 	u_short		target_id;
    726 	u_short		target_lun;
    727 };
    728 /* reply the same as V2 */
    729 
    730 
    731 /* NDMP_SCSI_RESET_DEVICE - same as V2 */
    732 
    733 /* NDMP_SCSI_RESET_BUS - same as V2 */
    734 
    735 /* NDMP_SCSI_EXECUTE_CDB - same as V2 */
    736 
    737 
    738 /***********************/
    739 /* SCSI INTERFACE (V4) */
    740 /***********************/
    741 
    742 /* NDMP_SCSI_OPEN - same as V3 */
    743 
    744 /* NDMP_SCSI_CLOSE - same as V3 */
    745 
    746 /* NDMP_SCSI_GET_STATE - same as V3 */
    747 
    748 /* NDMP_SCSI_RESET_DEVICE - same as V3 */
    749 
    750 /* NDMP_SCSI_EXECUTE_CDB - same as V3 */
    751 
    752 
    753 /***********************/
    754 /* TAPE INTERFACE (V2) */
    755 /***********************/
    756 
    757 /* NDMP_TAPE_OPEN */
    758 enum ndmp_tape_open_mode
    759 {
    760 	NDMP_TAPE_READ_MODE,
    761 	NDMP_TAPE_WRITE_MODE,
    762 	NDMP_TAPE_RAW_MODE,				/* NDMP V4 */
    763 	NDMP_TAPE_RAW1_MODE = 0x7fffffff,		/* NDMP V3 */
    764 	NDMP_TAPE_RAW2_MODE = NDMP_TAPE_RAW_MODE	/* NDMP V3 */
    765 
    766 };
    767 
    768 struct ndmp_tape_open_request
    769 {
    770 	ndmp_tape_device	device;
    771 	ndmp_tape_open_mode	mode;
    772 };
    773 
    774 struct ndmp_tape_open_reply
    775 {
    776 	ndmp_error	error;
    777 };
    778 
    779 /* NDMP_TAPE_CLOSE */
    780 /* no request arguments */
    781 struct ndmp_tape_close_reply
    782 {
    783 	ndmp_error	error;
    784 };
    785 
    786 /* NDMP_TAPE_GET_STATE */
    787 /* no request arguments */
    788 const NDMP_TAPE_NOREWIND	= 0x0008;	/* non-rewind device */
    789 const NDMP_TAPE_WR_PROT		= 0x0010;	/* write-protected */
    790 const NDMP_TAPE_ERROR		= 0x0020;	/* media error */
    791 const NDMP_TAPE_UNLOAD		= 0x0040;	/* tape will be unloaded when the device is closed */
    792 
    793 struct ndmp_tape_get_state_reply
    794 {
    795 	ndmp_error	error;
    796 	u_long		flags;
    797 	u_long		file_num;
    798 	u_long		soft_errors;
    799 	u_long		block_size;
    800 	u_long		blockno;
    801 	ndmp_u_quad	total_space;
    802 	ndmp_u_quad	space_remain;
    803 };
    804 
    805 enum ndmp_tape_mtio_op
    806 {
    807 	NDMP_MTIO_FSF  = 0,
    808 	NDMP_MTIO_BSF  = 1,
    809 	NDMP_MTIO_FSR  = 2,
    810 	NDMP_MTIO_BSR  = 3,
    811 	NDMP_MTIO_REW  = 4,
    812 	NDMP_MTIO_EOF  = 5,
    813 	NDMP_MTIO_OFF  = 6,
    814 	NDMP_MTIO_TUR  = 7 	/* NDMP V4 */
    815 };
    816 
    817 
    818 struct ndmp_tape_mtio_request
    819 {
    820 	ndmp_tape_mtio_op	tape_op;
    821 	u_long			count;
    822 };
    823 
    824 struct ndmp_tape_mtio_reply
    825 {
    826 	ndmp_error	error;
    827 	u_long		resid_count;
    828 };
    829 
    830 /* NDMP_TAPE_WRITE */
    831 struct ndmp_tape_write_request
    832 {
    833 	opaque	data_out<>;
    834 };
    835 
    836 struct ndmp_tape_write_reply
    837 {
    838 	ndmp_error	error;
    839 	u_long		count;
    840 };
    841 
    842 /* NDMP_TAPE_READ */
    843 struct ndmp_tape_read_request
    844 {
    845 	u_long	count;
    846 };
    847 
    848 struct ndmp_tape_read_reply
    849 {
    850 	ndmp_error	error;
    851 	opaque		data_in<>;
    852 };
    853 
    854 /* NDMP_TAPE_EXECUTE_CDB */
    855 typedef ndmp_execute_cdb_request	ndmp_tape_execute_cdb_request;
    856 typedef ndmp_execute_cdb_reply		ndmp_tape_execute_cdb_reply;
    857 
    858 
    859 /***********************/
    860 /* TAPE INTERFACE (V3) */
    861 /***********************/
    862 
    863 /* NDMP_TAPE_OPEN */
    864 struct ndmp_tape_open_request_v3
    865 {
    866 	string	device<>;
    867 	ndmp_tape_open_mode	mode;
    868 };
    869 /* reply the same as V2 */
    870 
    871 
    872 /* NDMP_TAPE_CLOSE - same as V2 */
    873 
    874 /* NDMP_TAPE_GET_STATE */
    875 /* no request arguments */
    876 const NDMP_TAPE_STATE_NOREWIND	= 0x0008;	/* non-rewind device */
    877 const NDMP_TAPE_STATE_WR_PROT	= 0x0010;	/* write-protected */
    878 const NDMP_TAPE_STATE_ERROR	= 0x0020;	/* media error */
    879 const NDMP_TAPE_STATE_UNLOAD	= 0x0040;	/* tape will be unloaded when the device is closed */
    880 
    881 /* invalid bit */
    882 const NDMP_TAPE_STATE_FILE_NUM_INVALID		= 0x00000001;
    883 const NDMP_TAPE_STATE_SOFT_ERRORS_INVALID	= 0x00000002;
    884 const NDMP_TAPE_STATE_BLOCK_SIZE_INVALID	= 0x00000004;
    885 const NDMP_TAPE_STATE_BLOCKNO_INVALID		= 0x00000008;
    886 const NDMP_TAPE_STATE_TOTAL_SPACE_INVALID	= 0x00000010;
    887 const NDMP_TAPE_STATE_SPACE_REMAIN_INVALID	= 0x00000020;
    888 const NDMP_TAPE_STATE_PARTITION_INVALID		= 0x00000040;
    889 
    890 struct ndmp_tape_get_state_reply_v3
    891 {
    892 	u_long		invalid;
    893 	ndmp_error	error;
    894 	u_long		flags;
    895 	u_long		file_num;
    896 	u_long		soft_errors;
    897 	u_long		block_size;
    898 	u_long		blockno;
    899 	ndmp_u_quad	total_space;
    900 	ndmp_u_quad	space_remain;
    901 	u_long		partition;
    902 };
    903 
    904 /* NDMP_TAPE_MTIO - same as V2 */
    905 
    906 /* NDMP_TAPE_WRITE - same as V2 */
    907 
    908 /* NDMP_TAPE_READ - same as V2 */
    909 
    910 /* NDMP_TAPE_EXECUTE_CDB - same as V2 */
    911 
    912 
    913 /***********************/
    914 /* TAPE INTERFACE (V4) */
    915 /***********************/
    916 
    917 /* NDMP_TAPE_OPEN - same as V3 */
    918 
    919 /* NDMP_TAPE_CLOSE - same as V3 */
    920 
    921 struct ndmp_tape_get_state_reply_v4
    922 {
    923 	u_long       unsupported;
    924 	ndmp_error   error;
    925 	u_long       flags;
    926 	u_long       file_num;
    927 	u_long       soft_errors;
    928 	u_long       block_size;
    929 	u_long       blockno;
    930 	ndmp_u_quad  total_space;
    931 	ndmp_u_quad  space_remain;
    932 };
    933 
    934 /* NDMP_TAPE_MTIO - same as V3 */
    935 
    936 /* NDMP_TAPE_WRITE - same as V3 */
    937 
    938 /* NDMP_TAPE_READ - same as V3 */
    939 
    940 /* NDMP_TAPE_EXECUTE_CDB - same as V3 */
    941 
    942 
    943 /************************/
    944 /* MOVER INTERFACE (V2) */
    945 /************************/
    946 enum ndmp_mover_mode
    947 {
    948 	NDMP_MOVER_MODE_READ            = 0,
    949 	NDMP_MOVER_MODE_WRITE           = 1,
    950 	NDMP_MOVER_MODE_NOACTION        = 2  	/* NDMP V4 */
    951 };
    952 
    953 enum ndmp_mover_state
    954 {
    955 	NDMP_MOVER_STATE_IDLE    = 0,
    956 	NDMP_MOVER_STATE_LISTEN  = 1,
    957 	NDMP_MOVER_STATE_ACTIVE  = 2,
    958 	NDMP_MOVER_STATE_PAUSED  = 3,
    959 	NDMP_MOVER_STATE_HALTED  = 4
    960 };
    961 
    962 enum ndmp_mover_pause_reason
    963 {
    964 	NDMP_MOVER_PAUSE_NA    = 0,
    965 	NDMP_MOVER_PAUSE_EOM   = 1,
    966 	NDMP_MOVER_PAUSE_EOF   = 2,
    967 	NDMP_MOVER_PAUSE_SEEK  = 3,
    968 	NDMP_MOVER_PAUSE_MEDIA_ERROR = 4, 	/* NDMP V2,3 */
    969 	NDMP_MOVER_PAUSE_EOW  = 5
    970 };
    971 
    972 enum ndmp_mover_halt_reason
    973 {
    974 	NDMP_MOVER_HALT_NA             = 0,
    975 	NDMP_MOVER_HALT_CONNECT_CLOSED = 1,
    976 	NDMP_MOVER_HALT_ABORTED        = 2,
    977 	NDMP_MOVER_HALT_INTERNAL_ERROR = 3,
    978 	NDMP_MOVER_HALT_CONNECT_ERROR  = 4,
    979 	NDMP_MOVER_HALT_MEDIA_ERROR    = 5 	/* NDMP V4 */
    980 };
    981 
    982 
    983 /* NDMP_MOVER_GET_STATE */
    984 
    985 /* no request arguments */
    986 struct ndmp_mover_get_state_reply
    987 {
    988 	ndmp_error		error;
    989 	ndmp_mover_state	state;
    990 	ndmp_mover_pause_reason	pause_reason;
    991 	ndmp_mover_halt_reason	halt_reason;
    992 	u_long			record_size;
    993 	u_long			record_num;
    994 	ndmp_u_quad		data_written;
    995 	ndmp_u_quad		seek_position;
    996 	ndmp_u_quad		bytes_left_to_read;
    997 	ndmp_u_quad		window_offset;
    998 	ndmp_u_quad		window_length;
    999 };
   1000 
   1001 /* NDMP_MOVER_LISTEN */
   1002 
   1003 struct ndmp_tcp_addr
   1004 {
   1005 	u_long	ip_addr;
   1006 	u_short	port;
   1007 };
   1008 
   1009 union ndmp_mover_addr switch (ndmp_addr_type addr_type)
   1010 {
   1011 	case NDMP_ADDR_LOCAL:
   1012 		void;
   1013 	case NDMP_ADDR_TCP:
   1014 	  ndmp_tcp_addr	addr;
   1015 };
   1016 
   1017 struct ndmp_mover_listen_request
   1018 {
   1019 	ndmp_mover_mode		mode;
   1020 	ndmp_addr_type		addr_type;
   1021 };
   1022 
   1023 struct ndmp_mover_listen_reply
   1024 {
   1025 	ndmp_error		error;
   1026 	ndmp_mover_addr		mover;
   1027 };
   1028 
   1029 /* NDMP_MOVER_SET_RECORD_SIZE */
   1030 struct ndmp_mover_set_record_size_request
   1031 {
   1032 	u_long	len;
   1033 };
   1034 
   1035 struct ndmp_mover_set_record_size_reply
   1036 {
   1037 	ndmp_error	error;
   1038 };
   1039 
   1040 /* NDMP_MOVER_SET_WINDOW */
   1041 struct ndmp_mover_set_window_request
   1042 {
   1043 	ndmp_u_quad	offset;
   1044 	ndmp_u_quad	length;
   1045 };
   1046 
   1047 struct ndmp_mover_set_window_reply
   1048 {
   1049 	ndmp_error	error;
   1050 };
   1051 
   1052 /* NDMP_MOVER_CONTINUE */
   1053 /* no request arguments */
   1054 
   1055 struct ndmp_mover_continue_reply
   1056 {
   1057 	ndmp_error	error;
   1058 };
   1059 
   1060 
   1061 /* NDMP_MOVER_ABORT */
   1062 /* no request arguments */
   1063 struct ndmp_mover_abort_reply
   1064 {
   1065 	ndmp_error	error;
   1066 };
   1067 
   1068 /* NDMP_MOVER_STOP */
   1069 /* no request arguments */
   1070 
   1071 struct ndmp_mover_stop_reply
   1072 {
   1073 	ndmp_error	error;
   1074 };
   1075 
   1076 /* NDMP_MOVER_READ */
   1077 struct ndmp_mover_read_request
   1078 {
   1079 	ndmp_u_quad	offset;
   1080 	ndmp_u_quad	length;
   1081 };
   1082 
   1083 struct ndmp_mover_read_reply
   1084 {
   1085 	ndmp_error	error;
   1086 };
   1087 
   1088 /* NDMP_MOVER_CLOSE */
   1089 /* no request arguments */
   1090 
   1091 struct ndmp_mover_close_reply
   1092 {
   1093 	ndmp_error	error;
   1094 };
   1095 
   1096 
   1097 /************************/
   1098 /* MOVER INTERFACE (V3) */
   1099 /************************/
   1100 
   1101 /* NDMP_MOVER_STATE - same as V2 */
   1102 
   1103 /* NDMP_MOVER_PAUSE_REASON - same as V2 */
   1104 
   1105 /* NDMP_MOVER_HALT_REASON - same as V2 */
   1106 
   1107 /* NDMP_MOVER_MODE - same as V2 */
   1108 
   1109 struct ndmp_fc_addr_v3
   1110 {
   1111 	u_long	loop_id;
   1112 };
   1113 
   1114 struct ndmp_ipc_addr_v3
   1115 {
   1116 	opaque comm_data<>;
   1117 };
   1118 
   1119 union ndmp_addr_v3 switch (ndmp_addr_type addr_type)
   1120 {
   1121 	case NDMP_ADDR_LOCAL:
   1122 		void;
   1123 	case NDMP_ADDR_TCP:
   1124 		ndmp_tcp_addr		tcp_addr;
   1125 	case NDMP_ADDR_FC:
   1126 		ndmp_fc_addr_v3		fc_addr;
   1127 	case NDMP_ADDR_IPC:
   1128 		ndmp_ipc_addr_v3	ipc_addr;
   1129 
   1130 };
   1131 
   1132 %
   1133 %
   1134 %/*
   1135 % * Macros to access the port and IP address of TCP addresses.
   1136 % */
   1137 %#ifndef tcp_ip_v3
   1138 %#define tcp_ip_v3	ndmp_addr_v3_u.tcp_addr.ip_addr
   1139 %#endif /* tcp_ip_v3 */
   1140 %#ifndef tcp_port_v3
   1141 %#define tcp_port_v3	ndmp_addr_v3_u.tcp_addr.port
   1142 %#endif /* tcp_port_v3 */
   1143 
   1144 /* NDMP_MOVER_GET_STATE */
   1145 /* no request arguments */
   1146 
   1147 struct ndmp_mover_get_state_reply_v3
   1148 {
   1149 	ndmp_error		error;
   1150 	ndmp_mover_state	state;
   1151 	ndmp_mover_pause_reason	pause_reason;
   1152 	ndmp_mover_halt_reason	halt_reason;
   1153 	u_long			record_size;
   1154 	u_long			record_num;
   1155 	ndmp_u_quad		data_written;
   1156 	ndmp_u_quad		seek_position;
   1157 	ndmp_u_quad		bytes_left_to_read;
   1158 	ndmp_u_quad		window_offset;
   1159 	ndmp_u_quad		window_length;
   1160 	ndmp_addr_v3		data_connection_addr;
   1161 };
   1162 
   1163 /* NDMP_MOVER_LISTEN - same as v2 */
   1164 
   1165 struct ndmp_mover_listen_reply_v3
   1166 {
   1167 	ndmp_error	error;
   1168 	ndmp_addr_v3	data_connection_addr;
   1169 };
   1170 
   1171 /* NDMP_MOVER_CONNECT */
   1172 struct ndmp_mover_connect_request_v3
   1173 {
   1174 	ndmp_mover_mode		mode;
   1175 	ndmp_addr_v3		addr;
   1176 };
   1177 
   1178 struct ndmp_mover_connect_reply_v3
   1179 {
   1180 	ndmp_error	error;
   1181 };
   1182 
   1183 /* NDMP_MOVER_SET_RECORD_SIZE - same as V2 */
   1184 
   1185 /* NDMP_MOVER_SET_WINDOW - same as V2 */
   1186 
   1187 /* NDMP_MOVER_CONTINUE - same as V2 */
   1188 
   1189 /* NDMP_MOVER_ABORT - same as V2 */
   1190 
   1191 /* NDMP_MOVER_STOP - same as V2 */
   1192 
   1193 /* NDMP_MOVER_READ - same as V2 */
   1194 
   1195 /* NDMP_MOVER_CLOSE - same as V2 */
   1196 
   1197 
   1198 /************************/
   1199 /* MOVER INTERFACE (V4) */
   1200 /************************/
   1201 
   1202 /* NDMP_MOVER_SET_RECORD_SIZE - same as V3 */
   1203 
   1204 /* NDMP_MOVER_SET_WINDOW_SIZE - same as V3 */
   1205 
   1206 %
   1207 %
   1208 %/*
   1209 % * Macros to access the port and IP address of TCP addresses.
   1210 % */
   1211 %#ifndef tcp_addr_v4
   1212 %#define tcp_addr_v4	ndmp_addr_v4_u.tcp_addr.tcp_addr_val
   1213 %#endif /* tcp_addr_v4 */
   1214 %#ifndef tcp_ip_v4
   1215 %#define tcp_ip_v4(n)	ndmp_addr_v4_u.tcp_addr.tcp_addr_val[n].ip_addr
   1216 %#endif /* tcp_ip_v4 */
   1217 %#ifndef tcp_port_v4
   1218 %#define tcp_port_v4(n)	ndmp_addr_v4_u.tcp_addr.tcp_addr_val[n].port
   1219 %#endif /* tcp_port_v4 */
   1220 %#ifndef tcp_len_v4
   1221 %#define tcp_len_v4	ndmp_addr_v4_u.tcp_addr.tcp_addr_len
   1222 %#endif /* tcp_len_v4 */
   1223 %#ifndef tcp_env_v4
   1224 %#define tcp_env_v4(n)	ndmp_addr_v4_u.tcp_addr.tcp_addr_val[n].addr_env
   1225 %#endif /* tcp_env_v4 */
   1226 
   1227 struct ndmp_tcp_addr_v4
   1228 {
   1229 	u_long       ip_addr;
   1230 	u_short      port;
   1231 	ndmp_pval    addr_env<>;
   1232 };
   1233 
   1234 union ndmp_addr_v4
   1235 switch (ndmp_addr_type addr_type)
   1236 {
   1237 	case NDMP_ADDR_LOCAL:
   1238 		void;
   1239 	case NDMP_ADDR_TCP:
   1240 		ndmp_tcp_addr_v4  tcp_addr<>;
   1241 	case NDMP_ADDR_IPC:
   1242 		ndmp_ipc_addr_v3  ipc_addr;
   1243 };
   1244 
   1245 struct ndmp_mover_connect_request_v4
   1246 {
   1247 	ndmp_mover_mode       mode;
   1248 	ndmp_addr_v4          addr;
   1249 };
   1250 
   1251 struct ndmp_mover_listen_reply_v4
   1252 {
   1253 	ndmp_error           error;
   1254 	ndmp_addr_v4         connect_addr;
   1255 };
   1256 
   1257 /* NDMP_MOVER_READ - same as v3 */
   1258 
   1259 struct ndmp_mover_get_state_reply_v4
   1260 {
   1261 	ndmp_error               error;
   1262 	ndmp_mover_mode          mode;
   1263 	ndmp_mover_state         state;
   1264 	ndmp_mover_pause_reason  pause_reason;
   1265 	ndmp_mover_halt_reason   halt_reason;
   1266 	u_long                   record_size;
   1267 	u_long                   record_num;
   1268 	ndmp_u_quad              bytes_moved;
   1269 	ndmp_u_quad              seek_position;
   1270 	ndmp_u_quad              bytes_left_to_read;
   1271 	ndmp_u_quad              window_offset;
   1272 	ndmp_u_quad              window_length;
   1273 	ndmp_addr_v4             data_connection_addr;
   1274 };
   1275 
   1276 /* NDMP_MOVER_CONTINUE - same as V3 */
   1277 
   1278 /* NDMP_MOVER_CLOSE - same as V3 */
   1279 
   1280 /* NDMP_MOVER_ABORT - same as V3 */
   1281 
   1282 /* NDMP_MOVER_STOP - same as V3 */
   1283 
   1284 
   1285 /***********************/
   1286 /* DATA INTERFACE (V2) */
   1287 /***********************/
   1288 
   1289 /* NDMP_DATA_GET_STATE */
   1290 /* no request arguments */
   1291 
   1292 enum ndmp_data_operation
   1293 {
   1294 	NDMP_DATA_OP_NOACTION           = 0,
   1295 	NDMP_DATA_OP_BACKUP             = 1,
   1296 	NDMP_DATA_OP_RECOVER            = 2,
   1297 	NDMP_DATA_OP_RECOVER_FILEHIST   = 3  	/* NDMP V4 */
   1298 };
   1299 
   1300 enum ndmp_data_state
   1301 {
   1302 	NDMP_DATA_STATE_IDLE      = 0,
   1303 	NDMP_DATA_STATE_ACTIVE    = 1,
   1304 	NDMP_DATA_STATE_HALTED    = 2,
   1305 	NDMP_DATA_STATE_LISTEN    = 3, 		/* NDMP V3 */
   1306 	NDMP_DATA_STATE_CONNECTED = 4 		/* NDMP V3 */
   1307 };
   1308 
   1309 enum ndmp_data_halt_reason
   1310 {
   1311 	NDMP_DATA_HALT_NA             = 0,
   1312 	NDMP_DATA_HALT_SUCCESSFUL     = 1,
   1313 	NDMP_DATA_HALT_ABORTED        = 2,
   1314 	NDMP_DATA_HALT_INTERNAL_ERROR = 3,
   1315 	NDMP_DATA_HALT_CONNECT_ERROR  = 4
   1316 };
   1317 
   1318 struct ndmp_data_get_state_reply
   1319 {
   1320 	ndmp_error		error;
   1321 	ndmp_data_operation	operation;
   1322 	ndmp_data_state		state;
   1323 	ndmp_data_halt_reason	halt_reason;
   1324 	ndmp_u_quad		bytes_processed;
   1325 	ndmp_u_quad		est_bytes_remain;
   1326 	u_long			est_time_remain;
   1327 	ndmp_mover_addr		mover;
   1328 	ndmp_u_quad		read_offset;
   1329 	ndmp_u_quad		read_length;
   1330 };
   1331 
   1332 /* NDMP_DATA_START_BACKUP */
   1333 
   1334 struct ndmp_data_start_backup_request
   1335 {
   1336 	ndmp_mover_addr		mover;		/* mover to receive data */
   1337 	string			bu_type<>;	/* backup method to use */
   1338 	ndmp_pval		env<>;		/* Parameters that may modify backup */
   1339 };
   1340 
   1341 struct ndmp_data_start_backup_reply
   1342 {
   1343 	ndmp_error	error;
   1344 };
   1345 
   1346 /* NDMP_DATA_START_RECOVER */
   1347 struct ndmp_name
   1348 {
   1349 	string		name<>;
   1350 	string		dest<>;
   1351 	u_short		ssid;
   1352 	ndmp_u_quad	fh_info;
   1353 };
   1354 
   1355 struct ndmp_data_start_recover_request
   1356 {
   1357 	ndmp_mover_addr		mover;
   1358 	ndmp_pval		env<>;
   1359 	ndmp_name		nlist<>;
   1360 	string			bu_type<>;
   1361 
   1362 };
   1363 
   1364 struct ndmp_data_start_recover_reply
   1365 {
   1366 	ndmp_error	error;
   1367 };
   1368 
   1369 /* NDMP_DATA_ABORT */
   1370 /* no request arguments */
   1371 
   1372 struct ndmp_data_abort_reply
   1373 {
   1374 	ndmp_error	error;
   1375 };
   1376 
   1377 /* NDMP_DATA_STOP */
   1378 /* no request arguments */
   1379 
   1380 struct ndmp_data_stop_reply
   1381 {
   1382 	ndmp_error	error;
   1383 };
   1384 
   1385 /* NDMP_DATA_GET_ENV */
   1386 /* no request arguments */
   1387 
   1388 struct ndmp_data_get_env_reply
   1389 {
   1390 	ndmp_error	error;
   1391 	ndmp_pval	env<>;
   1392 };
   1393 /* no reply arguments */
   1394 
   1395 struct ndmp_notify_data_halted_request
   1396 {
   1397 	ndmp_data_halt_reason		reason;
   1398 	string				text_reason<>;
   1399 };
   1400 /* no reply arguments */
   1401 
   1402 
   1403 /***********************/
   1404 /* DATA INTERFACE (V3) */
   1405 /***********************/
   1406 
   1407 /* NDMP_DATA_GET_STATE */
   1408 /* no request arguments */
   1409 /* ndmp_data_operation the same as V2 */
   1410 
   1411 /* invalid bit */
   1412 const NDMP_DATA_STATE_EST_BYTES_REMAIN_INVALID	= 0x00000001;
   1413 const NDMP_DATA_STATE_EST_TIME_REMAIN_INVALID	= 0x00000002;
   1414 
   1415 struct ndmp_data_get_state_reply_v3
   1416 {
   1417 	u_long			invalid;
   1418 	ndmp_error		error;
   1419 	ndmp_data_operation	operation;
   1420 	ndmp_data_state		state;
   1421 	ndmp_data_halt_reason	halt_reason;
   1422 	ndmp_u_quad		bytes_processed;
   1423 	ndmp_u_quad		est_bytes_remain;
   1424 	u_long			est_time_remain;
   1425 	ndmp_addr_v3		data_connection_addr;
   1426 	ndmp_u_quad		read_offset;
   1427 	ndmp_u_quad		read_length;
   1428 };
   1429 
   1430 /* NDMP_DATA_START_BACKUP */
   1431 struct ndmp_data_start_backup_request_v3
   1432 {
   1433 	string		bu_type<>;	/* backup method to use */
   1434 	ndmp_pval	env<>;		/* Parameters that may modify backup */
   1435 };
   1436 
   1437 /* NDMP_DATA_START_RECOVER */
   1438 struct ndmp_name_v3
   1439 {
   1440 	string		original_path<>;
   1441 	string		destination_dir<>;
   1442 	string		new_name<>;	/* Direct access restore only */
   1443 	string		other_name<>;	/* Direct access restore only */
   1444 	ndmp_u_quad	node;		/* Direct access restore only */
   1445 	ndmp_u_quad	fh_info;	/* Direct access restore only */
   1446 };
   1447 
   1448 struct ndmp_data_start_recover_request_v3
   1449 {
   1450 	ndmp_pval	env<>;
   1451 	ndmp_name_v3	nlist<>;
   1452 	string		bu_type<>;
   1453 };
   1454 
   1455 /* NDMP_DATA_ABORT - same as V2 */
   1456 
   1457 /* NDMP_DATA_STOP - same as V2 */
   1458 
   1459 /* NDMP_DATA_GET_ENV - same as V2 */
   1460 
   1461 /* NDMP_DATA_LISTEN */
   1462 struct ndmp_data_listen_request_v3
   1463 {
   1464 	ndmp_addr_type	addr_type;
   1465 };
   1466 
   1467 struct ndmp_data_listen_reply_v3
   1468 {
   1469 	ndmp_error	error;
   1470 	ndmp_addr_v3	data_connection_addr;
   1471 };
   1472 
   1473 /* NDMP_DATA_CONNECT */
   1474 struct ndmp_data_connect_request_v3
   1475 {
   1476 	ndmp_addr_v3	addr;
   1477 };
   1478 
   1479 struct ndmp_data_connect_reply_v3
   1480 {
   1481 	ndmp_error	error;
   1482 };
   1483 
   1484 
   1485 /***********************/
   1486 /* DATA INTERFACE (V4) */
   1487 /***********************/
   1488 
   1489 struct ndmp_data_get_state_reply_v4
   1490 {
   1491 	u_long                    unsupported;
   1492 	ndmp_error                error;
   1493 	ndmp_data_operation       operation;
   1494 	ndmp_data_state           state;
   1495 	ndmp_data_halt_reason     halt_reason;
   1496 	ndmp_u_quad               bytes_processed;
   1497 	ndmp_u_quad               est_bytes_remain;
   1498 	u_long                    est_time_remain;
   1499 	ndmp_addr_v4              data_connection_addr;
   1500 	ndmp_u_quad               read_offset;
   1501 	ndmp_u_quad               read_length;
   1502 };
   1503 
   1504 struct ndmp_data_listen_reply_v4
   1505 {
   1506 	ndmp_error   error;
   1507 	ndmp_addr_v4    connect_addr;
   1508 };
   1509 
   1510 struct ndmp_data_connect_request_v4
   1511 {
   1512 	ndmp_addr_v4   addr;
   1513 };
   1514 
   1515 
   1516 /* NDMP_DATA_START_BACKUP - same as V3 */
   1517 
   1518 /* NDMP_DATA_START_RECOVER - same as V3 */
   1519 
   1520 /* NDMP_DATA_ABORT - same as V3 */
   1521 
   1522 /* NDMP_DATA_STOP - same as V3 */
   1523 
   1524 /* NDMP_DATA_GET_ENV - same as V3 */
   1525 
   1526 
   1527 /*************************/
   1528 /* NOTIFY INTERFACE (V2) */
   1529 /*************************/
   1530 
   1531 /* NDMP_NOTIFY_CONNECTED */
   1532 enum ndmp_connect_reason
   1533 {
   1534 	NDMP_CONNECTED,		/* Connect successfully */
   1535 	NDMP_SHUTDOWN,		/* Connection shutdown */
   1536 	NDMP_REFUSED		/* reach the maximum number of connections */
   1537 };
   1538 
   1539 struct ndmp_notify_connected_request
   1540 {
   1541 	ndmp_connect_reason	reason;
   1542 	u_short			protocol_version;
   1543 	string			text_reason<>;
   1544 };
   1545 
   1546 /* NDMP_NOTIFY_MOVER_PAUSED */
   1547 struct ndmp_notify_mover_paused_request
   1548 {
   1549 	ndmp_mover_pause_reason	reason;
   1550 	ndmp_u_quad		seek_position;
   1551 };
   1552 /* no reply arguments */
   1553 
   1554 /* NDMP_NOTIFY_MOVER_HALTED */
   1555 struct ndmp_notify_mover_halted_request
   1556 {
   1557 	ndmp_mover_halt_reason	reason;
   1558 	string			text_reason<>;
   1559 };
   1560 /* no reply arguments */
   1561 
   1562 /* NDMP_NOTIFY_DATA_READ */
   1563 struct ndmp_notify_data_read_request
   1564 {
   1565 	ndmp_u_quad	offset;
   1566 	ndmp_u_quad	length;
   1567 };
   1568 /* no reply arguments */
   1569 
   1570 
   1571 /*************************/
   1572 /* NOTIFY INTERFACE (V3) */
   1573 /*************************/
   1574 
   1575 /* NDMP_NOTIFY_DATA_HALTED - same as V2 */
   1576 
   1577 /* NDMP_NOTIFY_CONNECTED - same as V2 */
   1578 
   1579 /* NDMP_NOTIFY_MOVER_PAUSED - same as V2 */
   1580 
   1581 /* NDMP_NOTIFY_MOVER_HALTED - same as V2 */
   1582 
   1583 /* NDMP_NOTIFY_DATA_READ - same as V2 */
   1584 
   1585 
   1586 /*************************/
   1587 /* NOTIFY INTERFACE (V4) */
   1588 /*************************/
   1589 
   1590 struct ndmp_notify_data_halted_request_v4
   1591 {
   1592 	ndmp_data_halt_reason   reason;
   1593 };
   1594 
   1595 /* NDMP_NOTIFY_CONNECTION_STATUS - same as V3 */
   1596 
   1597 struct ndmp_notify_mover_halted_request_v4
   1598 {
   1599 	ndmp_mover_halt_reason      reason;
   1600 };
   1601 
   1602 /* NDMP_NOTIFY_MOVER_PAUSED - same as V3 */
   1603 
   1604 /* NDMP_NOTIFY_DATA_READ - same as V3 */
   1605 
   1606 
   1607 /**********************/
   1608 /* LOG INTERFACE (V2) */
   1609 /**********************/
   1610 
   1611 /* NDMP_LOG_LOG */
   1612 struct ndmp_log_log_request
   1613 {
   1614 	string	entry<>;
   1615 };
   1616 /* no reply arguments */
   1617 
   1618 /* NDMP_LOG_DEBUG */
   1619 enum ndmp_debug_level
   1620 {
   1621 	NDMP_DBG_USER_INFO,
   1622 	NDMP_DBG_USER_SUMMARY,
   1623 	NDMP_DBG_USER_DETAIL,
   1624 	NDMP_DBG_DIAG_INFO,
   1625 	NDMP_DBG_DIAG_SUMMARY,
   1626 	NDMP_DBG_DIAG_DETAIL,
   1627 	NDMP_DBG_PROG_INFO,
   1628 	NDMP_DBG_PROG_SUMMARY,
   1629 	NDMP_DBG_PROG_DETAIL
   1630 };
   1631 
   1632 struct ndmp_log_debug_request
   1633 {
   1634 	ndmp_debug_level	level;
   1635 	string			message<>;
   1636 };
   1637 /* no reply arguments */
   1638 
   1639 /* NDMP_LOG_FILE */
   1640 struct ndmp_log_file_request
   1641 {
   1642 	string		name<>;
   1643 	u_short		ssid;
   1644 	ndmp_error	error;
   1645 };
   1646 /* no reply arguments */
   1647 
   1648 
   1649 /**********************/
   1650 /* LOG INTERFACE (V3) */
   1651 /**********************/
   1652 
   1653 /* NDMP_LOG_MESSAGE */
   1654 enum ndmp_log_type
   1655 {
   1656 	NDMP_LOG_NORMAL  = 0,
   1657 	NDMP_LOG_DEBUG   = 1,
   1658 	NDMP_LOG_ERROR   = 2,
   1659 	NDMP_LOG_WARNING = 3
   1660 };
   1661 
   1662 struct ndmp_log_message_request_v3
   1663 {
   1664 	ndmp_log_type		log_type;
   1665 	u_long			message_id;
   1666 	string			entry<>;
   1667 };
   1668 /* no reply arguments */
   1669 
   1670 /* NDMP_LOG_FILE */
   1671 struct ndmp_log_file_request_v3
   1672 {
   1673 	string		name<>;
   1674 	ndmp_error	error;
   1675 };
   1676 /* no reply arguments */
   1677 
   1678 
   1679 /**********************/
   1680 /* LOG INTERFACE (V4) */
   1681 /**********************/
   1682 
   1683 enum ndmp_has_associated_message
   1684 {
   1685 	NDMP_NO_ASSOCIATED_MESSAGE     = 0,
   1686 	NDMP_HAS_ASSOCIATED_MESSAGE    = 1
   1687 };
   1688 
   1689 enum ndmp_recovery_status
   1690 {
   1691 	NDMP_RECOVERY_SUCCESSFUL                 = 0,
   1692 	NDMP_RECOVERY_FAILED_PERMISSION          = 1,
   1693 	NDMP_RECOVERY_FAILED_NOT_FOUND           = 2,
   1694 	NDMP_RECOVERY_FAILED_NO_DIRECTORY        = 3,
   1695 	NDMP_RECOVERY_FAILED_OUT_OF_MEMORY       = 4,
   1696 	NDMP_RECOVERY_FAILED_IO_ERROR            = 5,
   1697 	NDMP_RECOVERY_FAILED_UNDEFINED_ERROR     = 6,
   1698 	NDMP_RECOVERY_FAILED_FILE_PATH_EXISTS    = 7
   1699 };
   1700 
   1701 struct ndmp_log_message_request_v4
   1702 {
   1703 	ndmp_log_type      log_type;
   1704 	u_long             message_id;
   1705 	string             entry<>;
   1706 	ndmp_has_associated_message associated_message_valid;
   1707 	u_long             associated_message_sequence;
   1708 };
   1709 
   1710 struct ndmp_log_file_request_v4
   1711 {
   1712 	string                   name<>;
   1713 	ndmp_recovery_status     recovery_status;
   1714 };
   1715 
   1716 
   1717 
   1718 /*******************************/
   1719 /* FILE HISTORY INTERFACE (V2) */
   1720 /*******************************/
   1721 
   1722 /* NDMP_FH_ADD_UNIX_PATH */
   1723 typedef string ndmp_unix_path<>;
   1724 enum ndmp_file_type
   1725 {
   1726 	NDMP_FILE_DIR      = 0,
   1727 	NDMP_FILE_FIFO     = 1,
   1728 	NDMP_FILE_CSPEC    = 2,
   1729 	NDMP_FILE_BSPEC    = 3,
   1730 	NDMP_FILE_REG      = 4,
   1731 	NDMP_FILE_SLINK    = 5,
   1732 	NDMP_FILE_SOCK     = 6,
   1733 	NDMP_FILE_REGISTRY = 7,
   1734 	NDMP_FILE_OTHER    = 8
   1735 };
   1736 
   1737 struct ndmp_unix_file_stat
   1738 {
   1739 	ndmp_file_type	ftype;
   1740 	u_long			mtime;
   1741 	u_long			atime;
   1742 	u_long			ctime;
   1743 	u_long			uid;
   1744 	u_long			gid;
   1745 	u_long			mode;
   1746 	ndmp_u_quad		size;
   1747 	ndmp_u_quad		fh_info;
   1748 };
   1749 
   1750 struct ndmp_fh_unix_path
   1751 {
   1752 	ndmp_unix_path		name;
   1753 	ndmp_unix_file_stat	fstat;
   1754 };
   1755 
   1756 struct ndmp_fh_add_unix_path_request
   1757 {
   1758 	ndmp_fh_unix_path	paths<>;
   1759 };
   1760 /* no reply arguments */
   1761 
   1762 /* NDMP_FH_ADD_UNIX_DIR */
   1763 struct ndmp_fh_unix_dir
   1764 {
   1765 	ndmp_unix_path		name;
   1766 	u_long			node;
   1767 	u_long			parent;
   1768 };
   1769 
   1770 struct ndmp_fh_add_unix_dir_request
   1771 {
   1772 	ndmp_fh_unix_dir	dirs<>;
   1773 };
   1774 /* no reply arguments */
   1775 
   1776 /* NDMP_FH_ADD_UNIX_NODE */
   1777 struct ndmp_fh_unix_node
   1778 {
   1779 	ndmp_unix_file_stat	fstat;
   1780 	u_long			node;
   1781 };
   1782 
   1783 struct ndmp_fh_add_unix_node_request
   1784 {
   1785 	ndmp_fh_unix_node	nodes<>;
   1786 };
   1787 /* no reply arguments */
   1788 
   1789 
   1790 /********************************/
   1791 /* FILE HISTORY INTERFACE (V3) */
   1792 /********************************/
   1793 
   1794 /* NDMP_FH_ADD_FILE */
   1795 enum ndmp_fs_type
   1796 {
   1797 	NDMP_FS_UNIX   = 0,
   1798 	NDMP_FS_NT     = 1,
   1799 	NDMP_FS_OTHER  = 2
   1800 };
   1801 
   1802 
   1803 typedef string ndmp_path_v3<>;
   1804 struct ndmp_nt_path_v3
   1805 {
   1806 	ndmp_path_v3	nt_path;
   1807 	ndmp_path_v3	dos_path;
   1808 };
   1809 
   1810 union ndmp_file_name_v3 switch (ndmp_fs_type fs_type)
   1811 {
   1812 	case NDMP_FS_UNIX:
   1813 		ndmp_path_v3		unix_name;
   1814 	case NDMP_FS_NT:
   1815 		ndmp_nt_path_v3	nt_name;
   1816 	default:
   1817 		ndmp_path_v3		other_name;
   1818 };
   1819 
   1820 /* invalid bit */
   1821 const NDMP_FILE_STAT_ATIME_INVALID	= 0x00000001;
   1822 const NDMP_FILE_STAT_CTIME_INVALID	= 0x00000002;
   1823 const NDMP_FILE_STAT_GROUP_INVALID	= 0x00000004;
   1824 
   1825 struct ndmp_file_stat_v3
   1826 {
   1827 	u_long			invalid;
   1828 	ndmp_fs_type		fs_type;
   1829 	ndmp_file_type		ftype;
   1830 	u_long			mtime;
   1831 	u_long			atime;
   1832 	u_long			ctime;
   1833 	u_long			owner; /* uid for UNIX, owner for NT */
   1834 	u_long			group; /* gid for UNIX, NA for NT */
   1835 	u_long			fattr; /* mode for UNIX, fattr for NT */
   1836 	ndmp_u_quad		size;
   1837 	u_long			links;
   1838 };
   1839 
   1840 
   1841 /* one file could have both UNIX and NT name and attributes */
   1842 struct ndmp_file_v3
   1843 {
   1844 	ndmp_file_name_v3	names<>;
   1845 	ndmp_file_stat_v3	stats<>;
   1846 	ndmp_u_quad		node;		/* used for the direct access */
   1847 	ndmp_u_quad		fh_info;	/* used for the direct access */
   1848 };
   1849 
   1850 struct ndmp_fh_add_file_request_v3
   1851 {
   1852 	ndmp_file_v3		files<>;
   1853 };
   1854 /* no reply arguments */
   1855 
   1856 /* NDMP_FH_ADD_DIR */
   1857 
   1858 struct ndmp_dir_v3
   1859 {
   1860 	ndmp_file_name_v3	names<>;
   1861 	ndmp_u_quad		node;
   1862 	ndmp_u_quad		parent;
   1863 };
   1864 
   1865 struct ndmp_fh_add_dir_request_v3
   1866 {
   1867 	ndmp_dir_v3	dirs<>;
   1868 };
   1869 /* no reply arguments */
   1870 
   1871 /* NDMP_FH_ADD_NODE */
   1872 
   1873 struct ndmp_node_v3
   1874 {
   1875 	ndmp_file_stat_v3	stats<>;
   1876 	ndmp_u_quad		node;
   1877 	ndmp_u_quad		fh_info;
   1878 };
   1879 
   1880 struct ndmp_fh_add_node_request_v3
   1881 {
   1882 	ndmp_node_v3	nodes<>;
   1883 };
   1884 /* no reply arguments */
   1885 
   1886 
   1887 /********************************/
   1888 /* FILE HISTORY INTERFACE (V4) */
   1889 /********************************/
   1890 
   1891 /* NDMP_FH_ADD_FILE - same as V3 */
   1892 
   1893 /* NDMP_FH_ADD_DIR - same as V3 */
   1894 
   1895 /* NDMP_FH_ADD_NODE - same as V3 */
   1896 
   1897 
   1898 
   1899 /********************************/
   1900 /* NDMP requests		*/
   1901 /********************************/
   1902 /* CONNECT */
   1903 typedef ndmp_auth_text ndmp_auth_text_v2;
   1904 typedef ndmp_auth_text_v3 ndmp_auth_text_v4;
   1905 typedef ndmp_auth_md5 ndmp_auth_md5_v2;
   1906 typedef ndmp_auth_md5_v3 ndmp_auth_md5_v4;
   1907 typedef ndmp_auth_data ndmp_auth_data_v2;
   1908 typedef ndmp_auth_data_v3 ndmp_auth_data_v4;
   1909 
   1910 typedef ndmp_connect_open_request ndmp_connect_open_request_v2;
   1911 typedef ndmp_connect_open_request ndmp_connect_open_request_v3;
   1912 typedef ndmp_connect_open_request ndmp_connect_open_request_v4;
   1913 typedef ndmp_connect_open_reply ndmp_connect_open_reply_v2;
   1914 typedef ndmp_connect_open_reply ndmp_connect_open_reply_v3;
   1915 typedef ndmp_connect_open_reply ndmp_connect_open_reply_v4;
   1916 typedef ndmp_connect_client_auth_request ndmp_connect_client_auth_request_v2;
   1917 typedef ndmp_connect_client_auth_request_v3 ndmp_connect_client_auth_request_v4;
   1918 typedef ndmp_connect_client_auth_reply ndmp_connect_client_auth_reply_v2;
   1919 typedef ndmp_connect_client_auth_reply_v3 ndmp_connect_client_auth_reply_v4;
   1920 typedef ndmp_connect_server_auth_request ndmp_connect_server_auth_request_v2;
   1921 typedef ndmp_connect_server_auth_request ndmp_connect_server_auth_request_v3;
   1922 typedef ndmp_connect_server_auth_request ndmp_connect_server_auth_request_v4;
   1923 typedef ndmp_connect_server_auth_reply ndmp_connect_server_auth_reply_v2;
   1924 typedef ndmp_connect_server_auth_reply ndmp_connect_server_auth_reply_v3;
   1925 typedef ndmp_connect_server_auth_reply ndmp_connect_server_auth_reply_v4;
   1926 
   1927 
   1928 /* CONFIG */
   1929 typedef ndmp_config_get_host_info_reply ndmp_config_get_host_info_reply_v2;
   1930 typedef ndmp_config_get_host_info_reply_v3 ndmp_config_get_host_info_reply_v4;
   1931 typedef ndmp_config_get_butype_attr_request ndmp_config_get_butype_attr_request_v2;
   1932 typedef ndmp_config_get_butype_attr_reply ndmp_config_get_butype_attr_reply_v2;
   1933 typedef ndmp_config_get_mover_type_reply ndmp_config_get_mover_type_reply_v2;
   1934 typedef ndmp_config_get_auth_attr_request ndmp_config_get_auth_attr_request_v2;
   1935 typedef ndmp_config_get_auth_attr_request ndmp_config_get_auth_attr_request_v3;
   1936 typedef ndmp_config_get_auth_attr_request ndmp_config_get_auth_attr_request_v4;
   1937 typedef ndmp_config_get_auth_attr_reply ndmp_config_get_auth_attr_reply_v2;
   1938 typedef ndmp_config_get_auth_attr_reply ndmp_config_get_auth_attr_reply_v3;
   1939 typedef ndmp_config_get_auth_attr_reply ndmp_config_get_auth_attr_reply_v4;
   1940 typedef ndmp_config_get_connection_type_reply_v3 ndmp_config_get_connection_type_reply_v4;
   1941 typedef ndmp_config_get_server_info_reply_v3 ndmp_config_get_server_info_reply_v4;
   1942 typedef ndmp_fs_info_v3 ndmp_fs_info_v4;
   1943 typedef ndmp_config_get_fs_info_reply_v3 ndmp_config_get_fs_info_reply_v4;
   1944 typedef ndmp_device_info_v3 ndmp_device_info_v4;
   1945 typedef ndmp_config_get_tape_info_reply_v3  ndmp_config_get_tape_info_reply_v4;
   1946 typedef ndmp_config_get_scsi_info_reply_v3 ndmp_config_get_scsi_info_reply_v4;
   1947 typedef ndmp_config_get_ext_list_reply ndmp_config_get_ext_list_reply_v4;
   1948 typedef ndmp_config_set_ext_list_request ndmp_config_set_ext_list_request_v4;
   1949 typedef ndmp_config_set_ext_list_reply ndmp_config_set_ext_list_reply_v4;
   1950 
   1951 
   1952 /* SCSI */
   1953 typedef ndmp_scsi_open_request ndmp_scsi_open_request_v2;
   1954 typedef ndmp_scsi_open_request_v3 ndmp_scsi_open_request_v4;
   1955 typedef ndmp_scsi_open_reply ndmp_scsi_open_reply_v2;
   1956 typedef ndmp_scsi_open_reply ndmp_scsi_open_reply_v3;
   1957 typedef ndmp_scsi_open_reply ndmp_scsi_open_reply_v4;
   1958 typedef ndmp_scsi_close_reply ndmp_scsi_close_reply_v2;
   1959 typedef ndmp_scsi_close_reply ndmp_scsi_close_reply_v3;
   1960 typedef ndmp_scsi_close_reply ndmp_scsi_close_reply_v4;
   1961 typedef ndmp_scsi_get_state_reply ndmp_scsi_get_state_reply_v2;
   1962 typedef ndmp_scsi_get_state_reply ndmp_scsi_get_state_reply_v3;
   1963 typedef ndmp_scsi_get_state_reply ndmp_scsi_get_state_reply_v4;
   1964 typedef ndmp_scsi_set_target_request ndmp_scsi_set_target_request_v2;
   1965 typedef ndmp_scsi_set_target_reply ndmp_scsi_set_target_reply_v2;
   1966 typedef ndmp_scsi_set_target_reply ndmp_scsi_set_target_reply_v3;
   1967 typedef ndmp_scsi_reset_device_reply ndmp_scsi_reset_device_reply_v2;
   1968 typedef ndmp_scsi_reset_device_reply ndmp_scsi_reset_device_reply_v3;
   1969 typedef ndmp_scsi_reset_device_reply ndmp_scsi_reset_device_reply_v4;
   1970 typedef ndmp_scsi_reset_bus_reply ndmp_scsi_reset_bus_reply_v2;
   1971 typedef ndmp_scsi_reset_bus_reply ndmp_scsi_reset_bus_reply_v3;
   1972 typedef ndmp_execute_cdb_request ndmp_scsi_execute_cdb_request_v2;
   1973 typedef ndmp_execute_cdb_request ndmp_scsi_execute_cdb_request_v3;
   1974 typedef ndmp_execute_cdb_request ndmp_scsi_execute_cdb_request_v4;
   1975 typedef ndmp_execute_cdb_reply ndmp_scsi_execute_cdb_reply_v2;
   1976 typedef ndmp_execute_cdb_reply ndmp_scsi_execute_cdb_reply_v3;
   1977 typedef ndmp_execute_cdb_reply ndmp_scsi_execute_cdb_reply_v4;
   1978 
   1979 
   1980 /* TAPE */
   1981 typedef ndmp_tape_open_request ndmp_tape_open_request_v2;
   1982 typedef ndmp_tape_open_request_v3 ndmp_tape_open_request_v4;
   1983 typedef ndmp_tape_open_reply ndmp_tape_open_reply_v2;
   1984 typedef ndmp_tape_open_reply ndmp_tape_open_reply_v3;
   1985 typedef ndmp_tape_open_reply ndmp_tape_open_reply_v4;
   1986 typedef ndmp_tape_close_reply ndmp_tape_close_reply_v2;
   1987 typedef ndmp_tape_close_reply ndmp_tape_close_reply_v3;
   1988 typedef ndmp_tape_close_reply ndmp_tape_close_reply_v4;
   1989 typedef ndmp_tape_get_state_reply ndmp_tape_get_state_reply_v2;
   1990 typedef ndmp_tape_mtio_request ndmp_tape_mtio_request_v2;
   1991 typedef ndmp_tape_mtio_request ndmp_tape_mtio_request_v3;
   1992 typedef ndmp_tape_mtio_request ndmp_tape_mtio_request_v4;
   1993 typedef ndmp_tape_mtio_reply ndmp_tape_mtio_reply_v2;
   1994 typedef ndmp_tape_mtio_reply ndmp_tape_mtio_reply_v3;
   1995 typedef ndmp_tape_mtio_reply ndmp_tape_mtio_reply_v4;
   1996 typedef ndmp_tape_write_request ndmp_tape_write_request_v2;
   1997 typedef ndmp_tape_write_request ndmp_tape_write_request_v3;
   1998 typedef ndmp_tape_write_request ndmp_tape_write_request_v4;
   1999 typedef ndmp_tape_write_reply ndmp_tape_write_reply_v2;
   2000 typedef ndmp_tape_write_reply ndmp_tape_write_reply_v3;
   2001 typedef ndmp_tape_write_reply ndmp_tape_write_reply_v4;
   2002 typedef ndmp_tape_read_request ndmp_tape_read_request_v2;
   2003 typedef ndmp_tape_read_request ndmp_tape_read_request_v3;
   2004 typedef ndmp_tape_read_request ndmp_tape_read_request_v4;
   2005 typedef ndmp_tape_read_reply ndmp_tape_read_reply_v2;
   2006 typedef ndmp_tape_read_reply ndmp_tape_read_reply_v3;
   2007 typedef ndmp_tape_read_reply ndmp_tape_read_reply_v4;
   2008 typedef ndmp_tape_execute_cdb_request ndmp_tape_execute_cdb_request_v2;
   2009 typedef ndmp_tape_execute_cdb_request ndmp_tape_execute_cdb_request_v3;
   2010 typedef ndmp_tape_execute_cdb_request ndmp_tape_execute_cdb_request_v4;
   2011 typedef ndmp_tape_execute_cdb_reply ndmp_tape_execute_cdb_reply_v2;
   2012 typedef ndmp_tape_execute_cdb_reply ndmp_tape_execute_cdb_reply_v3;
   2013 typedef ndmp_tape_execute_cdb_reply ndmp_tape_execute_cdb_reply_v4;
   2014 
   2015 
   2016 /* MOVER */
   2017 typedef ndmp_fc_addr_v3 ndmp_fc_addr;
   2018 typedef ndmp_ipc_addr_v3 ndmp_ipc_addr;
   2019 typedef ndmp_mover_get_state_reply ndmp_mover_get_state_reply_v2;
   2020 typedef ndmp_mover_listen_request ndmp_mover_listen_request_v2;
   2021 typedef ndmp_mover_listen_request ndmp_mover_listen_request_v3;
   2022 typedef ndmp_mover_listen_request ndmp_mover_listen_request_v4;
   2023 typedef ndmp_mover_listen_reply ndmp_mover_listen_reply_v2;
   2024 typedef ndmp_mover_set_record_size_request ndmp_mover_set_record_size_request_v2;
   2025 typedef ndmp_mover_set_record_size_request ndmp_mover_set_record_size_request_v3;
   2026 typedef ndmp_mover_set_record_size_request ndmp_mover_set_record_size_request_v4;
   2027 typedef ndmp_mover_set_record_size_reply ndmp_mover_set_record_size_reply_v2;
   2028 typedef ndmp_mover_set_record_size_reply ndmp_mover_set_record_size_reply_v3;
   2029 typedef ndmp_mover_set_record_size_reply ndmp_mover_set_record_size_reply_v4;
   2030 typedef ndmp_mover_set_window_request ndmp_mover_set_window_request_v2;
   2031 typedef ndmp_mover_set_window_request ndmp_mover_set_window_request_v3;
   2032 typedef ndmp_mover_set_window_request ndmp_mover_set_window_request_v4;
   2033 typedef ndmp_mover_set_window_reply ndmp_mover_set_window_reply_v2;
   2034 typedef ndmp_mover_set_window_reply ndmp_mover_set_window_reply_v3;
   2035 typedef ndmp_mover_set_window_reply ndmp_mover_set_window_reply_v4;
   2036 typedef ndmp_mover_continue_reply ndmp_mover_continue_reply_v2;
   2037 typedef ndmp_mover_continue_reply ndmp_mover_continue_reply_v3;
   2038 typedef ndmp_mover_continue_reply ndmp_mover_continue_reply_v4;
   2039 typedef ndmp_mover_abort_reply ndmp_mover_abort_reply_v2;
   2040 typedef ndmp_mover_abort_reply ndmp_mover_abort_reply_v3;
   2041 typedef ndmp_mover_abort_reply ndmp_mover_abort_reply_v4;
   2042 typedef ndmp_mover_stop_reply ndmp_mover_stop_reply_v2;
   2043 typedef ndmp_mover_stop_reply ndmp_mover_stop_reply_v3;
   2044 typedef ndmp_mover_stop_reply ndmp_mover_stop_reply_v4;
   2045 typedef ndmp_mover_read_request ndmp_mover_read_request_v2;
   2046 typedef ndmp_mover_read_request ndmp_mover_read_request_v3;
   2047 typedef ndmp_mover_read_request ndmp_mover_read_request_v4;
   2048 typedef ndmp_mover_read_reply ndmp_mover_read_reply_v2;
   2049 typedef ndmp_mover_read_reply ndmp_mover_read_reply_v3;
   2050 typedef ndmp_mover_read_reply ndmp_mover_read_reply_v4;
   2051 typedef ndmp_mover_close_reply ndmp_mover_close_reply_v2;
   2052 typedef ndmp_mover_close_reply ndmp_mover_close_reply_v3;
   2053 typedef ndmp_mover_close_reply ndmp_mover_close_reply_v4;
   2054 typedef ndmp_mover_connect_reply_v3 ndmp_mover_connect_reply_v4;
   2055 
   2056 
   2057 /* DATA */
   2058 typedef ndmp_data_get_state_reply ndmp_data_get_state_reply_v2;
   2059 typedef ndmp_data_start_backup_request ndmp_data_start_backup_request_v2;
   2060 typedef ndmp_data_start_backup_request_v3 ndmp_data_start_backup_request_v4;
   2061 typedef ndmp_data_start_backup_reply ndmp_data_start_backup_reply_v2;
   2062 typedef ndmp_data_start_backup_reply ndmp_data_start_backup_reply_v3;
   2063 typedef ndmp_data_start_backup_reply ndmp_data_start_backup_reply_v4;
   2064 typedef ndmp_name ndmp_name_v2;
   2065 typedef ndmp_data_start_recover_request ndmp_data_start_recover_request_v2;
   2066 typedef ndmp_data_start_recover_request_v3 ndmp_data_start_recover_request_v4;
   2067 typedef ndmp_data_start_recover_reply ndmp_data_start_recover_reply_v2;
   2068 typedef ndmp_data_start_recover_reply ndmp_data_start_recover_reply_v3;
   2069 typedef ndmp_data_start_recover_reply ndmp_data_start_recover_reply_v4;
   2070 typedef ndmp_data_start_recover_reply ndmp_data_start_recover_filehist_reply_v4;
   2071 typedef ndmp_data_abort_reply ndmp_data_abort_reply_v2;
   2072 typedef ndmp_data_abort_reply ndmp_data_abort_reply_v3;
   2073 typedef ndmp_data_abort_reply ndmp_data_abort_reply_v4;
   2074 typedef ndmp_data_stop_reply ndmp_data_stop_reply_v2;
   2075 typedef ndmp_data_stop_reply ndmp_data_stop_reply_v3;
   2076 typedef ndmp_data_stop_reply ndmp_data_stop_reply_v4;
   2077 typedef ndmp_data_get_env_reply ndmp_data_get_env_reply_v2;
   2078 typedef ndmp_data_get_env_reply ndmp_data_get_env_reply_v3;
   2079 typedef ndmp_data_get_env_reply ndmp_data_get_env_reply_v4;
   2080 typedef ndmp_data_listen_request_v3 ndmp_data_listen_request_v4;
   2081 typedef ndmp_data_connect_reply_v3 ndmp_data_connect_reply_v4;
   2082 
   2083 
   2084 /* NOTIFY */
   2085 typedef ndmp_notify_data_halted_request ndmp_notify_data_halted_request_v2;
   2086 typedef ndmp_notify_data_halted_request ndmp_notify_data_halted_request_v3;
   2087 typedef ndmp_notify_connected_request ndmp_notify_connection_status_request_v2;
   2088 typedef ndmp_notify_connected_request ndmp_notify_connection_status_request_v3;
   2089 typedef ndmp_notify_connected_request ndmp_notify_connection_status_request_v4;
   2090 typedef ndmp_notify_mover_paused_request ndmp_notify_mover_paused_request_v2;
   2091 typedef ndmp_notify_mover_paused_request ndmp_notify_mover_paused_request_v3;
   2092 typedef ndmp_notify_mover_paused_request ndmp_notify_mover_paused_request_v4;
   2093 typedef ndmp_notify_mover_halted_request ndmp_notify_mover_halted_request_v2;
   2094 typedef ndmp_notify_mover_halted_request ndmp_notify_mover_halted_request_v3;
   2095 typedef ndmp_notify_data_read_request ndmp_notify_data_read_request_v2;
   2096 typedef ndmp_notify_data_read_request ndmp_notify_data_read_request_v3;
   2097 typedef ndmp_notify_data_read_request ndmp_notify_data_read_request_v4;
   2098 
   2099 
   2100 /* LOG */
   2101 typedef ndmp_log_log_request ndmp_log_log_request_v2;
   2102 typedef ndmp_log_log_request ndmp_log_log_request_v3;
   2103 typedef ndmp_log_log_request ndmp_log_log_request_v4;
   2104 typedef ndmp_log_debug_request ndmp_log_debug_request_v2;
   2105 typedef ndmp_log_debug_request ndmp_log_debug_request_v3;
   2106 typedef ndmp_log_debug_request ndmp_log_debug_request_v4;
   2107 typedef ndmp_log_file_request ndmp_log_file_request_v2;
   2108 
   2109 
   2110 /* FILE HISTORY */
   2111 typedef ndmp_file_v3 ndmp_file;
   2112 typedef ndmp_dir_v3 ndmp_dir;
   2113 typedef ndmp_node_v3 ndmp_node;
   2114 typedef ndmp_fh_add_unix_path_request ndmp_fh_add_unix_path_request_v2;
   2115 typedef ndmp_fh_add_unix_path_request ndmp_fh_add_unix_path_request_v3;
   2116 typedef ndmp_fh_add_file_request_v3 ndmp_fh_add_file_request_v4;
   2117 typedef ndmp_fh_add_unix_dir_request ndmp_fh_add_unix_dir_request_v2;
   2118 typedef ndmp_fh_add_unix_dir_request ndmp_fh_add_unix_dir_request_v3;
   2119 typedef ndmp_fh_add_dir_request_v3 ndmp_fh_add_dir_request_v4;
   2120 typedef ndmp_fh_add_unix_node_request ndmp_fh_add_unix_node_request_v2;
   2121 typedef ndmp_fh_add_unix_node_request ndmp_fh_add_unix_node_request_v3;
   2122 typedef ndmp_fh_add_node_request_v3 ndmp_fh_add_node_request_v4;
   2123 
   2124 
   2125 
   2126 
   2127 
   2128 
   2129 
   2130 
   2131 
   2132 
   2133 
   2134 
   2135 
   2136 
   2137 
   2138 
   2139 
   2140 
   2141 
   2142 
   2143 
   2144 
   2145 
   2146 
   2147 
   2148 
   2149 
   2150 
   2151 
   2152 
   2153 
   2154 
   2155 
   2156 
   2157 
   2158 
   2159 
   2160