1 /*
2  * Copyright (c) 2000
3  *	Traakan, Inc., Los Altos, CA
4  *	All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice unmodified, this list of conditions, and the following
11  *    disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 /*
30  * Project:  NDMJOB
31  * Ident:    $Id: $
32  *
33  * Description:
34  *
35  */
36 
37 
38 
39 /*
40  * ndmp3.x
41  *
42  * Description	 : NDMP protocol rpcgen file.
43  *
44  * Copyright (c) 1999 Intelliguard Software, Network Appliance.
45  * All Rights Reserved.
46  *
47  * $Id: ndmp.x,v 1.11 1998/05/26 03:52:12 tim Exp $
48  */
49 
50 %#ifndef NDMOS_OPTION_NO_NDMP3
51 
52 const NDMP3VER = 3;
53 const NDMP3PORT = 10000;
54 
55 %#define ndmp3_u_quad unsigned long long
56 %extern bool_t xdr_ndmp3_u_quad();
57 
58 struct _ndmp3_u_quad
59 {
60 	u_long		high;
61 	u_long		low;
62 };
63 
64 struct ndmp3_pval
65 {
66 	string		name<>;
67 	string		value<>;
68 };
69 
70 enum ndmp3_error
71 {
72 	NDMP3_NO_ERR,			/* No error */
73 	NDMP3_NOT_SUPPORTED_ERR,	/* Call is not supported */
74 	NDMP3_DEVICE_BUSY_ERR,		/* The device is in use */
75 	NDMP3_DEVICE_OPENED_ERR,	/* Another tape or scsi device
76 					 * is already open */
77 	NDMP3_NOT_AUTHORIZED_ERR,	/* connection has not been authorized*/
78 	NDMP3_PERMISSION_ERR,		/* some sort of permission problem */
79 	NDMP3_DEV_NOT_OPEN_ERR,		/* SCSI device is not open */
80 	NDMP3_IO_ERR,			/* I/O error */
81 	NDMP3_TIMEOUT_ERR,		/* command timed out */
82 	NDMP3_ILLEGAL_ARGS_ERR,		/* illegal arguments in request */
83 	NDMP3_NO_TAPE_LOADED_ERR,	/* Cannot open because there is
84 					 * no tape loaded */
85 	NDMP3_WRITE_PROTECT_ERR,	/* tape cannot be open for write */
86 	NDMP3_EOF_ERR,			/* Command encountered EOF */
87 	NDMP3_EOM_ERR,			/* Command encountered EOM */
88 	NDMP3_FILE_NOT_FOUND_ERR,	/* File not found during restore */
89 	NDMP3_BAD_FILE_ERR,		/* The file descriptor is invalid */
90 	NDMP3_NO_DEVICE_ERR,		/* The device is not at that target */
91 	NDMP3_NO_BUS_ERR,		/* Invalid controller */
92 	NDMP3_XDR_DECODE_ERR,		/* Can't decode the request argument */
93 	NDMP3_ILLEGAL_STATE_ERR,	/* Call can't be done at this state */
94 	NDMP3_UNDEFINED_ERR,		/* Undefined Error */
95 	NDMP3_XDR_ENCODE_ERR,		/* Can't encode the reply argument */
96 	NDMP3_NO_MEM_ERR,		/* no memory */
97 	NDMP3_CONNECT_ERR		/* Error connecting to another
98 					 * NDMP server */
99 };
100 
101 enum ndmp3_header_message_type
102 {
103 	NDMP3_MESSAGE_REQUEST,
104 	NDMP3_MESSAGE_REPLY
105 };
106 
107 enum ndmp3_message
108 {
109 	NDMP3_CONNECT_OPEN = 0x900,	/* CONNECT INTERFACE */
110 	NDMP3_CONNECT_CLIENT_AUTH = 0x901,
111 	NDMP3_CONNECT_CLOSE = 0x902,
112 	NDMP3_CONNECT_SERVER_AUTH = 0x903,
113 
114 	NDMP3_CONFIG_GET_HOST_INFO = 0x100, /* CONFIG INTERFACE */
115 	NDMP3_CONFIG_GET_CONNECTION_TYPE = 0x102, /* NDMP2_CONFIG_GET_MOVER_TYPE on v2*/
116 	NDMP3_CONFIG_GET_AUTH_ATTR = 0x103,
117 	NDMP3_CONFIG_GET_BUTYPE_INFO = 0x104,	/* new from v3 */
118 	NDMP3_CONFIG_GET_FS_INFO = 0x105,	/* new from v3 */
119 	NDMP3_CONFIG_GET_TAPE_INFO = 0x106,	/* new from v3 */
120 	NDMP3_CONFIG_GET_SCSI_INFO = 0x107,	/* new from v3 */
121 	NDMP3_CONFIG_GET_SERVER_INFO =0x108,	/* new from v3 */
122 
123 	NDMP3_SCSI_OPEN = 0x200,	/* SCSI INTERFACE */
124 	NDMP3_SCSI_CLOSE = 0x201,
125 	NDMP3_SCSI_GET_STATE = 0x202,
126 	NDMP3_SCSI_SET_TARGET = 0x203,
127 	NDMP3_SCSI_RESET_DEVICE = 0x204,
128 	NDMP3_SCSI_RESET_BUS = 0x205,
129 	NDMP3_SCSI_EXECUTE_CDB = 0x206,
130 
131 	NDMP3_TAPE_OPEN = 0x300,	/* TAPE INTERFACE */
132 	NDMP3_TAPE_CLOSE = 0x301,
133 	NDMP3_TAPE_GET_STATE = 0x302,
134 	NDMP3_TAPE_MTIO = 0x303,
135 	NDMP3_TAPE_WRITE = 0x304,
136 	NDMP3_TAPE_READ = 0x305,
137 	NDMP3_TAPE_EXECUTE_CDB = 0x307,
138 
139 	NDMP3_DATA_GET_STATE = 0x400,	/* DATA INTERFACE */
140 	NDMP3_DATA_START_BACKUP = 0x401,
141 	NDMP3_DATA_START_RECOVER = 0x402,
142 	NDMP3_DATA_ABORT = 0x403,
143 	NDMP3_DATA_GET_ENV = 0x404,
144 	NDMP3_DATA_STOP = 0x407,
145 	NDMP3_DATA_LISTEN = 0x409,	/* new from V3 */
146 	NDMP3_DATA_CONNECT = 0x40a,	/* new from V3 */
147 	NDMP3_DATA_START_RECOVER_FILEHIST = 0x40b, /* same as V3.1 */
148 
149 	NDMP3_NOTIFY_DATA_HALTED =0x501,/* NOTIFY INTERFACE */
150 	NDMP3_NOTIFY_CONNECTED = 0x502,
151 	NDMP3_NOTIFY_MOVER_HALTED = 0x503,
152 	NDMP3_NOTIFY_MOVER_PAUSED = 0x504,
153 	NDMP3_NOTIFY_DATA_READ =0x505,
154 
155 	NDMP3_LOG_FILE = 0x602,		/* LOGGING INTERFACE */
156 	NDMP3_LOG_MESSAGE = 0x603,	/* new from v3 */
157 
158 	NDMP3_FH_ADD_FILE = 0x703,	/* FILE HISTORY INTERFACE */
159 	NDMP3_FH_ADD_DIR = 0x704,
160 	NDMP3_FH_ADD_NODE = 0x705,
161 
162 	NDMP3_MOVER_GET_STATE = 0xa00,	/* MOVER INTERFACE */
163 	NDMP3_MOVER_LISTEN = 0xa01,
164 	NDMP3_MOVER_CONTINUE = 0xa02,
165 	NDMP3_MOVER_ABORT = 0xa03,
166 	NDMP3_MOVER_STOP = 0xa04,
167 	NDMP3_MOVER_SET_WINDOW = 0xa05,
168 	NDMP3_MOVER_READ = 0xa06,
169 	NDMP3_MOVER_CLOSE =0xa07,
170 	NDMP3_MOVER_SET_RECORD_SIZE =0xa08,
171 	NDMP3_MOVER_CONNECT =0xa09,	/* new from V3 */
172 
173 
174 	NDMP3_VENDORS_BASE = 0xf000,	/* Reserved for the vendor
175 					 * specific usage
176 					 * from 0xf000 to 0xfeff */
177 
178 	NDMP3_RESERVED_BASE = 0xff00	/* Reserved for prototyping
179 					 * from 0xff00 to 0xffff */
180 };
181 
182 struct ndmp3_header
183 {
184 	u_long			sequence;	/* monotonically increasing */
185 	u_long			time_stamp;	/* time stamp of message */
186 	ndmp3_header_message_type message_type;	/* what type of message */
187 	ndmp3_message		message;	/* message number */
188 	u_long			reply_sequence;	/* reply is in response to */
189 	ndmp3_error		error;		/* communications errors */
190 };
191 
192 /**********************/
193 /*  CONNECT INTERFACE */
194 /**********************/
195 
196 /* NDMP3_CONNECT_OPEN */
197 struct ndmp3_connect_open_request
198 {
199 	u_short	protocol_version;	/* the version of protocol supported */
200 };
201 
202 struct ndmp3_connect_open_reply
203 {
204 	ndmp3_error	error;
205 };
206 
207 /* NDMP3_CONNECT_CLIENT_AUTH */
208 enum ndmp3_auth_type
209 {
210 	NDMP3_AUTH_NONE,		/* no password is required */
211 	NDMP3_AUTH_TEXT,		/* the clear text password */
212 	NDMP3_AUTH_MD5			/* md5 */
213 };
214 
215 struct ndmp3_auth_text
216 {
217 	string		auth_id<>;
218 	string		auth_password<>;
219 
220 };
221 
222 struct ndmp3_auth_md5
223 {
224 	string		auth_id<>;
225 	opaque		auth_digest[16];
226 };
227 
228 union ndmp3_auth_data switch (enum ndmp3_auth_type auth_type)
229 {
230     case NDMP3_AUTH_NONE:
231 	void;
232     case NDMP3_AUTH_TEXT:
233 	struct ndmp3_auth_text	auth_text;
234     case NDMP3_AUTH_MD5:
235 	struct ndmp3_auth_md5	auth_md5;
236 };
237 
238 struct ndmp3_connect_client_auth_request
239 {
240 	ndmp3_auth_data	auth_data;
241 };
242 
243 struct ndmp3_connect_client_auth_reply
244 {
245 	ndmp3_error	error;
246 };
247 
248 
249 /* NDMP3_CONNECT_CLOSE */
250 /* no request arguments */
251 /* no reply arguments */
252 
253 /* NDMP3_CONNECT_SERVER_AUTH */
254 union ndmp3_auth_attr switch (enum ndmp3_auth_type auth_type)
255 {
256     case NDMP3_AUTH_NONE:
257 	void;
258     case NDMP3_AUTH_TEXT:
259 	void;
260     case NDMP3_AUTH_MD5:
261 	opaque	challenge[64];
262 };
263 
264 struct ndmp3_connect_server_auth_request
265 {
266 	ndmp3_auth_attr	client_attr;
267 };
268 
269 struct ndmp3_connect_server_auth_reply
270 {
271 	ndmp3_error		error;
272 	ndmp3_auth_data	server_result;
273 };
274 
275 
276 /********************/
277 /* CONFIG INTERFACE */
278 /********************/
279 
280 /* NDMP3_CONFIG_GET_HOST_INFO */
281 /* no request arguments */
282 struct ndmp3_config_get_host_info_reply
283 {
284 	ndmp3_error	error;
285 	string		hostname<>;	/* host name */
286 	string		os_type<>;	/* The O/S type (e.g. SOLARIS) */
287 	string		os_vers<>;	/* The O/S version (e.g. 2.5) */
288 	string		hostid<>;
289 };
290 
291 enum ndmp3_addr_type
292 {
293 	NDMP3_ADDR_LOCAL,
294 	NDMP3_ADDR_TCP,
295 	NDMP3_ADDR_FC,
296 	NDMP3_ADDR_IPC
297 };
298 
299 /* NDMP3_CONFIG_GET_CONNECTION_TYPE */
300 /* no request arguments */
301 struct ndmp3_config_get_connection_type_reply
302 {
303 	ndmp3_error	error;
304 	ndmp3_addr_type	addr_types<>;
305 };
306 
307 /* NDMP3_CONFIG_GET_AUTH_ATTR */
308 struct ndmp3_config_get_auth_attr_request
309 {
310 	ndmp3_auth_type	auth_type;
311 };
312 
313 struct ndmp3_config_get_auth_attr_reply
314 {
315 	ndmp3_error	error;
316 	ndmp3_auth_attr	server_attr;
317 };
318 
319 /* NDMP3_CONFIG_GET_SERVER_INFO */
320 /* no requset arguments */
321 struct ndmp3_config_get_server_info_reply
322 {
323 	ndmp3_error	error;
324 	string		vendor_name<>;
325 	string		product_name<>;
326 	string		revision_number<>;
327 	ndmp3_auth_type	auth_type<>;
328 };
329 
330 /* backup type attributes */
331 const NDMP3_BUTYPE_BACKUP_FILE_HISTORY	= 0x0001;
332 const NDMP3_BUTYPE_BACKUP_FILELIST	= 0x0002;
333 const NDMP3_BUTYPE_RECOVER_FILELIST	= 0x0004;
334 const NDMP3_BUTYPE_BACKUP_DIRECT	= 0x0008;
335 const NDMP3_BUTYPE_RECOVER_DIRECT	= 0x0010;
336 const NDMP3_BUTYPE_BACKUP_INCREMENTAL	= 0x0020;
337 const NDMP3_BUTYPE_RECOVER_INCREMENTAL	= 0x0040;
338 const NDMP3_BUTYPE_BACKUP_UTF8		= 0x0080;
339 const NDMP3_BUTYPE_RECOVER_UTF8		= 0x0100;
340 const NDMP3_BUTYPE_RECOVER_FILE_HISTORY = 0x0200;
341 
342 struct ndmp3_butype_info
343 {
344 	string		butype_name<>;
345 	ndmp3_pval	default_env<>;
346 	u_long		attrs;
347 };
348 
349 /* NDMP3_CONFIG_GET_BUTYPE_INFO */
350 /* no request arguments */
351 struct ndmp3_config_get_butype_info_reply
352 {
353 	ndmp3_error	error;
354 	ndmp3_butype_info butype_info<>;
355 };
356 
357 /* invalid bit */
358 const	NDMP3_FS_INFO_TOTAL_SIZE_INVALID 	= 0x00000001;
359 const	NDMP3_FS_INFO_USED_SIZE_INVALID		= 0x00000002;
360 const	NDMP3_FS_INFO_AVAIL_SIZE_INVALID	= 0x00000004;
361 const	NDMP3_FS_INFO_TOTAL_INODES_INVALID	= 0x00000008;
362 const	NDMP3_FS_INFO_USED_INODES_INVALID	= 0x00000010;
363 
364 struct ndmp3_fs_info
365 {
366 	u_long		invalid;
367 	string		fs_type<>;
368 	string		fs_logical_device<>;
369 	string		fs_physical_device<>;
370 	ndmp3_u_quad	total_size;
371 	ndmp3_u_quad	used_size;
372 	ndmp3_u_quad	avail_size;
373 	ndmp3_u_quad	total_inodes;
374 	ndmp3_u_quad	used_inodes;
375 	ndmp3_pval	fs_env<>;
376 	string		fs_status<>;
377 };
378 
379 /* NDMP3_CONFIG_GET_FS_INFO */
380 /* no request arguments */
381 struct ndmp3_config_get_fs_info_reply
382 {
383 	ndmp3_error	error;
384 	ndmp3_fs_info	fs_info<>;
385 };
386 
387 /* NDMP3_CONFIG_GET_TAPE_INFO */
388 /* no request arguments */
389 /* tape attributes */
390 const NDMP3_TAPE_ATTR_REWIND	= 0x00000001;
391 const NDMP3_TAPE_ATTR_UNLOAD 	= 0x00000002;
392 
393 struct ndmp3_device_capability
394 {
395 	string		device<>;
396 	u_long		attr;
397 	ndmp3_pval	capability<>;
398 };
399 
400 struct ndmp3_device_info
401 {
402 	string			model<>;
403 	ndmp3_device_capability	caplist<>;
404 
405 };
406 struct ndmp3_config_get_tape_info_reply
407 {
408 	ndmp3_error		error;
409 	ndmp3_device_info	tape_info<>;
410 
411 };
412 
413 /* NDMP3_CONFIG_GET_SCSI_INFO */
414 /* jukebox attributes */
415 struct ndmp3_config_get_scsi_info_reply
416 {
417 	ndmp3_error		error;
418 	ndmp3_device_info	scsi_info<>;
419 };
420 
421 /******************/
422 /* SCSI INTERFACE */
423 /******************/
424 
425 /* NDMP3_SCSI_OPEN */
426 struct ndmp3_scsi_open_request
427 {
428 	string		device<>;
429 };
430 
431 struct ndmp3_scsi_open_reply
432 {
433 	ndmp3_error	error;
434 };
435 
436 /* NDMP3_SCSI_CLOSE */
437 /* no request arguments */
438 struct ndmp3_scsi_close_reply
439 {
440 	ndmp3_error	error;
441 };
442 
443 /* NDMP3_SCSI_GET_STATE */
444 /* no request arguments */
445 struct ndmp3_scsi_get_state_reply
446 {
447 	ndmp3_error	error;
448 	short		target_controller;
449 	short		target_id;
450 	short		target_lun;
451 };
452 
453 /* NDMP3_SCSI_SET_TARGET */
454 struct ndmp3_scsi_set_target_request
455 {
456 	string		device<>;
457 	u_short		target_controller;
458 	u_short		target_id;
459 	u_short		target_lun;
460 };
461 
462 struct ndmp3_scsi_set_target_reply
463 {
464 	ndmp3_error	error;
465 };
466 
467 /* NDMP3_SCSI_RESET_DEVICE */
468 /* no request arguments */
469 struct ndmp3_scsi_reset_device_reply
470 {
471 	ndmp3_error	error;
472 };
473 
474 /* NDMP3_SCSI_RESET_BUS */
475 /* no request arguments */
476 struct ndmp3_scsi_reset_bus_reply
477 {
478 	ndmp3_error	error;
479 };
480 
481 /* NDMP3_SCSI_EXECUTE_CDB */
482 const NDMP3_SCSI_DATA_IN  = 0x00000001;	/* Expect data from SCSI device */
483 const NDMP3_SCSI_DATA_OUT = 0x00000002;	/* Transfer data to SCSI device */
484 
485 struct ndmp3_execute_cdb_request
486 {
487 	u_long		flags;
488 	u_long		timeout;
489 	u_long		datain_len;	/* Set for expected datain */
490 	opaque		cdb<>;
491 	opaque		dataout<>;
492 };
493 
494 struct ndmp3_execute_cdb_reply
495 {
496 	ndmp3_error	error;
497 	u_char		status;		/* SCSI status bytes */
498 	u_long		dataout_len;
499 	opaque		datain<>;	/* SCSI datain */
500 	opaque		ext_sense<>;	/* Extended sense data */
501 };
502 typedef ndmp3_execute_cdb_request	ndmp3_scsi_execute_cdb_request;
503 typedef ndmp3_execute_cdb_reply		ndmp3_scsi_execute_cdb_reply;
504 
505 /******************/
506 /* TAPE INTERFACE */
507 /******************/
508 /* NDMP3_TAPE_OPEN */
509 enum ndmp3_tape_open_mode
510 {
511 	NDMP3_TAPE_READ_MODE,
512 	NDMP3_TAPE_RDWR_MODE
513 };
514 
515 struct ndmp3_tape_open_request
516 {
517 	string			device<>;
518 	ndmp3_tape_open_mode	mode;
519 };
520 
521 struct ndmp3_tape_open_reply
522 {
523 	ndmp3_error	error;
524 };
525 
526 /* NDMP3_TAPE_CLOSE */
527 /* no request arguments */
528 struct ndmp3_tape_close_reply
529 {
530 	ndmp3_error	error;
531 };
532 
533 /*NDMP3_TAPE_GET_STATE */
534 /* no request arguments */
535 const NDMP3_TAPE_STATE_NOREWIND	= 0x0008;	/* non-rewind device */
536 const NDMP3_TAPE_STATE_WR_PROT	= 0x0010;	/* write-protected */
537 const NDMP3_TAPE_STATE_ERROR	= 0x0020;	/* media error */
538 const NDMP3_TAPE_STATE_UNLOAD	= 0x0040;	/* tape will be unloaded when
539 						 * the device is closed */
540 
541 /* invalid bit */
542 const NDMP3_TAPE_STATE_FILE_NUM_INVALID		= 0x00000001;
543 const NDMP3_TAPE_STATE_SOFT_ERRORS_INVALID	= 0x00000002;
544 const NDMP3_TAPE_STATE_BLOCK_SIZE_INVALID	= 0x00000004;
545 const NDMP3_TAPE_STATE_BLOCKNO_INVALID		= 0x00000008;
546 const NDMP3_TAPE_STATE_TOTAL_SPACE_INVALID	= 0x00000010;
547 const NDMP3_TAPE_STATE_SPACE_REMAIN_INVALID	= 0x00000020;
548 const NDMP3_TAPE_STATE_PARTITION_INVALID	= 0x00000040;
549 
550 struct ndmp3_tape_get_state_reply
551 {
552 	u_long		invalid;
553 	ndmp3_error	error;
554 	u_long		flags;
555 	u_long		file_num;
556 	u_long		soft_errors;
557 	u_long		block_size;
558 	u_long		blockno;
559 	ndmp3_u_quad	total_space;
560 	ndmp3_u_quad	space_remain;
561 	u_long		partition;
562 };
563 
564 /* NDMP3_TAPE_MTIO */
565 enum ndmp3_tape_mtio_op
566 {
567 	NDMP3_MTIO_FSF,
568 	NDMP3_MTIO_BSF,
569 	NDMP3_MTIO_FSR,
570 	NDMP3_MTIO_BSR,
571 	NDMP3_MTIO_REW,
572 	NDMP3_MTIO_EOF,
573 	NDMP3_MTIO_OFF
574 };
575 
576 struct ndmp3_tape_mtio_request
577 {
578 	ndmp3_tape_mtio_op	tape_op;
579 	u_long			count;
580 };
581 
582 struct ndmp3_tape_mtio_reply
583 {
584 	ndmp3_error	error;
585 	u_long		resid_count;
586 };
587 
588 /* NDMP3_TAPE_WRITE */
589 struct ndmp3_tape_write_request
590 {
591 	opaque		data_out<>;
592 };
593 
594 struct ndmp3_tape_write_reply
595 {
596 	ndmp3_error	error;
597 	u_long		count;
598 };
599 
600 /* NDMP3_TAPE_READ */
601 struct ndmp3_tape_read_request
602 {
603 	u_long		count;
604 };
605 
606 struct ndmp3_tape_read_reply
607 {
608 	ndmp3_error	error;
609 	opaque		data_in<>;
610 };
611 
612 
613 /* NDMP3_TAPE_EXECUTE_CDB */
614 typedef ndmp3_execute_cdb_request	ndmp3_tape_execute_cdb_request;
615 typedef ndmp3_execute_cdb_reply		ndmp3_tape_execute_cdb_reply;
616 
617 
618 /********************************/
619 /* MOVER INTERFACE              */
620 /********************************/
621 /* NDMP3_MOVER_GET_STATE */
622 enum ndmp3_mover_state
623 {
624 	NDMP3_MOVER_STATE_IDLE,
625 	NDMP3_MOVER_STATE_LISTEN,
626 	NDMP3_MOVER_STATE_ACTIVE,
627 	NDMP3_MOVER_STATE_PAUSED,
628 	NDMP3_MOVER_STATE_HALTED
629 };
630 
631 enum ndmp3_mover_pause_reason
632 {
633 	NDMP3_MOVER_PAUSE_NA,
634 	NDMP3_MOVER_PAUSE_EOM,
635 	NDMP3_MOVER_PAUSE_EOF,
636 	NDMP3_MOVER_PAUSE_SEEK,
637 	NDMP3_MOVER_PAUSE_MEDIA_ERROR,
638 	NDMP3_MOVER_PAUSE_EOW
639 };
640 
641 enum ndmp3_mover_halt_reason
642 {
643 	NDMP3_MOVER_HALT_NA,
644 	NDMP3_MOVER_HALT_CONNECT_CLOSED,
645 	NDMP3_MOVER_HALT_ABORTED,
646 	NDMP3_MOVER_HALT_INTERNAL_ERROR,
647 	NDMP3_MOVER_HALT_CONNECT_ERROR
648 };
649 
650 /* mover address */
651 enum ndmp3_mover_mode
652 {
653 	NDMP3_MOVER_MODE_READ,	/* read from data connection; write to tape */
654 	NDMP3_MOVER_MODE_WRITE	/* write to data connection; read from tape */
655 };
656 
657 struct ndmp3_tcp_addr
658 {
659 	u_long	ip_addr;
660 	u_short	port;
661 };
662 
663 struct ndmp3_fc_addr
664 {
665 	u_long	loop_id;
666 };
667 
668 struct ndmp3_ipc_addr
669 {
670 	opaque	comm_data<>;
671 };
672 union ndmp3_addr switch (ndmp3_addr_type addr_type)
673 {
674     case NDMP3_ADDR_LOCAL:
675 	void;
676     case NDMP3_ADDR_TCP:
677 	ndmp3_tcp_addr	tcp_addr;
678     case NDMP3_ADDR_FC:
679 	ndmp3_fc_addr	fc_addr;
680     case NDMP3_ADDR_IPC:
681 	ndmp3_ipc_addr	ipc_addr;
682 
683 };
684 
685 /* no request arguments */
686 struct ndmp3_mover_get_state_reply
687 {
688 	ndmp3_error		error;
689 	ndmp3_mover_state	state;
690 	ndmp3_mover_pause_reason pause_reason;
691 	ndmp3_mover_halt_reason	halt_reason;
692 	u_long			record_size;
693 	u_long			record_num;
694 	ndmp3_u_quad		data_written;
695 	ndmp3_u_quad		seek_position;
696 	ndmp3_u_quad		bytes_left_to_read;
697 	ndmp3_u_quad		window_offset;
698 	ndmp3_u_quad		window_length;
699 	ndmp3_addr		data_connection_addr;
700 };
701 
702 /* NDMP3_MOVER_LISTEN */
703 struct ndmp3_mover_listen_request
704 {
705 	ndmp3_mover_mode	mode;
706 	ndmp3_addr_type		addr_type;
707 };
708 
709 struct ndmp3_mover_listen_reply
710 {
711 	ndmp3_error		error;
712 	ndmp3_addr		data_connection_addr;
713 };
714 
715 /* NDMP3_MOVER_CONNECT */
716 struct ndmp3_mover_connect_request
717 {
718 	ndmp3_mover_mode	mode;
719 	ndmp3_addr		addr;
720 };
721 
722 struct ndmp3_mover_connect_reply
723 {
724 	ndmp3_error	error;
725 };
726 /* NDMP3_MOVER_SET_RECORD_SIZE */
727 struct ndmp3_mover_set_record_size_request
728 {
729 	u_long		len;
730 };
731 
732 struct ndmp3_mover_set_record_size_reply
733 {
734 	ndmp3_error	error;
735 };
736 
737 /* NDMP3_MOVER_SET_WINDOW */
738 struct ndmp3_mover_set_window_request
739 {
740 	ndmp3_u_quad	offset;
741 	ndmp3_u_quad	length;
742 };
743 
744 struct ndmp3_mover_set_window_reply
745 {
746 	ndmp3_error	error;
747 };
748 
749 /* NDMP3_MOVER_CONTINUE */
750 /* no request arguments */
751 struct ndmp3_mover_continue_reply
752 {
753 	ndmp3_error	error;
754 };
755 
756 
757 /* NDMP3_MOVER_ABORT */
758 /* no request arguments */
759 struct ndmp3_mover_abort_reply
760 {
761 	ndmp3_error	error;
762 };
763 
764 /* NDMP3_MOVER_STOP */
765 /* no request arguments */
766 struct ndmp3_mover_stop_reply
767 {
768 	ndmp3_error	error;
769 };
770 
771 /* NDMP3_MOVER_READ */
772 struct ndmp3_mover_read_request
773 {
774 	ndmp3_u_quad	offset;
775 	ndmp3_u_quad	length;
776 };
777 
778 struct ndmp3_mover_read_reply
779 {
780 	ndmp3_error	error;
781 };
782 
783 /* NDMP3_MOVER_CLOSE */
784 /* no request arguments */
785 struct ndmp3_mover_close_reply
786 {
787 	ndmp3_error	error;
788 };
789 
790 /********************************/
791 /* DATA INTERFACE		*/
792 /********************************/
793 /* NDMP3_DATA_GET_STATE */
794 /* no request arguments */
795 enum ndmp3_data_operation
796 {
797 	NDMP3_DATA_OP_NOACTION,
798 	NDMP3_DATA_OP_BACKUP,
799 	NDMP3_DATA_OP_RESTORE,
800 	NDMP3_DATA_OP_RESTORE_FILEHIST
801 };
802 
803 enum ndmp3_data_state
804 {
805 	NDMP3_DATA_STATE_IDLE,
806 	NDMP3_DATA_STATE_ACTIVE,
807 	NDMP3_DATA_STATE_HALTED,
808 	NDMP3_DATA_STATE_LISTEN,
809 	NDMP3_DATA_STATE_CONNECTED
810 };
811 
812 enum ndmp3_data_halt_reason
813 {
814 	NDMP3_DATA_HALT_NA,
815 	NDMP3_DATA_HALT_SUCCESSFUL,
816 	NDMP3_DATA_HALT_ABORTED,
817 	NDMP3_DATA_HALT_INTERNAL_ERROR,
818 	NDMP3_DATA_HALT_CONNECT_ERROR
819 };
820 
821 /* invalid bit */
822 const NDMP3_DATA_STATE_EST_BYTES_REMAIN_INVALID	= 0x00000001;
823 const NDMP3_DATA_STATE_EST_TIME_REMAIN_INVALID	= 0x00000002;
824 
825 struct ndmp3_data_get_state_reply
826 {
827 	u_long			invalid;
828 	ndmp3_error		error;
829 	ndmp3_data_operation	operation;
830 	ndmp3_data_state	state;
831 	ndmp3_data_halt_reason	halt_reason;
832 	ndmp3_u_quad		bytes_processed;
833 	ndmp3_u_quad		est_bytes_remain;
834 	u_long			est_time_remain;
835 	ndmp3_addr		data_connection_addr;
836 	ndmp3_u_quad		read_offset;
837 	ndmp3_u_quad		read_length;
838 };
839 
840 /* NDMP3_DATA_START_BACKUP */
841 struct ndmp3_data_start_backup_request
842 {
843 	string		bu_type<>;	/* backup method to use */
844 	ndmp3_pval	env<>;		/* Parameters that may modify backup */
845 };
846 
847 struct ndmp3_data_start_backup_reply
848 {
849 	ndmp3_error	error;
850 };
851 
852 /* NDMP3_DATA_START_RECOVER */
853 struct ndmp3_name
854 {
855 	string		original_path<>;
856 	string		destination_dir<>;
857 	string		new_name<>;	/* Direct access restore only */
858 	string		other_name<>;	/* Direct access restore only */
859 	ndmp3_u_quad	node;		/* Direct access restore only */
860 	ndmp3_u_quad	fh_info;	/* Direct access restore only */
861 };
862 
863 struct ndmp3_data_start_recover_request
864 {
865 	ndmp3_pval	env<>;
866 	ndmp3_name	nlist<>;
867 	string		bu_type<>;
868 };
869 
870 struct ndmp3_data_start_recover_reply
871 {
872 	ndmp3_error	error;
873 };
874 
875 /* NDMP3_DATA_START_RECOVER_FILEHIST */
876 typedef ndmp3_data_start_recover_request ndmp3_data_start_recover_filehist_request;
877 typedef ndmp3_data_start_recover_reply ndmp3_data_start_recover_filehist_reply;
878 
879 
880 /* NDMP3_DATA_ABORT */
881 /* no request arguments */
882 struct ndmp3_data_abort_reply
883 {
884 	ndmp3_error	error;
885 };
886 
887 /* NDMP3_DATA_STOP */
888 /* no request arguments */
889 struct ndmp3_data_stop_reply
890 {
891 	ndmp3_error	error;
892 };
893 
894 /* NDMP3_DATA_GET_ENV */
895 /* no request arguments */
896 struct ndmp3_data_get_env_reply
897 {
898 	ndmp3_error	error;
899 	ndmp3_pval	env<>;
900 };
901 
902 /* NDMP3_DATA_LISTEN */
903 struct ndmp3_data_listen_request
904 {
905 	ndmp3_addr_type	addr_type;
906 };
907 
908 struct ndmp3_data_listen_reply
909 {
910 	ndmp3_error	error;
911 	ndmp3_addr	data_connection_addr;
912 };
913 
914 /* NDMP3_DATA_CONNECT */
915 struct ndmp3_data_connect_request
916 {
917 	ndmp3_addr	addr;
918 };
919 struct ndmp3_data_connect_reply
920 {
921 	ndmp3_error	error;
922 };
923 
924 /****************************************/
925 /* NOTIFY INTERFACE 			*/
926 /****************************************/
927 /* NDMP3_NOTIFY_DATA_HALTED */
928 struct ndmp3_notify_data_halted_request
929 {
930 	ndmp3_data_halt_reason	reason;
931 	string			text_reason<>;
932 };
933 
934 /* NDMP3_NOTIFY_CONNECTED */
935 enum ndmp3_connect_reason
936 {
937 	NDMP3_CONNECTED,	/* Connect sucessfully */
938 	NDMP3_SHUTDOWN,		/* Connection shutdown */
939 	NDMP3_REFUSED		/* reach the maximum number of connections */
940 };
941 
942 struct ndmp3_notify_connected_request
943 {
944 	ndmp3_connect_reason	reason;
945 	u_short			protocol_version;
946 	string			text_reason<>;
947 };
948 
949 /* NDMP3_NOTIFY_MOVER_PAUSED */
950 struct ndmp3_notify_mover_paused_request
951 {
952 	ndmp3_mover_pause_reason reason;
953 	ndmp3_u_quad		seek_position;
954 };
955 /* No reply */
956 
957 /* NDMP3_NOTIFY_MOVER_HALTED */
958 struct ndmp3_notify_mover_halted_request
959 {
960 	ndmp3_mover_halt_reason	reason;
961 	string			text_reason<>;
962 };
963 /* No reply */
964 
965 /* NDMP3_NOTIFY_DATA_READ */
966 struct ndmp3_notify_data_read_request
967 {
968 	ndmp3_u_quad	offset;
969 	ndmp3_u_quad	length;
970 };
971 /* No reply */
972 
973 /********************************/
974 /* LOG INTERFACE		*/
975 /********************************/
976 /* NDMP3_LOG_MESSAGE */
977 enum ndmp3_log_type
978 {
979 	NDMP3_LOG_NORMAL,
980 	NDMP3_LOG_DEBUG,
981 	NDMP3_LOG_ERROR,
982 	NDMP3_LOG_WARNING
983 };
984 
985 
986 struct ndmp3_log_message_request
987 {
988 	ndmp3_log_type	log_type;
989 	u_long		message_id;
990 	string		entry<>;
991 };
992 /* No reply */
993 
994 /* NDMP3_LOG_FILE */
995 struct ndmp3_log_file_request
996 {
997 	string		name<>;
998 	ndmp3_error	error;
999 };
1000 /* No reply */
1001 
1002 
1003 /*****************************/
1004 /* File History INTERFACE    */
1005 /*****************************/
1006 /* NDMP3_FH_ADD_FILE */
1007 enum ndmp3_fs_type
1008 {
1009 	NDMP3_FS_UNIX,	/* UNIX */
1010 	NDMP3_FS_NT,	/* NT */
1011 	NDMP3_FS_OTHER
1012 };
1013 
1014 typedef string ndmp3_path<>;
1015 struct ndmp3_nt_path
1016 {
1017 	ndmp3_path	nt_path;
1018 	ndmp3_path	dos_path;
1019 };
1020 
1021 union ndmp3_file_name switch (ndmp3_fs_type fs_type)
1022 {
1023     case NDMP3_FS_UNIX:
1024 	ndmp3_path	unix_name;
1025     case NDMP3_FS_NT:
1026 	ndmp3_nt_path	nt_name;
1027     default:
1028 	ndmp3_path	other_name;
1029 };
1030 
1031 enum ndmp3_file_type
1032 {
1033 	NDMP3_FILE_DIR,
1034 	NDMP3_FILE_FIFO,
1035 	NDMP3_FILE_CSPEC,
1036 	NDMP3_FILE_BSPEC,
1037 	NDMP3_FILE_REG,
1038 	NDMP3_FILE_SLINK,
1039 	NDMP3_FILE_SOCK,
1040 	NDMP3_FILE_REGISTRY,
1041 	NDMP3_FILE_OTHER
1042 };
1043 
1044 /* invalid bit */
1045 const NDMP3_FILE_STAT_ATIME_INVALID	= 0x00000001;
1046 const NDMP3_FILE_STAT_CTIME_INVALID	= 0x00000002;
1047 const NDMP3_FILE_STAT_GROUP_INVALID	= 0x00000004;
1048 
1049 struct ndmp3_file_stat
1050 {
1051 	u_long			invalid;
1052 	ndmp3_fs_type		fs_type;
1053 	ndmp3_file_type		ftype;
1054 	u_long			mtime;
1055 	u_long			atime;
1056 	u_long			ctime;
1057 	u_long			owner; /* uid for UNIX, owner for NT */
1058 	u_long			group; /* gid for UNIX, NA for NT */
1059 	u_long			fattr; /* mode for UNIX, fattr for NT */
1060 	ndmp3_u_quad		size;
1061 	u_long			links;
1062 };
1063 
1064 
1065 /* one file could have both UNIX and NT name and attributes */
1066 struct ndmp3_file
1067 {
1068 	ndmp3_file_name		names<>;
1069 	ndmp3_file_stat		stats<>;
1070 	ndmp3_u_quad		node;	/* used for the direct access */
1071 	ndmp3_u_quad		fh_info;/* used for the direct access */
1072 };
1073 
1074 struct ndmp3_fh_add_file_request
1075 {
1076 	ndmp3_file		files<>;
1077 };
1078 
1079 /* No reply */
1080 /* NDMP3_FH_ADD_DIR */
1081 
1082 struct ndmp3_dir
1083 {
1084 	ndmp3_file_name		names<>;
1085 	ndmp3_u_quad		node;
1086 	ndmp3_u_quad		parent;
1087 };
1088 
1089 struct ndmp3_fh_add_dir_request
1090 {
1091 	ndmp3_dir		dirs<>;
1092 };
1093 /* No reply */
1094 
1095 /* NDMP3_FH_ADD_NODE */
1096 struct ndmp3_node
1097 {
1098 	ndmp3_file_stat		stats<>;
1099 	ndmp3_u_quad		node;
1100 	ndmp3_u_quad		fh_info;
1101 };
1102 
1103 struct ndmp3_fh_add_node_request
1104 {
1105 	ndmp3_node		nodes<>;
1106 };
1107 /* No reply */
1108 
1109 %#endif /* !NDMOS_OPTION_NO_NDMP3 */
1110