1 /* 2 * Copyright (c) 2000,2001 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 * ndmp4.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_NDMP4 51 52 const NDMP4VER = 4; 53 const NDMP4PORT = 10000; 54 55 %#define ndmp4_u_quad unsigned long long 56 %extern bool_t xdr_ndmp4_u_quad(); 57 58 struct _ndmp4_u_quad 59 { 60 u_long high; 61 u_long low; 62 }; 63 64 65 66 enum ndmp4_header_message_type 67 { 68 NDMP4_MESSAGE_REQUEST, 69 NDMP4_MESSAGE_REPLY 70 }; 71 72 const NDMP4_MESSAGE_POST = NDMP4_MESSAGE_REQUEST; 73 74 75 /* Note: because of extensibility, this is */ 76 /* Not a complete list of errors. */ 77 78 enum ndmp4_error { 79 NDMP4_NO_ERR = 0, 80 NDMP4_NOT_SUPPORTED_ERR = 1, 81 NDMP4_DEVICE_BUSY_ERR = 2, 82 NDMP4_DEVICE_OPENED_ERR = 3, 83 NDMP4_NOT_AUTHORIZED_ERR = 4, 84 NDMP4_PERMISSION_ERR = 5, 85 NDMP4_DEV_NOT_OPEN_ERR = 6, 86 NDMP4_IO_ERR = 7, 87 NDMP4_TIMEOUT_ERR = 8, 88 NDMP4_ILLEGAL_ARGS_ERR = 9, 89 NDMP4_NO_TAPE_LOADED_ERR = 10, 90 NDMP4_WRITE_PROTECT_ERR = 11, 91 NDMP4_EOF_ERR = 12, 92 NDMP4_EOM_ERR = 13, 93 NDMP4_FILE_NOT_FOUND_ERR = 14, 94 NDMP4_BAD_FILE_ERR = 15, 95 NDMP4_NO_DEVICE_ERR = 16, 96 NDMP4_NO_BUS_ERR = 17, 97 NDMP4_XDR_DECODE_ERR = 18, 98 NDMP4_ILLEGAL_STATE_ERR = 19, 99 NDMP4_UNDEFINED_ERR = 20, 100 NDMP4_XDR_ENCODE_ERR = 21, 101 NDMP4_NO_MEM_ERR = 22, 102 NDMP4_CONNECT_ERR = 23, 103 NDMP4_SEQUENCE_NUM_ERR = 24, 104 NDMP4_READ_IN_PROGRESS_ERR = 25, 105 NDMP4_PRECONDITION_ERR = 26, 106 NDMP4_CLASS_NOT_SUPPORTED = 27, 107 NDMP4_VERSION_NOT_SUPPORTED = 28, 108 NDMP4_EXT_DUPL_CLASSES = 29, 109 NDMP4_EXT_DN_ILLEGAL = 30 110 }; 111 112 113 114 /* Note: Because of extensibility, this */ 115 /* is not a complete list of messages */ 116 117 enum ndmp4_message { 118 119 /* CONNECT INTERFACE */ 120 NDMP4_CONNECT_OPEN = 0x900, 121 NDMP4_CONNECT_CLIENT_AUTH = 0x901, 122 NDMP4_CONNECT_CLOSE = 0x902, 123 NDMP4_CONNECT_SERVER_AUTH = 0x903, 124 125 /* CONFIG INTERFACE */ 126 NDMP4_CONFIG_GET_HOST_INFO = 0x100, 127 NDMP4_CONFIG_GET_CONNECTION_TYPE = 0x102, 128 NDMP4_CONFIG_GET_AUTH_ATTR = 0x103, 129 NDMP4_CONFIG_GET_BUTYPE_INFO = 0x104, 130 NDMP4_CONFIG_GET_FS_INFO = 0x105, 131 NDMP4_CONFIG_GET_TAPE_INFO = 0x106, 132 NDMP4_CONFIG_GET_SCSI_INFO = 0x107, 133 NDMP4_CONFIG_GET_SERVER_INFO = 0x108, 134 NDMP4_CONFIG_SET_EXT_LIST = 0x109, 135 NDMP4_CONFIG_GET_EXT_LIST = 0x10A, 136 137 /* SCSI INTERFACE */ 138 NDMP4_SCSI_OPEN = 0x200, 139 NDMP4_SCSI_CLOSE = 0x201, 140 NDMP4_SCSI_GET_STATE = 0x202, 141 NDMP4_SCSI_RESET_DEVICE = 0x204, 142 NDMP4_SCSI_EXECUTE_CDB = 0x206, 143 144 /* TAPE INTERFACE */ 145 NDMP4_TAPE_OPEN = 0x300, 146 NDMP4_TAPE_CLOSE = 0x301, 147 NDMP4_TAPE_GET_STATE = 0x302, 148 NDMP4_TAPE_MTIO = 0x303, 149 NDMP4_TAPE_WRITE = 0x304, 150 NDMP4_TAPE_READ = 0x305, 151 NDMP4_TAPE_EXECUTE_CDB = 0x307, 152 153 /* DATA INTERFACE */ 154 NDMP4_DATA_GET_STATE = 0x400, 155 NDMP4_DATA_START_BACKUP = 0x401, 156 NDMP4_DATA_START_RECOVER = 0x402, 157 NDMP4_DATA_ABORT = 0x403, 158 NDMP4_DATA_GET_ENV = 0x404, 159 NDMP4_DATA_STOP = 0x407, 160 NDMP4_DATA_LISTEN = 0x409, 161 NDMP4_DATA_CONNECT = 0x40A, 162 NDMP4_DATA_START_RECOVER_FILEHIST = 0x40B, 163 164 /* NOTIFY INTERFACE */ 165 NDMP4_NOTIFY_DATA_HALTED = 0x501, 166 NDMP4_NOTIFY_CONNECTION_STATUS = 0x502, 167 NDMP4_NOTIFY_MOVER_HALTED = 0x503, 168 NDMP4_NOTIFY_MOVER_PAUSED = 0x504, 169 NDMP4_NOTIFY_DATA_READ = 0x505, 170 171 /* LOGGING INTERFACE */ 172 NDMP4_LOG_FILE = 0x602, 173 NDMP4_LOG_MESSAGE = 0x603, 174 175 /* FILE HISTORY INTERFACE */ 176 NDMP4_FH_ADD_FILE = 0x703, 177 NDMP4_FH_ADD_DIR = 0x704, 178 NDMP4_FH_ADD_NODE = 0x705, 179 180 /* MOVER INTERFACE */ 181 NDMP4_MOVER_GET_STATE = 0xA00, 182 NDMP4_MOVER_LISTEN = 0xA01, 183 NDMP4_MOVER_CONTINUE = 0xA02, 184 NDMP4_MOVER_ABORT = 0xA03, 185 NDMP4_MOVER_STOP = 0xA04, 186 NDMP4_MOVER_SET_WINDOW = 0xA05, 187 NDMP4_MOVER_READ = 0xA06, 188 NDMP4_MOVER_CLOSE = 0xA07, 189 NDMP4_MOVER_SET_RECORD_SIZE = 0xA08, 190 NDMP4_MOVER_CONNECT = 0xA09, 191 192 /* EXTENSIBILITY */ 193 194 /* Reserved for Standard extensions */ 195 NDMP4_EXT_STANDARD_BASE = 0x10000, 196 197 /* Reserved for Proprietary extensions */ 198 NDMP4_EXT_PROPRIETARY_BASE = 0x20000000 199 }; 200 201 202 struct ndmp4_header 203 { 204 u_long sequence; 205 u_long time_stamp; 206 ndmp4_header_message_type message_type; 207 ndmp4_message message_code; 208 u_long reply_sequence; 209 ndmp4_error error_code; 210 }; 211 212 struct ndmp4_pval 213 { 214 string name<>; 215 string value<>; 216 }; 217 218 219 /* Connect messages */ 220 struct ndmp4_connect_open_request 221 { 222 u_short protocol_version; 223 }; 224 225 struct ndmp4_connect_open_reply 226 { 227 ndmp4_error error; 228 }; 229 230 231 enum ndmp4_auth_type 232 { 233 NDMP4_AUTH_NONE=0, 234 NDMP4_AUTH_TEXT=1, 235 NDMP4_AUTH_MD5=2 236 }; 237 238 struct ndmp4_auth_text 239 { 240 string auth_id<>; 241 string auth_password<>; 242 }; 243 244 struct ndmp4_auth_md5 245 { 246 string auth_id<>; 247 opaque auth_digest[16]; 248 }; 249 250 union ndmp4_auth_data switch (enum ndmp4_auth_type auth_type) 251 { 252 case NDMP4_AUTH_NONE: 253 void; 254 case NDMP4_AUTH_TEXT: 255 struct ndmp4_auth_text auth_text; 256 case NDMP4_AUTH_MD5: 257 struct ndmp4_auth_md5 auth_md5; 258 }; 259 260 union ndmp4_auth_attr switch (enum ndmp4_auth_type auth_type) 261 { 262 case NDMP4_AUTH_NONE: 263 void; 264 case NDMP4_AUTH_TEXT: 265 void; 266 case NDMP4_AUTH_MD5: 267 opaque challenge[64]; 268 }; 269 270 271 struct ndmp4_connect_client_auth_request 272 { 273 ndmp4_auth_data auth_data; 274 }; 275 276 struct ndmp4_connect_client_auth_reply 277 { 278 ndmp4_error error; 279 }; 280 281 282 struct ndmp4_connect_server_auth_request 283 { 284 ndmp4_auth_attr client_attr; 285 }; 286 287 struct ndmp4_connect_server_auth_reply 288 { 289 ndmp4_error error; 290 ndmp4_auth_data server_result; 291 }; 292 293 294 struct ndmp4_config_get_host_info_reply 295 { 296 ndmp4_error error; 297 string hostname<>; 298 string os_type<>; 299 string os_vers<>; 300 string hostid<>; 301 }; 302 303 304 struct ndmp4_config_get_server_info_reply 305 { 306 ndmp4_error error; 307 string vendor_name<>; 308 string product_name<>; 309 string revision_number<>; 310 ndmp4_auth_type auth_type<>; 311 }; 312 313 314 enum ndmp4_addr_type 315 { 316 NDMP4_ADDR_LOCAL=0, 317 NDMP4_ADDR_TCP=1, 318 NDMP4_ADDR_RESERVED=2, 319 NDMP4_ADDR_IPC=3 320 }; 321 322 struct ndmp4_config_get_connection_type_reply 323 { 324 ndmp4_error error; 325 ndmp4_addr_type addr_types<>; 326 }; 327 328 329 struct ndmp4_config_get_auth_attr_request 330 { 331 ndmp4_auth_type auth_type; 332 }; 333 334 335 336 struct ndmp4_config_get_auth_attr_reply 337 { 338 ndmp4_error error; 339 ndmp4_auth_attr server_attr; 340 }; 341 342 343 const NDMP4_BUTYPE_BACKUP_FILELIST = 0x0002; 344 const NDMP4_BUTYPE_RECOVER_FILELIST = 0x0004; 345 const NDMP4_BUTYPE_BACKUP_DIRECT = 0x0008; 346 const NDMP4_BUTYPE_RECOVER_DIRECT = 0x0010; 347 const NDMP4_BUTYPE_BACKUP_INCREMENTAL = 0x0020; 348 const NDMP4_BUTYPE_RECOVER_INCREMENTAL = 0x0040; 349 const NDMP4_BUTYPE_BACKUP_UTF8 = 0x0080; 350 const NDMP4_BUTYPE_RECOVER_UTF8 = 0x0100; 351 const NDMP4_BUTYPE_BACKUP_FH_FILE = 0x0200; 352 const NDMP4_BUTYPE_BACKUP_FH_DIR = 0x0400; 353 const NDMP4_BUTYPE_RECOVER_FILEHIST = 0x0800; 354 const NDMP4_BUTYPE_RECOVER_FH_FILE = 0x1000; 355 const NDMP4_BUTYPE_RECOVER_FH_DIR = 0x2000; 356 357 358 struct ndmp4_butype_info 359 { 360 string butype_name<>; 361 ndmp4_pval default_env<>; 362 u_long attrs; 363 }; 364 365 struct ndmp4_config_get_butype_info_reply 366 { 367 ndmp4_error error; 368 ndmp4_butype_info butype_info<>; 369 }; 370 371 372 const NDMP4_FS_INFO_TOTAL_SIZE_UNS = 0x00000001; 373 const NDMP4_FS_INFO_USED_SIZE_UNS = 0x00000002; 374 const NDMP4_FS_INFO_AVAIL_SIZE_UNS = 0x00000004; 375 const NDMP4_FS_INFO_TOTAL_INODES_UNS = 0x00000008; 376 const NDMP4_FS_INFO_USED_INODES_UNS = 0x00000010; 377 378 struct ndmp4_fs_info 379 { 380 u_long unsupported; 381 string fs_type<>; 382 string fs_logical_device<>; 383 string fs_physical_device<>; 384 ndmp4_u_quad total_size; 385 ndmp4_u_quad used_size; 386 ndmp4_u_quad avail_size; 387 ndmp4_u_quad total_inodes; 388 ndmp4_u_quad used_inodes; 389 ndmp4_pval fs_env<>; 390 string fs_status<>; 391 }; 392 393 struct ndmp4_config_get_fs_info_reply 394 { 395 ndmp4_error error; 396 ndmp4_fs_info fs_info<>; 397 }; 398 399 400 const NDMP4_TAPE_ATTR_REWIND = 0x00000001; 401 const NDMP4_TAPE_ATTR_UNLOAD = 0x00000002; 402 const NDMP4_TAPE_ATTR_RAW = 0x00000004; 403 404 struct ndmp4_device_capability 405 { 406 string device<>; 407 u_long attr; 408 ndmp4_pval capability<>; 409 }; 410 411 struct ndmp4_device_info 412 { 413 string model<>; 414 ndmp4_device_capability caplist<>; 415 }; 416 417 struct ndmp4_config_get_tape_info_reply 418 { 419 ndmp4_error error; 420 ndmp4_device_info tape_info<>; 421 }; 422 423 struct ndmp4_config_get_scsi_info_reply 424 { 425 ndmp4_error error; 426 ndmp4_device_info scsi_info<>; 427 }; 428 429 struct ndmp4_class_list 430 { 431 u_short class_id; 432 u_short class_version<>; 433 }; 434 435 struct ndmp4_class_version 436 { 437 u_short class_id; 438 u_short class_version; 439 }; 440 441 struct ndmp4_config_get_ext_list_reply 442 { 443 ndmp4_error error; 444 ndmp4_class_list class_list<>; 445 }; 446 447 struct ndmp4_config_set_ext_list_request 448 { 449 ndmp4_error error; 450 ndmp4_class_list ndmp4_accepted_ext<>; 451 }; 452 453 struct ndmp4_config_set_ext_list_reply 454 { 455 ndmp4_error error; 456 }; 457 458 459 460 461 struct ndmp4_scsi_open_request 462 { 463 string device<>; 464 }; 465 466 struct ndmp4_scsi_open_reply 467 { 468 ndmp4_error error; 469 }; 470 471 472 struct ndmp4_scsi_close_reply 473 { 474 ndmp4_error error; 475 }; 476 477 478 struct ndmp4_scsi_get_state_reply 479 { 480 ndmp4_error error; 481 short target_controller; 482 short target_id; 483 short target_lun; 484 }; 485 486 487 struct ndmp4_scsi_reset_device_reply 488 { 489 ndmp4_error error; 490 }; 491 492 const NDMP4_SCSI_DATA_IN = 0x00000001; 493 const NDMP4_SCSI_DATA_OUT = 0x00000002; 494 495 struct ndmp4_execute_cdb_request 496 { 497 u_long flags; 498 u_long timeout; 499 u_long datain_len; 500 opaque cdb<>; 501 opaque dataout<>; 502 }; 503 504 struct ndmp4_execute_cdb_reply 505 { 506 ndmp4_error error; 507 u_char status; 508 u_long dataout_len; 509 opaque datain<>; 510 opaque ext_sense<>; 511 }; 512 513 typedef ndmp4_execute_cdb_request ndmp4_scsi_execute_cdb_request; 514 typedef ndmp4_execute_cdb_reply ndmp4_scsi_execute_cdb_reply; 515 516 enum ndmp4_tape_open_mode 517 { 518 NDMP4_TAPE_READ_MODE = 0, 519 NDMP4_TAPE_RDWR_MODE = 1, 520 NDMP4_TAPE_RAW_MODE = 2 521 }; 522 523 524 struct ndmp4_tape_open_request { 525 string device<>; 526 ndmp4_tape_open_mode mode; 527 }; 528 529 struct ndmp4_tape_open_reply { 530 ndmp4_error error; 531 }; 532 533 534 struct ndmp4_tape_close_reply 535 { 536 ndmp4_error error; 537 }; 538 539 540 /* flags */ 541 const NDMP4_TAPE_STATE_NOREWIND = 0x0008; /* non-rewind device */ 542 const NDMP4_TAPE_STATE_WR_PROT = 0x0010; /* write-protected */ 543 const NDMP4_TAPE_STATE_ERROR = 0x0020; /* media error */ 544 const NDMP4_TAPE_STATE_UNLOAD = 0x0040; /* tape unloaded upon 545 close */ 546 547 /* unsupported bits */ 548 const NDMP4_TAPE_STATE_FILE_NUM_UNS = 0x00000001; 549 const NDMP4_TAPE_STATE_SOFT_ERRORS_UNS = 0x00000002; 550 const NDMP4_TAPE_STATE_BLOCK_SIZE_UNS = 0x00000004; 551 const NDMP4_TAPE_STATE_BLOCKNO_UNS = 0x00000008; 552 const NDMP4_TAPE_STATE_TOTAL_SPACE_UNS = 0x00000010; 553 const NDMP4_TAPE_STATE_SPACE_REMAIN_UNS = 0x00000020; 554 555 struct ndmp4_tape_get_state_reply 556 { 557 u_long unsupported; 558 ndmp4_error error; 559 u_long flags; 560 u_long file_num; 561 u_long soft_errors; 562 u_long block_size; 563 u_long blockno; 564 565 ndmp4_u_quad total_space; 566 ndmp4_u_quad space_remain; 567 }; 568 569 570 enum ndmp4_tape_mtio_op 571 { 572 NDMP4_MTIO_FSF=0, 573 NDMP4_MTIO_BSF=1, 574 NDMP4_MTIO_FSR=2, 575 NDMP4_MTIO_BSR=3, 576 NDMP4_MTIO_REW=4, 577 NDMP4_MTIO_EOF=5, 578 NDMP4_MTIO_OFF=6, 579 NDMP4_MTIO_TUR=7 580 }; 581 582 struct ndmp4_tape_mtio_request 583 { 584 ndmp4_tape_mtio_op tape_op; 585 u_long count; 586 }; 587 588 struct ndmp4_tape_mtio_reply 589 { 590 ndmp4_error error; 591 u_long resid_count; 592 }; 593 594 595 struct ndmp4_tape_write_request 596 { 597 opaque data_out<>; 598 }; 599 600 struct ndmp4_tape_write_reply 601 { 602 ndmp4_error error; 603 u_long count; 604 }; 605 606 607 struct ndmp4_tape_read_request 608 { 609 u_long count; 610 }; 611 612 struct ndmp4_tape_read_reply 613 { 614 ndmp4_error error; 615 opaque data_in<>; 616 }; 617 618 619 typedef ndmp4_scsi_execute_cdb_request ndmp4_tape_execute_cdb_request; 620 typedef ndmp4_scsi_execute_cdb_reply ndmp4_tape_execute_cdb_reply; 621 622 623 enum ndmp4_data_operation 624 { 625 NDMP4_DATA_OP_NOACTION = 0, 626 NDMP4_DATA_OP_BACKUP = 1, 627 NDMP4_DATA_OP_RECOVER = 2, 628 NDMP4_DATA_OP_RECOVER_FILEHIST = 3 629 630 }; 631 632 enum ndmp4_data_state 633 { 634 NDMP4_DATA_STATE_IDLE=0, 635 NDMP4_DATA_STATE_ACTIVE=1, 636 NDMP4_DATA_STATE_HALTED=2, 637 NDMP4_DATA_STATE_LISTEN=3, 638 NDMP4_DATA_STATE_CONNECTED=4 639 }; 640 641 enum ndmp4_data_halt_reason 642 { 643 NDMP4_DATA_HALT_NA=0, 644 NDMP4_DATA_HALT_SUCCESSFUL=1, 645 NDMP4_DATA_HALT_ABORTED=2, 646 NDMP4_DATA_HALT_INTERNAL_ERROR=3, 647 NDMP4_DATA_HALT_CONNECT_ERROR=4 648 }; 649 650 /* ndmp4_addr */ 651 struct ndmp4_tcp_addr 652 { 653 u_long ip_addr; 654 u_short port; 655 ndmp4_pval addr_env<>; 656 }; 657 658 struct ndmp4_ipc_addr 659 { 660 opaque comm_data<>; 661 }; 662 663 union ndmp4_addr switch (ndmp4_addr_type addr_type) 664 { 665 case NDMP4_ADDR_LOCAL: 666 void; 667 case NDMP4_ADDR_TCP: 668 ndmp4_tcp_addr tcp_addr<>; 669 case NDMP4_ADDR_IPC: 670 ndmp4_ipc_addr ipc_addr; 671 }; 672 673 /* unsupported bitmask bits */ 674 const NDMP4_DATA_STATE_EST_BYTES_REMAIN_UNS = 0x00000001; 675 const NDMP4_DATA_STATE_EST_TIME_REMAIN_UNS = 0x00000002; 676 677 struct ndmp4_data_get_state_reply 678 { 679 u_long unsupported; 680 ndmp4_error error; 681 ndmp4_data_operation operation; 682 ndmp4_data_state state; 683 ndmp4_data_halt_reason halt_reason; 684 ndmp4_u_quad bytes_processed; 685 ndmp4_u_quad est_bytes_remain; 686 u_long est_time_remain; 687 ndmp4_addr data_connection_addr; 688 ndmp4_u_quad read_offset; 689 ndmp4_u_quad read_length; 690 }; 691 692 693 694 struct ndmp4_data_listen_request 695 { 696 ndmp4_addr_type addr_type; 697 }; 698 699 struct ndmp4_data_listen_reply 700 { 701 ndmp4_error error; 702 ndmp4_addr connect_addr; 703 }; 704 705 706 struct ndmp4_data_connect_request 707 { 708 ndmp4_addr addr; 709 }; 710 711 struct ndmp4_data_connect_reply 712 { 713 ndmp4_error error; 714 }; 715 716 717 struct ndmp4_data_start_backup_request 718 { 719 string butype_name<>; 720 ndmp4_pval env<>; 721 }; 722 723 struct ndmp4_data_start_backup_reply 724 { 725 ndmp4_error error; 726 }; 727 728 729 struct ndmp4_name 730 { 731 string original_path<>; 732 string destination_path<>; 733 string name<>; 734 string other_name<>; 735 ndmp4_u_quad node; 736 ndmp4_u_quad fh_info; 737 }; 738 739 struct ndmp4_data_start_recover_request 740 { 741 ndmp4_pval env<>; 742 ndmp4_name nlist<>; 743 string butype_name<>; 744 }; 745 746 struct ndmp4_data_start_recover_reply 747 { 748 ndmp4_error error; 749 }; 750 751 struct ndmp4_data_start_recover_filehist_request 752 { 753 ndmp4_pval env<>; 754 ndmp4_name nlist<>; 755 string butype_name<>; 756 }; 757 758 struct ndmp4_data_start_recover_filehist_reply 759 { 760 ndmp4_error error; 761 }; 762 763 764 765 struct ndmp4_data_abort_reply 766 { 767 ndmp4_error error; 768 }; 769 770 771 struct ndmp4_data_stop_reply 772 { 773 ndmp4_error error; 774 }; 775 776 777 struct ndmp4_data_get_env_reply 778 { 779 ndmp4_error error; 780 ndmp4_pval env<>; 781 }; 782 783 784 enum ndmp4_mover_mode 785 { 786 NDMP4_MOVER_MODE_READ = 0, 787 NDMP4_MOVER_MODE_WRITE = 1, 788 NDMP4_MOVER_MODE_NOACTION = 2 789 }; 790 791 enum ndmp4_mover_state 792 { 793 NDMP4_MOVER_STATE_IDLE, 794 NDMP4_MOVER_STATE_LISTEN, 795 NDMP4_MOVER_STATE_ACTIVE, 796 NDMP4_MOVER_STATE_PAUSED, 797 NDMP4_MOVER_STATE_HALTED 798 }; 799 800 enum ndmp4_mover_pause_reason 801 { 802 NDMP4_MOVER_PAUSE_NA = 0, 803 NDMP4_MOVER_PAUSE_EOM = 1, 804 NDMP4_MOVER_PAUSE_EOF = 2, 805 NDMP4_MOVER_PAUSE_SEEK = 3, 806 /* NDMPv4 does not have MOVER_PAUSE_MEDIA_ERROR = 4 */ 807 NDMP4_MOVER_PAUSE_EOW = 5 808 }; 809 810 enum ndmp4_mover_halt_reason 811 { 812 NDMP4_MOVER_HALT_NA, 813 NDMP4_MOVER_HALT_CONNECT_CLOSED, 814 NDMP4_MOVER_HALT_ABORTED, 815 NDMP4_MOVER_HALT_INTERNAL_ERROR, 816 NDMP4_MOVER_HALT_CONNECT_ERROR, 817 NDMP4_MOVER_HALT_MEDIA_ERROR 818 }; 819 820 821 822 823 struct ndmp4_mover_set_record_size_request 824 { 825 u_long len; 826 }; 827 828 struct ndmp4_mover_set_record_size_reply 829 { 830 ndmp4_error error; 831 }; 832 833 834 struct ndmp4_mover_set_window_request 835 { 836 ndmp4_u_quad offset; 837 ndmp4_u_quad length; 838 }; 839 840 841 struct ndmp4_mover_set_window_reply 842 { 843 ndmp4_error error; 844 }; 845 846 847 struct ndmp4_mover_connect_request 848 { 849 ndmp4_mover_mode mode; 850 ndmp4_addr addr; 851 }; 852 853 struct ndmp4_mover_connect_reply 854 { 855 ndmp4_error error; 856 }; 857 858 859 struct ndmp4_mover_listen_request 860 { 861 ndmp4_mover_mode mode; 862 ndmp4_addr_type addr_type; 863 }; 864 865 struct ndmp4_mover_listen_reply 866 { 867 ndmp4_error error; 868 ndmp4_addr connect_addr; 869 }; 870 871 872 struct ndmp4_mover_read_request 873 { 874 ndmp4_u_quad offset; 875 ndmp4_u_quad length; 876 }; 877 878 struct ndmp4_mover_read_reply 879 { 880 ndmp4_error error; 881 }; 882 883 884 885 struct ndmp4_mover_get_state_reply 886 { 887 ndmp4_error error; 888 ndmp4_mover_mode mode; 889 ndmp4_mover_state state; 890 ndmp4_mover_pause_reason pause_reason; 891 ndmp4_mover_halt_reason halt_reason; 892 u_long record_size; 893 u_long record_num; 894 ndmp4_u_quad bytes_moved; 895 ndmp4_u_quad seek_position; 896 ndmp4_u_quad bytes_left_to_read; 897 ndmp4_u_quad window_offset; 898 ndmp4_u_quad window_length; 899 ndmp4_addr data_connection_addr; 900 }; 901 902 903 struct ndmp4_mover_continue_reply 904 { 905 ndmp4_error error; 906 }; 907 908 909 struct ndmp4_mover_close_reply 910 { 911 ndmp4_error error; 912 }; 913 914 915 struct ndmp4_mover_abort_reply 916 { 917 ndmp4_error error; 918 }; 919 920 921 struct ndmp4_mover_stop_reply 922 { 923 ndmp4_error error; 924 }; 925 926 927 struct ndmp4_notify_data_halted_post 928 { 929 ndmp4_data_halt_reason reason; 930 }; 931 932 933 enum ndmp4_connection_status_reason 934 { 935 NDMP4_CONNECTED=0, 936 NDMP4_SHUTDOWN=1, 937 NDMP4_REFUSED=2 938 }; 939 940 struct ndmp4_notify_connection_status_post 941 { 942 ndmp4_connection_status_reason reason; 943 u_short protocol_version; 944 string text_reason<>; 945 }; 946 947 948 struct ndmp4_notify_mover_halted_post 949 { 950 ndmp4_mover_halt_reason reason; 951 }; 952 953 954 struct ndmp4_notify_mover_paused_post 955 { 956 ndmp4_mover_pause_reason reason; 957 ndmp4_u_quad seek_position; 958 }; 959 960 961 struct ndmp4_notify_data_read_post 962 { 963 ndmp4_u_quad offset; 964 ndmp4_u_quad length; 965 }; 966 967 968 enum ndmp4_has_associated_message 969 { 970 NDMP4_NO_ASSOCIATED_MESSAGE = 0, 971 NDMP4_HAS_ASSOCIATED_MESSAGE = 1 972 }; 973 974 enum ndmp4_log_type 975 { 976 NDMP4_LOG_NORMAL = 0, 977 NDMP4_LOG_DEBUG = 1, 978 NDMP4_LOG_ERROR = 2, 979 NDMP4_LOG_WARNING = 3 980 }; 981 982 struct ndmp4_log_message_post 983 { 984 ndmp4_log_type log_type; 985 u_long message_id; 986 string entry<>; 987 ndmp4_has_associated_message associated_message_valid; 988 u_long associated_message_sequence; 989 }; 990 991 992 enum ndmp4_recovery_status 993 { 994 NDMP4_RECOVERY_SUCCESSFUL = 0, 995 NDMP4_RECOVERY_FAILED_PERMISSION = 1, 996 NDMP4_RECOVERY_FAILED_NOT_FOUND = 2, 997 NDMP4_RECOVERY_FAILED_NO_DIRECTORY = 3, 998 NDMP4_RECOVERY_FAILED_OUT_OF_MEMORY = 4, 999 NDMP4_RECOVERY_FAILED_IO_ERROR = 5, 1000 NDMP4_RECOVERY_FAILED_UNDEFINED_ERROR = 6 1001 }; 1002 1003 struct ndmp4_log_file_post 1004 { 1005 string name<>; 1006 ndmp4_recovery_status recovery_status; 1007 }; 1008 1009 1010 enum ndmp4_fs_type 1011 { 1012 NDMP4_FS_UNIX=0, 1013 NDMP4_FS_NT=1, 1014 NDMP4_FS_OTHER=2 1015 }; 1016 1017 typedef string ndmp4_path<>; 1018 1019 struct ndmp4_nt_path 1020 { 1021 ndmp4_path nt_path; 1022 ndmp4_path dos_path; 1023 }; 1024 1025 union ndmp4_file_name switch (ndmp4_fs_type fs_type) 1026 { 1027 case NDMP4_FS_UNIX: 1028 ndmp4_path unix_name; 1029 case NDMP4_FS_NT: 1030 ndmp4_nt_path nt_name; 1031 default: 1032 ndmp4_path other_name; 1033 }; 1034 1035 /* file type */ 1036 enum ndmp4_file_type 1037 { 1038 NDMP4_FILE_DIR=0, 1039 NDMP4_FILE_FIFO=1, 1040 NDMP4_FILE_CSPEC=2, 1041 NDMP4_FILE_BSPEC=3, 1042 NDMP4_FILE_REG=4, 1043 NDMP4_FILE_SLINK=5, 1044 NDMP4_FILE_SOCK=6, 1045 NDMP4_FILE_REGISTRY=7, 1046 NDMP4_FILE_OTHER=8 1047 }; 1048 1049 /* file stat */ 1050 /* unsupported bitmask */ 1051 const NDMP4_FILE_STAT_ATIME_UNS = 0x00000001; 1052 const NDMP4_FILE_STAT_CTIME_UNS = 0x00000002; 1053 const NDMP4_FILE_STAT_GROUP_UNS = 0x00000004; 1054 1055 struct ndmp4_file_stat 1056 { 1057 u_long unsupported; 1058 ndmp4_fs_type fs_type; 1059 ndmp4_file_type ftype; 1060 u_long mtime; 1061 u_long atime; 1062 u_long ctime; 1063 u_long owner; 1064 u_long group; 1065 u_long fattr; 1066 ndmp4_u_quad size; 1067 u_long links; 1068 }; 1069 1070 struct ndmp4_file 1071 { 1072 ndmp4_file_name names<>; 1073 ndmp4_file_stat stats<>; 1074 ndmp4_u_quad node; 1075 ndmp4_u_quad fh_info; 1076 }; 1077 1078 struct ndmp4_fh_add_file_post 1079 { 1080 ndmp4_file files<>; 1081 }; 1082 1083 struct ndmp4_dir 1084 { 1085 ndmp4_file_name names<>; 1086 ndmp4_u_quad node; 1087 ndmp4_u_quad parent; 1088 }; 1089 1090 struct ndmp4_fh_add_dir_post 1091 { 1092 ndmp4_dir dirs<>; 1093 }; 1094 1095 1096 struct ndmp4_node 1097 { 1098 ndmp4_file_stat stats<>; 1099 ndmp4_u_quad node; 1100 ndmp4_u_quad fh_info; 1101 }; 1102 1103 struct ndmp4_fh_add_node_post 1104 { 1105 ndmp4_node nodes<>; 1106 }; 1107 1108 %#endif /* !NDMOS_OPTION_NO_NDMP4 */ 1109