17917SReza.Sabdar@Sun.COM /* 212186SJanice.Chang@Sun.COM * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 37917SReza.Sabdar@Sun.COM */ 47917SReza.Sabdar@Sun.COM 57917SReza.Sabdar@Sun.COM /* 67917SReza.Sabdar@Sun.COM * BSD 3 Clause License 77917SReza.Sabdar@Sun.COM * 87917SReza.Sabdar@Sun.COM * Copyright (c) 2007, The Storage Networking Industry Association. 97917SReza.Sabdar@Sun.COM * 107917SReza.Sabdar@Sun.COM * Redistribution and use in source and binary forms, with or without 117917SReza.Sabdar@Sun.COM * modification, are permitted provided that the following conditions 127917SReza.Sabdar@Sun.COM * are met: 137917SReza.Sabdar@Sun.COM * - Redistributions of source code must retain the above copyright 147917SReza.Sabdar@Sun.COM * notice, this list of conditions and the following disclaimer. 157917SReza.Sabdar@Sun.COM * 167917SReza.Sabdar@Sun.COM * - Redistributions in binary form must reproduce the above copyright 177917SReza.Sabdar@Sun.COM * notice, this list of conditions and the following disclaimer in 187917SReza.Sabdar@Sun.COM * the documentation and/or other materials provided with the 197917SReza.Sabdar@Sun.COM * distribution. 207917SReza.Sabdar@Sun.COM * 217917SReza.Sabdar@Sun.COM * - Neither the name of The Storage Networking Industry Association (SNIA) 227917SReza.Sabdar@Sun.COM * nor the names of its contributors may be used to endorse or promote 237917SReza.Sabdar@Sun.COM * products derived from this software without specific prior written 247917SReza.Sabdar@Sun.COM * permission. 257917SReza.Sabdar@Sun.COM * 267917SReza.Sabdar@Sun.COM * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 277917SReza.Sabdar@Sun.COM * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 287917SReza.Sabdar@Sun.COM * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 297917SReza.Sabdar@Sun.COM * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 307917SReza.Sabdar@Sun.COM * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 317917SReza.Sabdar@Sun.COM * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 327917SReza.Sabdar@Sun.COM * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 337917SReza.Sabdar@Sun.COM * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 347917SReza.Sabdar@Sun.COM * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 357917SReza.Sabdar@Sun.COM * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 367917SReza.Sabdar@Sun.COM * POSSIBILITY OF SUCH DAMAGE. 377917SReza.Sabdar@Sun.COM */ 387917SReza.Sabdar@Sun.COM /* Copyright (c) 2007, The Storage Networking Industry Association. */ 397917SReza.Sabdar@Sun.COM /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */ 407917SReza.Sabdar@Sun.COM 417917SReza.Sabdar@Sun.COM #ifndef _NDMPD_H 427917SReza.Sabdar@Sun.COM #define _NDMPD_H 437917SReza.Sabdar@Sun.COM 447917SReza.Sabdar@Sun.COM #include <sys/types.h> 457917SReza.Sabdar@Sun.COM #include <libzfs.h> 467917SReza.Sabdar@Sun.COM #include <ndmpd_door.h> 477917SReza.Sabdar@Sun.COM #include <libndmp.h> 487917SReza.Sabdar@Sun.COM #include "ndmpd_common.h" 497917SReza.Sabdar@Sun.COM #include "tlm_buffers.h" 507917SReza.Sabdar@Sun.COM #include <dirent.h> 517917SReza.Sabdar@Sun.COM #include "ndmpd_prop.h" 527917SReza.Sabdar@Sun.COM #include "traverse.h" 537917SReza.Sabdar@Sun.COM #include <pthread.h> 547917SReza.Sabdar@Sun.COM #include <libndmp.h> 557917SReza.Sabdar@Sun.COM #include <atomic.h> 567917SReza.Sabdar@Sun.COM 577917SReza.Sabdar@Sun.COM #define MAX_RECORD_SIZE (126*512) 587917SReza.Sabdar@Sun.COM #define REMOTE_RECORD_SIZE (60*KILOBYTE) 597917SReza.Sabdar@Sun.COM #define SCSI_MAX_NAME 32 607917SReza.Sabdar@Sun.COM #define MD5_CHALLENGE_SIZE 64 617917SReza.Sabdar@Sun.COM #define MD5_PASS_LIMIT 32 627917SReza.Sabdar@Sun.COM 637917SReza.Sabdar@Sun.COM /* Test unit ready */ 647917SReza.Sabdar@Sun.COM #define TUR_WAIT 3000000 657917SReza.Sabdar@Sun.COM #define TUR_MAX_TRY 3 667917SReza.Sabdar@Sun.COM 677917SReza.Sabdar@Sun.COM 687917SReza.Sabdar@Sun.COM /* File handler classes */ 697917SReza.Sabdar@Sun.COM #define HC_CLIENT 1 707917SReza.Sabdar@Sun.COM #define HC_MOVER 2 717917SReza.Sabdar@Sun.COM #define HC_MODULE 4 727917SReza.Sabdar@Sun.COM #define HC_ALL 0xffffffff 737917SReza.Sabdar@Sun.COM 747917SReza.Sabdar@Sun.COM #define IN_ADDR(x) \ 757917SReza.Sabdar@Sun.COM (*(struct in_addr *)&x) 767917SReza.Sabdar@Sun.COM 777917SReza.Sabdar@Sun.COM #define FS_READONLY(fs) (hasmntopt(fs, "ro") ? 1 : 0) 787917SReza.Sabdar@Sun.COM 797917SReza.Sabdar@Sun.COM typedef void *(*funct_t)(void *); /* function pointer */ 807917SReza.Sabdar@Sun.COM 817917SReza.Sabdar@Sun.COM #define HOSTNAMELEN 256 827917SReza.Sabdar@Sun.COM 837917SReza.Sabdar@Sun.COM #define VENDOR_NAME "Sun Microsystems" 847917SReza.Sabdar@Sun.COM #define PRODUCT_NAME "Solaris 5.11" 857917SReza.Sabdar@Sun.COM 867917SReza.Sabdar@Sun.COM /* 877917SReza.Sabdar@Sun.COM * Calculate array length based on its size and size of 887917SReza.Sabdar@Sun.COM * its elements. 897917SReza.Sabdar@Sun.COM */ 907917SReza.Sabdar@Sun.COM #define ARRAY_LEN(a, t) (sizeof (a) / sizeof (t)) 917917SReza.Sabdar@Sun.COM /* 927917SReza.Sabdar@Sun.COM * Default maximum permitted sequence number for the token-based backup. 937917SReza.Sabdar@Sun.COM */ 947917SReza.Sabdar@Sun.COM #define NDMP_MAX_TOKSEQ 9 957917SReza.Sabdar@Sun.COM 967917SReza.Sabdar@Sun.COM /* 977917SReza.Sabdar@Sun.COM * Hard-limit for the sequence number in the token-based backup. 987917SReza.Sabdar@Sun.COM * It's one less than the ASCII value of 'A'. The 'A' letter 997917SReza.Sabdar@Sun.COM * can be used as level in the lbr-type backups. 1007917SReza.Sabdar@Sun.COM */ 1017917SReza.Sabdar@Sun.COM #define NDMP_TOKSEQ_HLIMIT ('A' - 1) 1027917SReza.Sabdar@Sun.COM 1037917SReza.Sabdar@Sun.COM 1047917SReza.Sabdar@Sun.COM /* 1057917SReza.Sabdar@Sun.COM * Soft-limit for the sequence number in the token-based backup. 1067917SReza.Sabdar@Sun.COM */ 1077917SReza.Sabdar@Sun.COM #define NDMP_TOKSEQ_SLIMIT (NDMP_TOKSEQ_HLIMIT - 5) 1087917SReza.Sabdar@Sun.COM 1097917SReza.Sabdar@Sun.COM 1107917SReza.Sabdar@Sun.COM /* 1117917SReza.Sabdar@Sun.COM * Root inode number of dump format in V2. 1127917SReza.Sabdar@Sun.COM */ 1137917SReza.Sabdar@Sun.COM #define ROOT_INODE 2 1147917SReza.Sabdar@Sun.COM 1157917SReza.Sabdar@Sun.COM /* 11612186SJanice.Chang@Sun.COM * NDMP backup image signature 1177917SReza.Sabdar@Sun.COM */ 1187917SReza.Sabdar@Sun.COM #define NDMPUTF8MAGIC "NDMPUTF8MAGIC" 1197917SReza.Sabdar@Sun.COM 1207917SReza.Sabdar@Sun.COM /* 1217917SReza.Sabdar@Sun.COM * Supported BU types 1227917SReza.Sabdar@Sun.COM */ 12312186SJanice.Chang@Sun.COM #define NDMP_TAR_TYPE "tar" 1247917SReza.Sabdar@Sun.COM #define NDMP_DUMP_TYPE "dump" 12512186SJanice.Chang@Sun.COM #define NDMP_ZFS_TYPE "zfs" 1267917SReza.Sabdar@Sun.COM 1277917SReza.Sabdar@Sun.COM /* All 1's binary maximum mover window */ 1287917SReza.Sabdar@Sun.COM #define MAX_WINDOW_SIZE 0xffffffffffffffffULL 1297917SReza.Sabdar@Sun.COM 1307917SReza.Sabdar@Sun.COM #define NDMP_FREE(cp) { free((char *)(cp)); (cp) = NULL; } 1317917SReza.Sabdar@Sun.COM 1327917SReza.Sabdar@Sun.COM #define NDMP_YORN(f) ((f) ? 'Y' : 'N') 1337917SReza.Sabdar@Sun.COM #define NDMP_TORF(f) ((f) ? "TRUE" : "FALSE") 1347917SReza.Sabdar@Sun.COM #define NDMP_SVAL(cp) ((cp) ? (cp) : "NULL") 1357917SReza.Sabdar@Sun.COM 1367917SReza.Sabdar@Sun.COM #define NDMP_SETENV(env, nm, val) \ 1377917SReza.Sabdar@Sun.COM { \ 1387917SReza.Sabdar@Sun.COM env->name = nm; \ 1397917SReza.Sabdar@Sun.COM env->value = val; \ 1407917SReza.Sabdar@Sun.COM env++; \ 1417917SReza.Sabdar@Sun.COM } 1427917SReza.Sabdar@Sun.COM 1437917SReza.Sabdar@Sun.COM #define NDMP_CL_ADDR_LEN 24 1447917SReza.Sabdar@Sun.COM #define NDMP_TCP_ADDR_SIZE 32 1457917SReza.Sabdar@Sun.COM #define NDMP_TAPE_DEV_NAME 256 1467917SReza.Sabdar@Sun.COM 1477917SReza.Sabdar@Sun.COM typedef struct { 1487917SReza.Sabdar@Sun.COM char *bk_path; 1497917SReza.Sabdar@Sun.COM int bk_llevel; /* last backup level */ 1507917SReza.Sabdar@Sun.COM time_t bk_ldate; /* last backup date */ 1517917SReza.Sabdar@Sun.COM int bk_clevel; /* current backup level */ 1527917SReza.Sabdar@Sun.COM time_t bk_cdate; /* current backup date */ 1537917SReza.Sabdar@Sun.COM int bk_map; 1547917SReza.Sabdar@Sun.COM int bk_dirino; 1557917SReza.Sabdar@Sun.COM char *bk_dmpnm; 1567917SReza.Sabdar@Sun.COM char **bk_exl; /* exlude list */ 1577917SReza.Sabdar@Sun.COM char **bk_inc; /* include list */ 1587917SReza.Sabdar@Sun.COM } ndmp_backup_params_t; 1597917SReza.Sabdar@Sun.COM 1607917SReza.Sabdar@Sun.COM 1617917SReza.Sabdar@Sun.COM typedef struct { 1627917SReza.Sabdar@Sun.COM ulong_t rs_nf; /* number of files to restore */ 1637917SReza.Sabdar@Sun.COM char *rs_path; 1647917SReza.Sabdar@Sun.COM char *rs_bkpath; 1657917SReza.Sabdar@Sun.COM int *rs_restored; 1667917SReza.Sabdar@Sun.COM int rs_bm; 1677917SReza.Sabdar@Sun.COM int rs_lastidx; 1687917SReza.Sabdar@Sun.COM } ndmp_restore_params_t; 1697917SReza.Sabdar@Sun.COM 1707917SReza.Sabdar@Sun.COM /* 1717917SReza.Sabdar@Sun.COM * Tar format archiving ops table 1727917SReza.Sabdar@Sun.COM */ 1737917SReza.Sabdar@Sun.COM extern tm_ops_t tm_tar_ops; 1747917SReza.Sabdar@Sun.COM 1757917SReza.Sabdar@Sun.COM /* 1767917SReza.Sabdar@Sun.COM * IS_LBR_BKTYPE shows if the backup type is one of these 1777917SReza.Sabdar@Sun.COM * 'F' of 'f': 'Full' backup type. 1787917SReza.Sabdar@Sun.COM * 'A' of 'a': 'Archive' backup type. 1797917SReza.Sabdar@Sun.COM * 'I' of 'i': 'Incremental' backup type. 1807917SReza.Sabdar@Sun.COM * 'D' of 'd': 'Differntial' backup type. 1817917SReza.Sabdar@Sun.COM */ 1827917SReza.Sabdar@Sun.COM #define IS_LBR_BKTYPE(t) (((t) && strchr("FAID", toupper(t))) ? 1 : 0) 1837917SReza.Sabdar@Sun.COM 1847917SReza.Sabdar@Sun.COM 1857917SReza.Sabdar@Sun.COM /* 1867917SReza.Sabdar@Sun.COM * NLP flags. 1877917SReza.Sabdar@Sun.COM */ 1887917SReza.Sabdar@Sun.COM #define NLPF_CHKPNTED_PATH (1 << 0) 1897917SReza.Sabdar@Sun.COM #define NLPF_FH (1 << 1) 1907917SReza.Sabdar@Sun.COM #define NLPF_DIRECT (1 << 2) 1917917SReza.Sabdar@Sun.COM #define NLPF_UPDATE (1 << 3) 1927917SReza.Sabdar@Sun.COM #define NLPF_DUMP (1 << 4) 1937917SReza.Sabdar@Sun.COM #define NLPF_TAR (1 << 5) 1947917SReza.Sabdar@Sun.COM #define NLPF_ABORTED (1 << 6) 1957917SReza.Sabdar@Sun.COM #define NLPF_TOKENBK (1 << 8) 1967917SReza.Sabdar@Sun.COM #define NLPF_LBRBK (1 << 9) 1977917SReza.Sabdar@Sun.COM #define NLPF_LEVELBK (1 << 10) 1987917SReza.Sabdar@Sun.COM #define NLPF_IGNCTIME (1 << 11) 1997917SReza.Sabdar@Sun.COM #define NLPF_INCLMTIME (1 << 12) 2007917SReza.Sabdar@Sun.COM #define NLPF_RECURSIVE (1 << 13) 2017917SReza.Sabdar@Sun.COM 2027917SReza.Sabdar@Sun.COM /* 2037917SReza.Sabdar@Sun.COM * Macros on NLP flags. 2047917SReza.Sabdar@Sun.COM */ 2057917SReza.Sabdar@Sun.COM #define NLP_ISSET(n, f) (((n)->nlp_flags & (f)) != 0) 2067917SReza.Sabdar@Sun.COM #define NLP_SET(n, f) (n)->nlp_flags |= (f) 2077917SReza.Sabdar@Sun.COM #define NLP_UNSET(n, f) (n)->nlp_flags &= ~(f) 2087917SReza.Sabdar@Sun.COM 2097917SReza.Sabdar@Sun.COM 2107917SReza.Sabdar@Sun.COM #define NLP_ISCHKPNTED(n) NLP_ISSET(n, NLPF_CHKPNTED_PATH) 2117917SReza.Sabdar@Sun.COM #define NLP_SHOULD_UPDATE(n) NLP_ISSET(n, NLPF_UPDATE) 2127917SReza.Sabdar@Sun.COM #define NLP_ISDUMP(n) NLP_ISSET(n, NLPF_DUMP) 2137917SReza.Sabdar@Sun.COM #define NLP_ISTAR(n) NLP_ISSET(n, NLPF_TAR) 2147917SReza.Sabdar@Sun.COM #define NLP_IGNCTIME(n) NLP_ISSET(n, NLPF_IGNCTIME) 2157917SReza.Sabdar@Sun.COM #define NLP_INCLMTIME(n) NLP_ISSET(n, NLPF_INCLMTIME) 2167917SReza.Sabdar@Sun.COM 2177917SReza.Sabdar@Sun.COM /* 2187917SReza.Sabdar@Sun.COM * NDMP statistics 2197917SReza.Sabdar@Sun.COM */ 2207917SReza.Sabdar@Sun.COM #define NS_INC(s) (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s)) 2217917SReza.Sabdar@Sun.COM #define NS_DEC(s) (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s)) 2227917SReza.Sabdar@Sun.COM #define NS_ADD(s, d) (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \ 2237917SReza.Sabdar@Sun.COM (uint64_t)d)) 2247917SReza.Sabdar@Sun.COM #define NS_UPD(s, t) { \ 2257917SReza.Sabdar@Sun.COM atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \ 2267917SReza.Sabdar@Sun.COM atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \ 2277917SReza.Sabdar@Sun.COM } 2287917SReza.Sabdar@Sun.COM 2297917SReza.Sabdar@Sun.COM #define NLP_READY 1 2307917SReza.Sabdar@Sun.COM 2317917SReza.Sabdar@Sun.COM typedef struct ndmp_lbr_params { 2327917SReza.Sabdar@Sun.COM struct ndmpd_session *nlp_session; 2337917SReza.Sabdar@Sun.COM int nlp_flags; 2347917SReza.Sabdar@Sun.COM 2357917SReza.Sabdar@Sun.COM ndmp_backup_params_t bk_params; 2367917SReza.Sabdar@Sun.COM ndmp_restore_params_t rs_params; 2377917SReza.Sabdar@Sun.COM #define nlp_backup_path bk_params.bk_path 2387917SReza.Sabdar@Sun.COM #define nlp_llevel bk_params.bk_llevel 2397917SReza.Sabdar@Sun.COM #define nlp_ldate bk_params.bk_ldate 2407917SReza.Sabdar@Sun.COM #define nlp_clevel bk_params.bk_clevel 2417917SReza.Sabdar@Sun.COM #define nlp_tokseq nlp_clevel 2427917SReza.Sabdar@Sun.COM #define nlp_tokdate nlp_ldate 2437917SReza.Sabdar@Sun.COM #define nlp_cdate bk_params.bk_cdate 2447917SReza.Sabdar@Sun.COM #define nlp_bkmap bk_params.bk_map 2457917SReza.Sabdar@Sun.COM #define nlp_bkdirino bk_params.bk_dirino 2467917SReza.Sabdar@Sun.COM #define nlp_dmpnm bk_params.bk_dmpnm 2477917SReza.Sabdar@Sun.COM #define nlp_exl bk_params.bk_exl 2487917SReza.Sabdar@Sun.COM #define nlp_inc bk_params.bk_inc 2497917SReza.Sabdar@Sun.COM 2507917SReza.Sabdar@Sun.COM #define nlp_nfiles rs_params.rs_nf 2517917SReza.Sabdar@Sun.COM #define nlp_restore_path rs_params.rs_path 2527917SReza.Sabdar@Sun.COM #define nlp_restore_bk_path rs_params.rs_bkpath 2537917SReza.Sabdar@Sun.COM #define nlp_restored rs_params.rs_restored 2547917SReza.Sabdar@Sun.COM #define nlp_rsbm rs_params.rs_bm 2557917SReza.Sabdar@Sun.COM #define nlp_lastidx rs_params.rs_lastidx 2567917SReza.Sabdar@Sun.COM 2577917SReza.Sabdar@Sun.COM ndmpd_module_params_t *nlp_params; 2587917SReza.Sabdar@Sun.COM tlm_job_stats_t *nlp_jstat; 2597917SReza.Sabdar@Sun.COM lbr_fhlog_call_backs_t *nlp_logcallbacks; 2607917SReza.Sabdar@Sun.COM tlm_commands_t nlp_cmds; 2617917SReza.Sabdar@Sun.COM struct { 2627917SReza.Sabdar@Sun.COM /* 2637917SReza.Sabdar@Sun.COM * nw: shows the number of threads waiting for a request 2647917SReza.Sabdar@Sun.COM * to be processed. 2657917SReza.Sabdar@Sun.COM * rv: if error occurred when processing a request. 2667917SReza.Sabdar@Sun.COM */ 2677917SReza.Sabdar@Sun.COM int ev_nw; 2687917SReza.Sabdar@Sun.COM int ev_rv; 2697917SReza.Sabdar@Sun.COM } nlp_event; 2707917SReza.Sabdar@Sun.COM cond_t nlp_cv; 2717917SReza.Sabdar@Sun.COM int nlp_flag; 2727917SReza.Sabdar@Sun.COM #define nlp_nw nlp_event.ev_nw 2737917SReza.Sabdar@Sun.COM #define nlp_rv nlp_event.ev_rv 2747917SReza.Sabdar@Sun.COM u_longlong_t nlp_bytes_total; 2757917SReza.Sabdar@Sun.COM } ndmp_lbr_params_t; 2767917SReza.Sabdar@Sun.COM 2777917SReza.Sabdar@Sun.COM 2787917SReza.Sabdar@Sun.COM typedef struct mem_ndmp_name_v3 { 2797917SReza.Sabdar@Sun.COM char *nm3_opath; 2807917SReza.Sabdar@Sun.COM char *nm3_dpath; 2817917SReza.Sabdar@Sun.COM char *nm3_newnm; 2827917SReza.Sabdar@Sun.COM u_longlong_t nm3_node; 2837917SReza.Sabdar@Sun.COM u_longlong_t nm3_fh_info; 2847917SReza.Sabdar@Sun.COM ndmp_error nm3_err; 2857917SReza.Sabdar@Sun.COM } mem_ndmp_name_v3_t; 2867917SReza.Sabdar@Sun.COM 2877917SReza.Sabdar@Sun.COM typedef struct ndmpd_file_handler { 2887917SReza.Sabdar@Sun.COM int fh_fd; 2897917SReza.Sabdar@Sun.COM ulong_t fh_mode; 2907917SReza.Sabdar@Sun.COM ulong_t fh_class; 2917917SReza.Sabdar@Sun.COM void *fh_cookie; 2927917SReza.Sabdar@Sun.COM ndmpd_file_handler_func_t *fh_func; 2937917SReza.Sabdar@Sun.COM struct ndmpd_file_handler *fh_next; 2947917SReza.Sabdar@Sun.COM } ndmpd_file_handler_t; 2957917SReza.Sabdar@Sun.COM 2967917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_scsi_desc { 2977917SReza.Sabdar@Sun.COM int sd_is_open; 2987917SReza.Sabdar@Sun.COM int sd_devid; 2997917SReza.Sabdar@Sun.COM boolean_t sd_valid_target_set; 3007917SReza.Sabdar@Sun.COM int sd_sid; 3017917SReza.Sabdar@Sun.COM int sd_lun; 3027917SReza.Sabdar@Sun.COM char sd_adapter_name[SCSI_MAX_NAME]; 3037917SReza.Sabdar@Sun.COM } ndmpd_session_scsi_desc_t; 3047917SReza.Sabdar@Sun.COM 3057917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_tape_desc { 3067917SReza.Sabdar@Sun.COM int td_fd; /* tape device file descriptor */ 3077917SReza.Sabdar@Sun.COM ulong_t td_record_count; /* number of records written */ 3087917SReza.Sabdar@Sun.COM ndmp_tape_open_mode td_mode; /* tape device open mode */ 3097917SReza.Sabdar@Sun.COM u_longlong_t td_pos; /* current position on the current tape */ 3107917SReza.Sabdar@Sun.COM int td_sid; 3117917SReza.Sabdar@Sun.COM int td_lun; 3127917SReza.Sabdar@Sun.COM char td_adapter_name[SCSI_MAX_NAME]; 3137917SReza.Sabdar@Sun.COM ulong_t td_eom_seen:1, 3147917SReza.Sabdar@Sun.COM td_io_err:1, 3157917SReza.Sabdar@Sun.COM td_write:1; 3167917SReza.Sabdar@Sun.COM } ndmpd_session_tape_desc_t; 3177917SReza.Sabdar@Sun.COM 3187917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_mover_desc { 3197917SReza.Sabdar@Sun.COM ndmp_mover_state md_state; /* current state */ 3207917SReza.Sabdar@Sun.COM ndmp_mover_mode md_mode; /* current mode */ 3217917SReza.Sabdar@Sun.COM ndmp_mover_pause_reason md_pause_reason; /* current reason */ 3227917SReza.Sabdar@Sun.COM ndmp_mover_halt_reason md_halt_reason; /* current reason */ 3237917SReza.Sabdar@Sun.COM u_longlong_t md_data_written; /* total written to tape */ 3247917SReza.Sabdar@Sun.COM u_longlong_t md_seek_position; /* current seek position */ 3257917SReza.Sabdar@Sun.COM u_longlong_t md_bytes_left_to_read; /* #bytes to end of seek window */ 3267917SReza.Sabdar@Sun.COM u_longlong_t md_window_offset; /* valid data window begin */ 3277917SReza.Sabdar@Sun.COM u_longlong_t md_window_length; /* valid data window length */ 3287917SReza.Sabdar@Sun.COM u_longlong_t md_position; /* current data stream pos */ 3297917SReza.Sabdar@Sun.COM boolean_t md_pre_cond; /* used for precondition checks */ 3307917SReza.Sabdar@Sun.COM ulong_t md_record_size; /* tape I/O record size */ 3317917SReza.Sabdar@Sun.COM ulong_t md_record_num; /* current record num */ 3327917SReza.Sabdar@Sun.COM int md_listen_sock; /* data conn listen socket */ 3337917SReza.Sabdar@Sun.COM int md_sock; /* data conn socket */ 3347917SReza.Sabdar@Sun.COM ulong_t md_r_index; /* buffer read index */ 3357917SReza.Sabdar@Sun.COM ulong_t md_w_index; /* buffer write index */ 3367917SReza.Sabdar@Sun.COM char *md_buf; /* data buffer */ 3377917SReza.Sabdar@Sun.COM /* 3387917SReza.Sabdar@Sun.COM * V2 fields. 3397917SReza.Sabdar@Sun.COM */ 3407917SReza.Sabdar@Sun.COM ulong_t md_discard_length; /* bytes to discard */ 3417917SReza.Sabdar@Sun.COM 3427917SReza.Sabdar@Sun.COM /* 3437917SReza.Sabdar@Sun.COM * V3 fields. 3447917SReza.Sabdar@Sun.COM */ 3457917SReza.Sabdar@Sun.COM ndmp_addr_v3 md_data_addr; 3467917SReza.Sabdar@Sun.COM /* 3477917SReza.Sabdar@Sun.COM * V4 fields. 3487917SReza.Sabdar@Sun.COM */ 3497917SReza.Sabdar@Sun.COM ndmp_addr_v4 md_data_addr_v4; 3507917SReza.Sabdar@Sun.COM } ndmpd_session_mover_desc_t; 3517917SReza.Sabdar@Sun.COM 3527917SReza.Sabdar@Sun.COM 3537917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_data_module { 3547917SReza.Sabdar@Sun.COM void *dm_module_cookie; /* sent as abort_func param */ 3557917SReza.Sabdar@Sun.COM module_start_func_t *dm_start_func; /* start function */ 3567917SReza.Sabdar@Sun.COM module_abort_func_t *dm_abort_func; /* abort function */ 3577917SReza.Sabdar@Sun.COM ndmpd_module_stats dm_stats; /* statistics buffer */ 3587917SReza.Sabdar@Sun.COM } ndmpd_session_data_module_t; 3597917SReza.Sabdar@Sun.COM 3607917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_data_desc { 3617917SReza.Sabdar@Sun.COM /* 3627917SReza.Sabdar@Sun.COM * Common fields. 3637917SReza.Sabdar@Sun.COM */ 3647917SReza.Sabdar@Sun.COM ndmp_data_operation dd_operation; /* current operation */ 3657917SReza.Sabdar@Sun.COM boolean_t dd_abort; /* abort operation flag */ 3667917SReza.Sabdar@Sun.COM boolean_t dd_io_ready; /* mover sock read for I/O */ 3677917SReza.Sabdar@Sun.COM ndmp_pval *dd_env; /* environment from backup or recover request */ 3687917SReza.Sabdar@Sun.COM ulong_t dd_env_len; /* environment length */ 3697917SReza.Sabdar@Sun.COM ulong_t dd_nlist_len; /* recover file list length */ 3707917SReza.Sabdar@Sun.COM int dd_sock; /* listen and data socket */ 3717917SReza.Sabdar@Sun.COM u_longlong_t dd_read_offset; /* data read seek offset */ 3727917SReza.Sabdar@Sun.COM u_longlong_t dd_read_length; /* data read length */ 3737917SReza.Sabdar@Sun.COM u_longlong_t dd_data_size; /* data size to be backed up */ 3747917SReza.Sabdar@Sun.COM ndmpd_session_data_module_t dd_module; 3757917SReza.Sabdar@Sun.COM 3767917SReza.Sabdar@Sun.COM ndmp_data_state dd_state; /* current state */ 3777917SReza.Sabdar@Sun.COM ndmp_data_halt_reason dd_halt_reason; /* current reason */ 3787917SReza.Sabdar@Sun.COM /* 3797917SReza.Sabdar@Sun.COM * V2 fields. 3807917SReza.Sabdar@Sun.COM */ 3817917SReza.Sabdar@Sun.COM ndmp_name *dd_nlist; /* recover file list */ 3827917SReza.Sabdar@Sun.COM ndmp_mover_addr dd_mover; /* mover address */ 3837917SReza.Sabdar@Sun.COM /* 3847917SReza.Sabdar@Sun.COM * V3 fields. 3857917SReza.Sabdar@Sun.COM */ 3867917SReza.Sabdar@Sun.COM mem_ndmp_name_v3_t *dd_nlist_v3; 3877917SReza.Sabdar@Sun.COM ndmp_addr_v3 dd_data_addr; 3887917SReza.Sabdar@Sun.COM int dd_listen_sock; /* socket for listening for remote */ 3897917SReza.Sabdar@Sun.COM /* mover connections */ 3907917SReza.Sabdar@Sun.COM u_longlong_t dd_bytes_left_to_read; 3917917SReza.Sabdar@Sun.COM u_longlong_t dd_position; 3927917SReza.Sabdar@Sun.COM u_longlong_t dd_discard_length; 3937917SReza.Sabdar@Sun.COM /* 3947917SReza.Sabdar@Sun.COM * V4 fields. 3957917SReza.Sabdar@Sun.COM */ 3967917SReza.Sabdar@Sun.COM ndmp_addr_v4 dd_data_addr_v4; 3977917SReza.Sabdar@Sun.COM } ndmpd_session_data_desc_t; 3987917SReza.Sabdar@Sun.COM 3997917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_file_history { 4007917SReza.Sabdar@Sun.COM ndmp_fh_unix_path *fh_path_entries; 4017917SReza.Sabdar@Sun.COM ndmp_fh_unix_dir *fh_dir_entries; 4027917SReza.Sabdar@Sun.COM ndmp_fh_unix_node *fh_node_entries; 4037917SReza.Sabdar@Sun.COM char *fh_path_name_buf; 4047917SReza.Sabdar@Sun.COM char *fh_dir_name_buf; 4057917SReza.Sabdar@Sun.COM ulong_t fh_path_index; 4067917SReza.Sabdar@Sun.COM ulong_t fh_dir_index; 4077917SReza.Sabdar@Sun.COM ulong_t fh_node_index; 4087917SReza.Sabdar@Sun.COM ulong_t fh_path_name_buf_index; 4097917SReza.Sabdar@Sun.COM ulong_t fh_dir_name_buf_index; 4107917SReza.Sabdar@Sun.COM } ndmpd_session_file_history_t; 4117917SReza.Sabdar@Sun.COM 4127917SReza.Sabdar@Sun.COM typedef struct ndmpd_session_file_history_v3 { 4137917SReza.Sabdar@Sun.COM ndmp_file_v3 *fh_files; 4147917SReza.Sabdar@Sun.COM ndmp_dir_v3 *fh_dirs; 4157917SReza.Sabdar@Sun.COM ndmp_node_v3 *fh_nodes; 4167917SReza.Sabdar@Sun.COM ndmp_file_name_v3 *fh_file_names; 4177917SReza.Sabdar@Sun.COM ndmp_file_name_v3 *fh_dir_names; 4187917SReza.Sabdar@Sun.COM ndmp_file_stat_v3 *fh_file_stats; 4197917SReza.Sabdar@Sun.COM ndmp_file_stat_v3 *fh_node_stats; 4207917SReza.Sabdar@Sun.COM char *fh_file_name_buf; 4217917SReza.Sabdar@Sun.COM char *fh_dir_name_buf; 4227917SReza.Sabdar@Sun.COM ulong_t fh_file_index; 4237917SReza.Sabdar@Sun.COM ulong_t fh_dir_index; 4247917SReza.Sabdar@Sun.COM ulong_t fh_node_index; 4257917SReza.Sabdar@Sun.COM ulong_t fh_file_name_buf_index; 4267917SReza.Sabdar@Sun.COM ulong_t fh_dir_name_buf_index; 4277917SReza.Sabdar@Sun.COM } ndmpd_session_file_history_v3_t; 4287917SReza.Sabdar@Sun.COM 42912186SJanice.Chang@Sun.COM /* 43012186SJanice.Chang@Sun.COM * zfs-based backup (zfs send/recv) 43112186SJanice.Chang@Sun.COM */ 43212186SJanice.Chang@Sun.COM 43312186SJanice.Chang@Sun.COM typedef enum { 43412186SJanice.Chang@Sun.COM NDMPD_ZFS_MAJOR_0, 43512186SJanice.Chang@Sun.COM } ndmpd_zfs_major_t; 43612186SJanice.Chang@Sun.COM 43712186SJanice.Chang@Sun.COM typedef enum { 43812186SJanice.Chang@Sun.COM NDMPD_ZFS_MINOR_0, 43912186SJanice.Chang@Sun.COM } ndmpd_zfs_minor_t; 44012186SJanice.Chang@Sun.COM 44112186SJanice.Chang@Sun.COM typedef enum { 44212186SJanice.Chang@Sun.COM NDMPD_ZFS_PROP_MAJOR_0, 44312186SJanice.Chang@Sun.COM } ndmpd_zfs_prop_major_t; 44412186SJanice.Chang@Sun.COM 44512186SJanice.Chang@Sun.COM typedef enum { 44612186SJanice.Chang@Sun.COM NDMPD_ZFS_PROP_MINOR_0, 44712186SJanice.Chang@Sun.COM } ndmpd_zfs_prop_minor_t; 44812186SJanice.Chang@Sun.COM 44912186SJanice.Chang@Sun.COM #define NDMPD_ZFS_MAJOR_VERSION NDMPD_ZFS_MAJOR_0 45012186SJanice.Chang@Sun.COM #define NDMPD_ZFS_MINOR_VERSION NDMPD_ZFS_MINOR_0 45112186SJanice.Chang@Sun.COM #define NDMPD_ZFS_PROP_MAJOR_VERSION NDMPD_ZFS_PROP_MAJOR_0 45212186SJanice.Chang@Sun.COM #define NDMPD_ZFS_PROP_MINOR_VERSION NDMPD_ZFS_PROP_MINOR_0 45312186SJanice.Chang@Sun.COM 45412186SJanice.Chang@Sun.COM #pragma pack(1) 45512186SJanice.Chang@Sun.COM typedef struct { 45612186SJanice.Chang@Sun.COM char nzh_magic[14]; /* NDMPUTF8MAGIC\0 */ 45712186SJanice.Chang@Sun.COM uint32_t nzh_major; /* major version */ 45812186SJanice.Chang@Sun.COM uint32_t nzh_minor; /* minor version */ 45912186SJanice.Chang@Sun.COM uint32_t nzh_hdrlen; /* length of hdr in bytes including magic */ 46012186SJanice.Chang@Sun.COM /* future extensions */ 46112186SJanice.Chang@Sun.COM } ndmpd_zfs_header_t; 46212186SJanice.Chang@Sun.COM #pragma pack() 46312186SJanice.Chang@Sun.COM 46412186SJanice.Chang@Sun.COM #define PIPE_TAPE 0 46512186SJanice.Chang@Sun.COM #define PIPE_ZFS 1 46612186SJanice.Chang@Sun.COM 46712186SJanice.Chang@Sun.COM #define NDMPD_ZFS_DMP_NAME_MAX 32 46812186SJanice.Chang@Sun.COM 46912186SJanice.Chang@Sun.COM typedef struct ndmpd_zfs_args { 47012186SJanice.Chang@Sun.COM zfs_type_t nz_type; /* type of ZFS dataset */ 47112186SJanice.Chang@Sun.COM char nz_dataset[ZFS_MAXNAMELEN]; /* dataset name */ 47212186SJanice.Chang@Sun.COM char nz_snapname[ZFS_MAXNAMELEN]; /* snapname (following '@') */ 47312186SJanice.Chang@Sun.COM char nz_fromsnap[ZFS_MAXNAMELEN]; /* snap of L-1 bkup */ 47412186SJanice.Chang@Sun.COM char nz_snapprop[ZFS_MAXPROPLEN]; /* contents of snap incr prop */ 47512186SJanice.Chang@Sun.COM boolean_t nz_ndmpd_snap; /* ndmpd-generated snap? */ 47612186SJanice.Chang@Sun.COM 47712186SJanice.Chang@Sun.COM pthread_t nz_sendrecv_thread; /* thread for send/recv */ 47812186SJanice.Chang@Sun.COM pthread_t nz_tape_thread; /* thread for tape r/w */ 47912186SJanice.Chang@Sun.COM int32_t nz_pipe_fd[2]; /* pipe for above 2 threads */ 48012186SJanice.Chang@Sun.COM int32_t nz_bufsize; /* tape r/w buf size */ 48112186SJanice.Chang@Sun.COM int64_t nz_window_len; /* DMA window length */ 48212186SJanice.Chang@Sun.COM 48312186SJanice.Chang@Sun.COM int nz_level; /* val of LEVEL env var */ 48412186SJanice.Chang@Sun.COM char nz_zfs_mode; /* val of ZFS_MODE env var */ 48512186SJanice.Chang@Sun.COM boolean_t nz_zfs_force; /* val of ZFS_FORCE env var */ 48612186SJanice.Chang@Sun.COM boolean_t nz_update; /* val of UPDATE env var */ 48712186SJanice.Chang@Sun.COM char nz_dmp_name[NDMPD_ZFS_DMP_NAME_MAX]; /* val of DMP_NAME env var */ 48812740SJanice.Chang@Sun.COM u_longlong_t nz_zfs_backup_size; /* used for restore only */ 48912186SJanice.Chang@Sun.COM 49012186SJanice.Chang@Sun.COM ndmpd_module_params_t nz_params; 49112186SJanice.Chang@Sun.COM ndmp_lbr_params_t *nz_nlp; 49212186SJanice.Chang@Sun.COM libzfs_handle_t *nz_zlibh; /* session-specific lzfs hdl */ 49312186SJanice.Chang@Sun.COM ndmp_context_t nz_nctx; /* used by plugin */ 49412186SJanice.Chang@Sun.COM 49512186SJanice.Chang@Sun.COM ndmpd_zfs_header_t nz_tape_header; /* tape hdr for "zfs" backup */ 49612186SJanice.Chang@Sun.COM } ndmpd_zfs_args_t; 49712186SJanice.Chang@Sun.COM 49812186SJanice.Chang@Sun.COM #define ndmpd_zfs_params (&(ndmpd_zfs_args)->nz_params) 49912186SJanice.Chang@Sun.COM 5007917SReza.Sabdar@Sun.COM typedef struct ndmpd_session { 5017917SReza.Sabdar@Sun.COM ndmp_connection_t *ns_connection; /* NDMP connection to client */ 5027917SReza.Sabdar@Sun.COM boolean_t ns_eof; /* connection EOF flag */ 5037917SReza.Sabdar@Sun.COM ushort_t ns_protocol_version; /* connection protocol version */ 5047917SReza.Sabdar@Sun.COM ndmpd_session_scsi_desc_t ns_scsi; 5057917SReza.Sabdar@Sun.COM ndmpd_session_tape_desc_t ns_tape; 5067917SReza.Sabdar@Sun.COM ndmpd_session_mover_desc_t ns_mover; 5077917SReza.Sabdar@Sun.COM ndmpd_session_data_desc_t ns_data; 5087917SReza.Sabdar@Sun.COM ndmpd_session_file_history_t ns_fh; 5097917SReza.Sabdar@Sun.COM ndmpd_file_handler_t *ns_file_handler_list; /* for I/O multiplexing */ 5107917SReza.Sabdar@Sun.COM int ns_nref; 5117917SReza.Sabdar@Sun.COM ndmp_lbr_params_t *ns_ndmp_lbr_params; 51212186SJanice.Chang@Sun.COM struct ndmpd_zfs_args ns_ndmpd_zfs_args; 51312186SJanice.Chang@Sun.COM ndmpd_backup_type_t ns_butype; 5147917SReza.Sabdar@Sun.COM mutex_t ns_lock; 5157917SReza.Sabdar@Sun.COM 5167917SReza.Sabdar@Sun.COM /* 5177917SReza.Sabdar@Sun.COM * NDMP V3 5187917SReza.Sabdar@Sun.COM * Tape, SCSI, mover, data and file handlers will 5197917SReza.Sabdar@Sun.COM * be shared between V2 and V3. 5207917SReza.Sabdar@Sun.COM */ 5217917SReza.Sabdar@Sun.COM ndmpd_session_file_history_v3_t ns_fh_v3; 5227917SReza.Sabdar@Sun.COM unsigned char ns_challenge[MD5_CHALLENGE_SIZE]; /* For MD5 */ 5237917SReza.Sabdar@Sun.COM 5247917SReza.Sabdar@Sun.COM /* 5257917SReza.Sabdar@Sun.COM * NDMP V4 related data 5267917SReza.Sabdar@Sun.COM */ 5277917SReza.Sabdar@Sun.COM boolean_t ns_set_ext_list; 5287917SReza.Sabdar@Sun.COM 5297917SReza.Sabdar@Sun.COM /* handling of hardlink, hardlink queue head */ 5307917SReza.Sabdar@Sun.COM struct hardlink_q *hardlink_q; 5317917SReza.Sabdar@Sun.COM } ndmpd_session_t; 5327917SReza.Sabdar@Sun.COM 5337917SReza.Sabdar@Sun.COM 5347917SReza.Sabdar@Sun.COM /* 5357917SReza.Sabdar@Sun.COM * NDMP request handler functions. 5367917SReza.Sabdar@Sun.COM */ 5377917SReza.Sabdar@Sun.COM 5387917SReza.Sabdar@Sun.COM /* Config */ 5397917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_host_info_v2; 5407917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_butype_attr_v2; 5417917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_mover_type_v2; 5427917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v2; 5437917SReza.Sabdar@Sun.COM 5447917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_host_info_v3; 5457917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v3; 5467917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_connection_type_v3; 5477917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v3; 5487917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_fs_info_v3; 5497917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_tape_info_v3; 5507917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_scsi_info_v3; 5517917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_server_info_v3; 5527917SReza.Sabdar@Sun.COM 5537917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v4; 5547917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_get_ext_list_v4; 5557917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_config_set_ext_list_v4; 5567917SReza.Sabdar@Sun.COM 5577917SReza.Sabdar@Sun.COM 5587917SReza.Sabdar@Sun.COM /* Scsi */ 5597917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_open_v2; 5607917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_close_v2; 5617917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_get_state_v2; 5627917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_set_target_v2; 5637917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_reset_device_v2; 5647917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_reset_bus_v2; 5657917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_execute_cdb_v2; 5667917SReza.Sabdar@Sun.COM 5677917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_open_v3; 5687917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_scsi_set_target_v3; 5697917SReza.Sabdar@Sun.COM 5707917SReza.Sabdar@Sun.COM 5717917SReza.Sabdar@Sun.COM /* Tape */ 5727917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_open_v2; 5737917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_close_v2; 5747917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_get_state_v2; 5757917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_mtio_v2; 5767917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_write_v2; 5777917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_read_v2; 5787917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_execute_cdb_v2; 5797917SReza.Sabdar@Sun.COM 5807917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_open_v3; 5817917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_get_state_v3; 5827917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_write_v3; 5837917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_read_v3; 5847917SReza.Sabdar@Sun.COM 5857917SReza.Sabdar@Sun.COM 5867917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_tape_close_v4; 5877917SReza.Sabdar@Sun.COM /* Data */ 5887917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_get_state_v2; 5897917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_start_backup_v2; 5907917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_start_recover_v2; 5917917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_get_env_v2; 5927917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_stop_v2; 5937917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_abort_v2; 5947917SReza.Sabdar@Sun.COM 5957917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_get_state_v3; 5967917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_connect_v3; 5977917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_listen_v3; 5987917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_stop_v3; 5997917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_abort_v3; 6007917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_start_recover_v3; 6017917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_start_backup_v3; 6027917SReza.Sabdar@Sun.COM 6037917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_get_env_v4; 6047917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_get_state_v4; 6057917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_connect_v4; 6067917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_listen_v4; 6077917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_data_start_recover_filehist_v4; 6087917SReza.Sabdar@Sun.COM 6097917SReza.Sabdar@Sun.COM 6107917SReza.Sabdar@Sun.COM /* Connect */ 6117917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_open_v2; 6127917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_client_auth_v2; 6137917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_server_auth_v2; 6147917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_close_v2; 6157917SReza.Sabdar@Sun.COM 6167917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_client_auth_v3; 6177917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_connect_close_v3; 6187917SReza.Sabdar@Sun.COM 6197917SReza.Sabdar@Sun.COM 6207917SReza.Sabdar@Sun.COM /* Mover */ 6217917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_get_state_v2; 6227917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_listen_v2; 6237917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_continue_v2; 6247917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_abort_v2; 6257917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_stop_v2; 6267917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_set_window_v2; 6277917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_read_v2; 6287917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_close_v2; 6297917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v2; 6307917SReza.Sabdar@Sun.COM 6317917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_get_state_v3; 6327917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_listen_v3; 6337917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_continue_v3; 6347917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_abort_v3; 6357917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_set_window_v3; 6367917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_read_v3; 6377917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v3; 6387917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_connect_v3; 6397917SReza.Sabdar@Sun.COM 6407917SReza.Sabdar@Sun.COM 6417917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_get_state_v4; 6427917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_listen_v4; 6437917SReza.Sabdar@Sun.COM ndmp_msg_handler_func_t ndmpd_mover_connect_v4; 6447917SReza.Sabdar@Sun.COM 6457917SReza.Sabdar@Sun.COM 6467917SReza.Sabdar@Sun.COM /* 6477917SReza.Sabdar@Sun.COM * Backup/recover module API functions. 6487917SReza.Sabdar@Sun.COM */ 6497917SReza.Sabdar@Sun.COM ndmpd_get_env_func_t ndmpd_api_get_env; 6507917SReza.Sabdar@Sun.COM ndmpd_add_env_func_t ndmpd_api_add_env; 6517917SReza.Sabdar@Sun.COM ndmpd_add_env_func_t ndmpd_api_set_env; 6527917SReza.Sabdar@Sun.COM ndmpd_get_name_func_t ndmpd_api_get_name; 6537917SReza.Sabdar@Sun.COM ndmpd_dispatch_func_t ndmpd_api_dispatch; 6547917SReza.Sabdar@Sun.COM ndmpd_done_func_t ndmpd_api_done_v2; 6557917SReza.Sabdar@Sun.COM 6567917SReza.Sabdar@Sun.COM 6577917SReza.Sabdar@Sun.COM ndmpd_write_func_t ndmpd_api_write_v2; 6587917SReza.Sabdar@Sun.COM ndmpd_file_history_path_func_t ndmpd_api_file_history_path_v2; 6597917SReza.Sabdar@Sun.COM ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v2; 6607917SReza.Sabdar@Sun.COM ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v2; 6617917SReza.Sabdar@Sun.COM ndmpd_read_func_t ndmpd_api_read_v2; 6627917SReza.Sabdar@Sun.COM ndmpd_seek_func_t ndmpd_api_seek_v2; 6637917SReza.Sabdar@Sun.COM ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v2; 6647917SReza.Sabdar@Sun.COM ndmpd_add_file_handler_func_t ndmpd_api_add_file_handler; 6657917SReza.Sabdar@Sun.COM ndmpd_remove_file_handler_func_t ndmpd_api_remove_file_handler; 6667917SReza.Sabdar@Sun.COM 6677917SReza.Sabdar@Sun.COM 6687917SReza.Sabdar@Sun.COM /* 6697917SReza.Sabdar@Sun.COM * NDMP V3 6707917SReza.Sabdar@Sun.COM */ 6717917SReza.Sabdar@Sun.COM ndmpd_done_func_t ndmpd_api_done_v3; 6727917SReza.Sabdar@Sun.COM ndmpd_write_func_t ndmpd_api_write_v3; 6737917SReza.Sabdar@Sun.COM ndmpd_read_func_t ndmpd_api_read_v3; 6747917SReza.Sabdar@Sun.COM ndmpd_seek_func_t ndmpd_api_seek_v3; 6757917SReza.Sabdar@Sun.COM ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v3; 6767917SReza.Sabdar@Sun.COM ndmpd_get_name_func_t ndmpd_api_get_name_v3; 6777917SReza.Sabdar@Sun.COM ndmpd_file_history_path_func_t ndmpd_api_file_history_file_v3; 6787917SReza.Sabdar@Sun.COM ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v3; 6797917SReza.Sabdar@Sun.COM ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v3; 6807917SReza.Sabdar@Sun.COM 6817917SReza.Sabdar@Sun.COM /* 6827917SReza.Sabdar@Sun.COM * NDMP V4 6837917SReza.Sabdar@Sun.COM */ 6847917SReza.Sabdar@Sun.COM ndmpd_log_func_v3_t ndmpd_api_log_v4; 6857917SReza.Sabdar@Sun.COM ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4; 6867917SReza.Sabdar@Sun.COM 6877917SReza.Sabdar@Sun.COM #ifndef NO_NDMP_API_LOG_PROTOTYPES 6887917SReza.Sabdar@Sun.COM ndmpd_log_func_t ndmpd_api_log_v2; 6897917SReza.Sabdar@Sun.COM ndmpd_log_func_v3_t ndmpd_api_log_v3; 6907917SReza.Sabdar@Sun.COM #endif /* NO_NDMP_API_LOG_PROTOTYPES */ 6917917SReza.Sabdar@Sun.COM 6927917SReza.Sabdar@Sun.COM typedef void ndmpd_func_t(ndmp_connection_t *, void *); 6937917SReza.Sabdar@Sun.COM 6947917SReza.Sabdar@Sun.COM /* 6957917SReza.Sabdar@Sun.COM * pthread call arg parameters 6967917SReza.Sabdar@Sun.COM */ 6977917SReza.Sabdar@Sun.COM typedef struct { 6987917SReza.Sabdar@Sun.COM int nw_sock; 6997917SReza.Sabdar@Sun.COM long nw_ipaddr; 7007917SReza.Sabdar@Sun.COM ndmp_con_handler_func_t nw_con_handler_func; 7017917SReza.Sabdar@Sun.COM } ndmpd_worker_arg_t; 7027917SReza.Sabdar@Sun.COM 7037917SReza.Sabdar@Sun.COM typedef struct { 7047917SReza.Sabdar@Sun.COM char *br_jname; 7057917SReza.Sabdar@Sun.COM ndmp_lbr_params_t *br_nlp; 7067917SReza.Sabdar@Sun.COM tlm_commands_t *br_cmds; 7077917SReza.Sabdar@Sun.COM pthread_barrier_t br_barrier; 7087917SReza.Sabdar@Sun.COM } backup_reader_arg_t; 7097917SReza.Sabdar@Sun.COM 7107917SReza.Sabdar@Sun.COM typedef struct { 7117917SReza.Sabdar@Sun.COM ndmpd_session_t *tr_session; 7127917SReza.Sabdar@Sun.COM ndmpd_module_params_t *tr_mod_params; 7137917SReza.Sabdar@Sun.COM tlm_commands_t *tr_cmds; 7147917SReza.Sabdar@Sun.COM } ndmp_tar_reader_arg_t; 7157917SReza.Sabdar@Sun.COM 71610038SReza.Sabdar@Sun.COM typedef struct { 71710038SReza.Sabdar@Sun.COM ndmpd_session_t *bs_session; 71810038SReza.Sabdar@Sun.COM char *bs_jname; 71910038SReza.Sabdar@Sun.COM char *bs_path; 72010038SReza.Sabdar@Sun.COM } ndmp_bkup_size_arg_t; 72110038SReza.Sabdar@Sun.COM 7227917SReza.Sabdar@Sun.COM /* 7237917SReza.Sabdar@Sun.COM * Variables from ndmpd_comm.c 7247917SReza.Sabdar@Sun.COM */ 7257917SReza.Sabdar@Sun.COM extern int ndmp_ver; 7267917SReza.Sabdar@Sun.COM extern int ndmp_full_restore_path; 7277917SReza.Sabdar@Sun.COM extern int ndmp_dar_support; 7287917SReza.Sabdar@Sun.COM extern int ndmp_port; 7297917SReza.Sabdar@Sun.COM extern ndmp_stat_t ndstat; 7307917SReza.Sabdar@Sun.COM 7317917SReza.Sabdar@Sun.COM extern void ndmpd_main(void); 7327917SReza.Sabdar@Sun.COM extern void connection_handler(ndmp_connection_t *); 7337917SReza.Sabdar@Sun.COM extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path, 7347917SReza.Sabdar@Sun.COM int dest, char *local_path, int result); 7357917SReza.Sabdar@Sun.COM extern void ndmpd_audit_restore(ndmp_connection_t *conn, 7367917SReza.Sabdar@Sun.COM char *path, int dest, char *local_path, int result); 7377917SReza.Sabdar@Sun.COM extern void ndmpd_audit_connect(ndmp_connection_t *conn, 7387917SReza.Sabdar@Sun.COM int result); 7397917SReza.Sabdar@Sun.COM extern void ndmpd_audit_disconnect(ndmp_connection_t *conn); 7407917SReza.Sabdar@Sun.COM 7417917SReza.Sabdar@Sun.COM /* Variables from ndmpd_main.c */ 7427917SReza.Sabdar@Sun.COM extern libzfs_handle_t *zlibh; 7437917SReza.Sabdar@Sun.COM extern mutex_t zlib_mtx; 7447917SReza.Sabdar@Sun.COM 7457917SReza.Sabdar@Sun.COM /* 7467917SReza.Sabdar@Sun.COM * Utility from ndmpd_connect.c. 7477917SReza.Sabdar@Sun.COM */ 7487917SReza.Sabdar@Sun.COM extern int ndmp_connect_list_add(ndmp_connection_t *, int *); 7497917SReza.Sabdar@Sun.COM extern int ndmp_connect_list_del(ndmp_connection_t *); 7507917SReza.Sabdar@Sun.COM extern int ndmpd_connect_kill_id(int); 7517917SReza.Sabdar@Sun.COM extern void ndmp_connect_list_get(ndmp_door_ctx_t *); 7527917SReza.Sabdar@Sun.COM extern void ndmpd_get_devs(ndmp_door_ctx_t *); 7537917SReza.Sabdar@Sun.COM 7547917SReza.Sabdar@Sun.COM /* 7557917SReza.Sabdar@Sun.COM * Utility functions form ndmpd_data.c. 7567917SReza.Sabdar@Sun.COM */ 7577917SReza.Sabdar@Sun.COM extern void ndmpd_data_cleanup(ndmpd_session_t *); 7587917SReza.Sabdar@Sun.COM extern int ndmpd_data_init(ndmpd_session_t *); 7597917SReza.Sabdar@Sun.COM extern char *ndmp_data_get_mover_mode(ndmpd_session_t *); 7607917SReza.Sabdar@Sun.COM extern void ndmpd_data_error(ndmpd_session_t *, ndmp_data_halt_reason); 7617917SReza.Sabdar@Sun.COM 7627917SReza.Sabdar@Sun.COM 7637917SReza.Sabdar@Sun.COM /* 7647917SReza.Sabdar@Sun.COM * Utility functions from ndmpd_mover.c. 7657917SReza.Sabdar@Sun.COM */ 7667917SReza.Sabdar@Sun.COM extern int ndmpd_mover_init(ndmpd_session_t *); 7677917SReza.Sabdar@Sun.COM extern void ndmpd_mover_cleanup(ndmpd_session_t *); 7687917SReza.Sabdar@Sun.COM extern ndmp_error ndmpd_mover_connect(ndmpd_session_t *, 7697917SReza.Sabdar@Sun.COM ndmp_mover_mode); 7707917SReza.Sabdar@Sun.COM extern void ndmpd_mover_error(ndmpd_session_t *, 7717917SReza.Sabdar@Sun.COM ndmp_mover_halt_reason); 7727917SReza.Sabdar@Sun.COM extern int ndmpd_mover_seek(ndmpd_session_t *, 7737917SReza.Sabdar@Sun.COM u_longlong_t, 7747917SReza.Sabdar@Sun.COM u_longlong_t); 7757917SReza.Sabdar@Sun.COM extern int ndmpd_local_write(ndmpd_session_t *, 7767917SReza.Sabdar@Sun.COM char *, 7777917SReza.Sabdar@Sun.COM ulong_t); 7787917SReza.Sabdar@Sun.COM extern int ndmpd_remote_write(ndmpd_session_t *, 7797917SReza.Sabdar@Sun.COM char *, 7807917SReza.Sabdar@Sun.COM ulong_t); 7817917SReza.Sabdar@Sun.COM extern int ndmpd_local_read(ndmpd_session_t *, 7827917SReza.Sabdar@Sun.COM char *, 7837917SReza.Sabdar@Sun.COM ulong_t); 7847917SReza.Sabdar@Sun.COM extern int ndmpd_remote_read(ndmpd_session_t *, 7857917SReza.Sabdar@Sun.COM char *, 7867917SReza.Sabdar@Sun.COM ulong_t); 7877917SReza.Sabdar@Sun.COM 7887917SReza.Sabdar@Sun.COM extern void ndmpd_mover_shut_down(ndmpd_session_t *); 7897917SReza.Sabdar@Sun.COM extern void ndmpd_mover_error(ndmpd_session_t *, 7907917SReza.Sabdar@Sun.COM ndmp_mover_halt_reason); 7917917SReza.Sabdar@Sun.COM extern int ndmpd_local_write_v3(ndmpd_session_t *, 7927917SReza.Sabdar@Sun.COM char *, 7937917SReza.Sabdar@Sun.COM ulong_t); 7947917SReza.Sabdar@Sun.COM extern int ndmpd_local_read_v3(ndmpd_session_t *, 7957917SReza.Sabdar@Sun.COM char *, 7967917SReza.Sabdar@Sun.COM ulong_t); 7977917SReza.Sabdar@Sun.COM extern int ndmpd_remote_read_v3(ndmpd_session_t *, 7987917SReza.Sabdar@Sun.COM char *, 7997917SReza.Sabdar@Sun.COM ulong_t); 8007917SReza.Sabdar@Sun.COM extern int ndmpd_mover_wait_v3(ndmpd_session_t *); 8017917SReza.Sabdar@Sun.COM extern void ndmpd_write_eom(int); 8027917SReza.Sabdar@Sun.COM 8037917SReza.Sabdar@Sun.COM 8047917SReza.Sabdar@Sun.COM /* 8057917SReza.Sabdar@Sun.COM * Utility functions from ndmpd_file_history.c 8067917SReza.Sabdar@Sun.COM */ 8077917SReza.Sabdar@Sun.COM extern void ndmpd_file_history_init(ndmpd_session_t *); 8087917SReza.Sabdar@Sun.COM extern void ndmpd_file_history_cleanup(ndmpd_session_t *, 8097917SReza.Sabdar@Sun.COM boolean_t); 8107917SReza.Sabdar@Sun.COM extern int ndmpd_file_history_path(lbr_fhlog_call_backs_t *, 8117917SReza.Sabdar@Sun.COM char *, 8127917SReza.Sabdar@Sun.COM struct stat64 *, 8137917SReza.Sabdar@Sun.COM u_longlong_t); 8147917SReza.Sabdar@Sun.COM extern int ndmpd_file_history_dir(lbr_fhlog_call_backs_t *, 8157917SReza.Sabdar@Sun.COM char *, 8167917SReza.Sabdar@Sun.COM struct stat64 *); 8177917SReza.Sabdar@Sun.COM extern int ndmpd_file_history_node(lbr_fhlog_call_backs_t *, 8187917SReza.Sabdar@Sun.COM char *, 8197917SReza.Sabdar@Sun.COM char *, 8207917SReza.Sabdar@Sun.COM struct stat64 *, 8217917SReza.Sabdar@Sun.COM u_longlong_t); 8227917SReza.Sabdar@Sun.COM extern int 8237917SReza.Sabdar@Sun.COM ndmpd_path_restored(lbr_fhlog_call_backs_t *, 8247917SReza.Sabdar@Sun.COM char *, 8257917SReza.Sabdar@Sun.COM struct stat64 *, 8267917SReza.Sabdar@Sun.COM u_longlong_t); 8277917SReza.Sabdar@Sun.COM extern int ndmpd_fhpath_v3_cb(lbr_fhlog_call_backs_t *, 8287917SReza.Sabdar@Sun.COM char *, 8297917SReza.Sabdar@Sun.COM struct stat64 *, 8307917SReza.Sabdar@Sun.COM u_longlong_t); 8317917SReza.Sabdar@Sun.COM extern int ndmpd_fhdir_v3_cb(lbr_fhlog_call_backs_t *, 8327917SReza.Sabdar@Sun.COM char *, 8337917SReza.Sabdar@Sun.COM struct stat64 *); 8347917SReza.Sabdar@Sun.COM extern int ndmpd_fhnode_v3_cb(lbr_fhlog_call_backs_t *, 8357917SReza.Sabdar@Sun.COM char *, 8367917SReza.Sabdar@Sun.COM char *, 8377917SReza.Sabdar@Sun.COM struct stat64 *, 8387917SReza.Sabdar@Sun.COM u_longlong_t); 8397917SReza.Sabdar@Sun.COM extern int ndmpd_path_restored_v3(lbr_fhlog_call_backs_t *, 8407917SReza.Sabdar@Sun.COM char *, 8417917SReza.Sabdar@Sun.COM struct stat64 *, 8427917SReza.Sabdar@Sun.COM u_longlong_t); 8437917SReza.Sabdar@Sun.COM 8447917SReza.Sabdar@Sun.COM extern int ndmp_send_recovery_stat_v3(ndmpd_module_params_t *, 8457917SReza.Sabdar@Sun.COM ndmp_lbr_params_t *, 8467917SReza.Sabdar@Sun.COM int, 8477917SReza.Sabdar@Sun.COM int); 8487917SReza.Sabdar@Sun.COM 8497917SReza.Sabdar@Sun.COM 8507917SReza.Sabdar@Sun.COM /* 8517917SReza.Sabdar@Sun.COM * Utility functions from ndmpd_dtime.c 8527917SReza.Sabdar@Sun.COM */ 8537917SReza.Sabdar@Sun.COM extern int ndmpd_put_dumptime(char *, int, time_t); 8547917SReza.Sabdar@Sun.COM extern int ndmpd_get_dumptime(char *, int *, time_t *); 8557917SReza.Sabdar@Sun.COM extern int ndmpd_append_dumptime(char *, char *, int, time_t); 8567917SReza.Sabdar@Sun.COM 8577917SReza.Sabdar@Sun.COM 8587917SReza.Sabdar@Sun.COM /* 8597917SReza.Sabdar@Sun.COM * Global variables from ndmpd_tar3.c 8607917SReza.Sabdar@Sun.COM */ 8617917SReza.Sabdar@Sun.COM extern char **ndmp_excl_list; 8627917SReza.Sabdar@Sun.COM 8637917SReza.Sabdar@Sun.COM 8647917SReza.Sabdar@Sun.COM /* 8657917SReza.Sabdar@Sun.COM * Global variables from ndmpd_util.c 8667917SReza.Sabdar@Sun.COM */ 8677917SReza.Sabdar@Sun.COM extern int ndmp_force_bk_dirs; 8687917SReza.Sabdar@Sun.COM extern int ndmp_rbs; 8697917SReza.Sabdar@Sun.COM extern int ndmp_sbs; 8707917SReza.Sabdar@Sun.COM extern boolean_t ndmp_dump_path_node; 8717917SReza.Sabdar@Sun.COM extern boolean_t ndmp_tar_path_node; 8727917SReza.Sabdar@Sun.COM extern boolean_t ndmp_ignore_ctime; 8737917SReza.Sabdar@Sun.COM extern boolean_t ndmp_include_lmtime; 8747917SReza.Sabdar@Sun.COM 8757917SReza.Sabdar@Sun.COM 8767917SReza.Sabdar@Sun.COM /* 8777917SReza.Sabdar@Sun.COM * Utility functions from ndmpd_util.c. 8787917SReza.Sabdar@Sun.COM */ 8797917SReza.Sabdar@Sun.COM extern int ndmpd_select(ndmpd_session_t *, 8807917SReza.Sabdar@Sun.COM boolean_t, 8817917SReza.Sabdar@Sun.COM ulong_t); 8827917SReza.Sabdar@Sun.COM 8837917SReza.Sabdar@Sun.COM extern ndmp_error ndmpd_save_env(ndmpd_session_t *, 8847917SReza.Sabdar@Sun.COM ndmp_pval *, 8857917SReza.Sabdar@Sun.COM ulong_t); 8867917SReza.Sabdar@Sun.COM 8877917SReza.Sabdar@Sun.COM extern void ndmpd_free_env(ndmpd_session_t *); 8887917SReza.Sabdar@Sun.COM extern ndmp_error ndmpd_save_nlist_v2(ndmpd_session_t *, 8897917SReza.Sabdar@Sun.COM ndmp_name *, 8907917SReza.Sabdar@Sun.COM ulong_t); 8917917SReza.Sabdar@Sun.COM 8927917SReza.Sabdar@Sun.COM extern void ndmpd_free_nlist(ndmpd_session_t *); 8937917SReza.Sabdar@Sun.COM extern int ndmpd_add_file_handler(ndmpd_session_t *, 8947917SReza.Sabdar@Sun.COM void *, 8957917SReza.Sabdar@Sun.COM int, 8967917SReza.Sabdar@Sun.COM ulong_t, 8977917SReza.Sabdar@Sun.COM ulong_t, 8987917SReza.Sabdar@Sun.COM ndmpd_file_handler_func_t *); 8997917SReza.Sabdar@Sun.COM 9007917SReza.Sabdar@Sun.COM extern int ndmpd_remove_file_handler(ndmpd_session_t *, 9017917SReza.Sabdar@Sun.COM int); 9027917SReza.Sabdar@Sun.COM 9037917SReza.Sabdar@Sun.COM extern void ndmp_send_reply(ndmp_connection_t *, 9047917SReza.Sabdar@Sun.COM void *, 9057917SReza.Sabdar@Sun.COM char *); 9067917SReza.Sabdar@Sun.COM 9077917SReza.Sabdar@Sun.COM extern int ndmp_mtioctl(int, int, int); 9087917SReza.Sabdar@Sun.COM 9097917SReza.Sabdar@Sun.COM extern u_longlong_t quad_to_long_long(ndmp_u_quad); 9107917SReza.Sabdar@Sun.COM extern ndmp_u_quad long_long_to_quad(u_longlong_t); 9117917SReza.Sabdar@Sun.COM 9127917SReza.Sabdar@Sun.COM extern void ndmp_set_socket_nodelay(int); 9137917SReza.Sabdar@Sun.COM extern void ndmp_set_socket_snd_buf(int, int); 9147917SReza.Sabdar@Sun.COM extern void ndmp_set_socket_rcv_buf(int, int); 9157917SReza.Sabdar@Sun.COM 9167917SReza.Sabdar@Sun.COM extern long ndmp_buffer_get_size(ndmpd_session_t *); 9177917SReza.Sabdar@Sun.COM extern int ndmp_lbr_init(ndmpd_session_t *); 9187917SReza.Sabdar@Sun.COM extern void ndmp_lbr_cleanup(ndmpd_session_t *); 9197917SReza.Sabdar@Sun.COM 9207917SReza.Sabdar@Sun.COM extern void nlp_ref_nw(ndmpd_session_t *); 9217917SReza.Sabdar@Sun.COM extern void nlp_unref_nw(ndmpd_session_t *); 9227917SReza.Sabdar@Sun.COM extern void nlp_wait_nw(ndmpd_session_t *); 9237917SReza.Sabdar@Sun.COM extern void nlp_event_nw(ndmpd_session_t *); 9247917SReza.Sabdar@Sun.COM extern int nlp_event_rv_get(ndmpd_session_t *); 9257917SReza.Sabdar@Sun.COM extern void nlp_event_rv_set(ndmpd_session_t *, int); 9267917SReza.Sabdar@Sun.COM extern boolean_t is_buffer_erroneous(tlm_buffer_t *); 9277917SReza.Sabdar@Sun.COM extern void ndmp_execute_cdb(ndmpd_session_t *, 9287917SReza.Sabdar@Sun.COM char *, 9297917SReza.Sabdar@Sun.COM int, 9307917SReza.Sabdar@Sun.COM int, 9317917SReza.Sabdar@Sun.COM ndmp_execute_cdb_request *); 9327917SReza.Sabdar@Sun.COM 9337917SReza.Sabdar@Sun.COM extern scsi_adapter_t *scsi_get_adapter(int); 9347917SReza.Sabdar@Sun.COM extern boolean_t is_tape_unit_ready(char *, int); 9357917SReza.Sabdar@Sun.COM 9367917SReza.Sabdar@Sun.COM extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int); 9377917SReza.Sabdar@Sun.COM extern int ndmp_open_list_del(char *, int, int); 9387917SReza.Sabdar@Sun.COM extern void ndmp_open_list_release(ndmp_connection_t *); 9397917SReza.Sabdar@Sun.COM 9407917SReza.Sabdar@Sun.COM extern void ndmp_stop_buffer_worker(ndmpd_session_t *); 9417917SReza.Sabdar@Sun.COM extern void ndmp_stop_reader_thread(ndmpd_session_t *); 9427917SReza.Sabdar@Sun.COM extern void ndmp_stop_writer_thread(ndmpd_session_t *); 9437917SReza.Sabdar@Sun.COM extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *); 9447917SReza.Sabdar@Sun.COM extern void ndmp_waitfor_op(ndmpd_session_t *); 9457917SReza.Sabdar@Sun.COM 9467917SReza.Sabdar@Sun.COM extern char *cctime(time_t *); 9477917SReza.Sabdar@Sun.COM extern char *ndmp_new_job_name(char *); 9487917SReza.Sabdar@Sun.COM extern char *ndmpd_mk_temp(char *); 9497917SReza.Sabdar@Sun.COM extern char *ndmpd_make_bk_dir_path(char *, char *); 9507917SReza.Sabdar@Sun.COM extern boolean_t ndmp_is_chkpnt_root(char *); 9517917SReza.Sabdar@Sun.COM extern char **ndmpd_make_exc_list(void); 9527917SReza.Sabdar@Sun.COM extern void ndmp_sort_nlist_v3(ndmpd_session_t *); 9537917SReza.Sabdar@Sun.COM extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *); 9547917SReza.Sabdar@Sun.COM extern int ndmp_write_utf8magic(tlm_cmd_t *); 9557917SReza.Sabdar@Sun.COM extern int ndmp_tar_writer(ndmpd_session_t *, 9567917SReza.Sabdar@Sun.COM ndmpd_module_params_t *, 9577917SReza.Sabdar@Sun.COM tlm_commands_t *); 9587917SReza.Sabdar@Sun.COM extern void ndmp_wait_for_reader(tlm_commands_t *); 9597917SReza.Sabdar@Sun.COM extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *, 9607917SReza.Sabdar@Sun.COM ndmp_name_v3 *, 9617917SReza.Sabdar@Sun.COM ulong_t); 9627917SReza.Sabdar@Sun.COM extern void ndmpd_free_nlist_v3(ndmpd_session_t *); 9637917SReza.Sabdar@Sun.COM extern int ndmp_create_socket(ulong_t *, ushort_t *); 9647917SReza.Sabdar@Sun.COM extern int ndmp_connect_sock_v3(ulong_t, ushort_t); 9657917SReza.Sabdar@Sun.COM extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *); 9667917SReza.Sabdar@Sun.COM extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *); 9677917SReza.Sabdar@Sun.COM extern char *ndmp_addr2str_v3(ndmp_addr_type); 9687917SReza.Sabdar@Sun.COM extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type); 9697917SReza.Sabdar@Sun.COM extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *); 9707917SReza.Sabdar@Sun.COM extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *, 9717917SReza.Sabdar@Sun.COM time_t *, char *); 9727917SReza.Sabdar@Sun.COM extern char *ndmp_get_relative_path(char *, char *); 9737917SReza.Sabdar@Sun.COM 9747917SReza.Sabdar@Sun.COM extern boolean_t ndmp_fhinode; 9757917SReza.Sabdar@Sun.COM extern void ndmp_load_params(void); 9767917SReza.Sabdar@Sun.COM extern void randomize(unsigned char *, int); 9777917SReza.Sabdar@Sun.COM 9787917SReza.Sabdar@Sun.COM 9797917SReza.Sabdar@Sun.COM /* 9807917SReza.Sabdar@Sun.COM * Utility functions from ndmpd_tar3.c. 9817917SReza.Sabdar@Sun.COM */ 9827917SReza.Sabdar@Sun.COM extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *, 9837917SReza.Sabdar@Sun.COM ndmpd_module_params_t *); 9847917SReza.Sabdar@Sun.COM extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *, 9857917SReza.Sabdar@Sun.COM ndmpd_module_params_t *); 9867917SReza.Sabdar@Sun.COM 9877917SReza.Sabdar@Sun.COM /* 9887917SReza.Sabdar@Sun.COM * door init and fini function from ndmpd_door_serv.c 9897917SReza.Sabdar@Sun.COM */ 9907917SReza.Sabdar@Sun.COM extern int ndmp_door_init(void); 9917917SReza.Sabdar@Sun.COM extern void ndmp_door_fini(void); 9927917SReza.Sabdar@Sun.COM extern boolean_t ndmp_door_check(void); 9937917SReza.Sabdar@Sun.COM 9947917SReza.Sabdar@Sun.COM extern int ndmp_get_max_tok_seq(void); 9957917SReza.Sabdar@Sun.COM extern boolean_t set_debug_level(boolean_t); 9967917SReza.Sabdar@Sun.COM extern boolean_t get_debug_level(void); 9977917SReza.Sabdar@Sun.COM 9987917SReza.Sabdar@Sun.COM extern int get_zfsvolname(char *, int, char *); 99912904SReza.Sabdar@Sun.COM extern int ndmp_create_snapshot(char *, char *); 100012904SReza.Sabdar@Sun.COM extern int ndmp_remove_snapshot(char *, char *); 10017917SReza.Sabdar@Sun.COM extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *); 10027917SReza.Sabdar@Sun.COM extern void ndmpd_abort_marking_v2(ndmpd_session_t *); 10037917SReza.Sabdar@Sun.COM extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *); 10047917SReza.Sabdar@Sun.COM extern ndmp_lbr_params_t *ndmp_get_nlp(void *); 10057917SReza.Sabdar@Sun.COM 100612186SJanice.Chang@Sun.COM module_start_func_t ndmpd_tar_backup_starter; 100712186SJanice.Chang@Sun.COM module_abort_func_t ndmpd_tar_backup_abort; 10087917SReza.Sabdar@Sun.COM 100912186SJanice.Chang@Sun.COM module_start_func_t ndmpd_tar_restore_starter; 101012186SJanice.Chang@Sun.COM module_abort_func_t ndmpd_tar_restore_abort; 10117917SReza.Sabdar@Sun.COM 10127917SReza.Sabdar@Sun.COM module_start_func_t ndmpd_tar_backup_starter_v3; 10137917SReza.Sabdar@Sun.COM module_abort_func_t ndmpd_tar_backup_abort_v3; 10147917SReza.Sabdar@Sun.COM 10157917SReza.Sabdar@Sun.COM module_start_func_t ndmpd_tar_restore_starter_v3; 10167917SReza.Sabdar@Sun.COM module_abort_func_t ndmpd_tar_restore_abort_v3; 10177917SReza.Sabdar@Sun.COM 10187917SReza.Sabdar@Sun.COM extern int ndmp_backup_extract_params(ndmpd_session_t *, 10197917SReza.Sabdar@Sun.COM ndmpd_module_params_t *); 10207917SReza.Sabdar@Sun.COM extern int ndmp_restore_extract_params(ndmpd_session_t *, 10217917SReza.Sabdar@Sun.COM ndmpd_module_params_t *); 10227917SReza.Sabdar@Sun.COM extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *); 10237917SReza.Sabdar@Sun.COM 10247917SReza.Sabdar@Sun.COM extern int tape_open(char *, int); 10257917SReza.Sabdar@Sun.COM 10267917SReza.Sabdar@Sun.COM extern void ndmp_session_ref(ndmpd_session_t *); 10277917SReza.Sabdar@Sun.COM extern void ndmp_session_unref(ndmpd_session_t *); 10287917SReza.Sabdar@Sun.COM 10297917SReza.Sabdar@Sun.COM void ndmpd_get_file_entry_type(int, ndmp_file_type *); 10307917SReza.Sabdar@Sun.COM 10317917SReza.Sabdar@Sun.COM extern int tcp_accept(int, unsigned int *); 10327917SReza.Sabdar@Sun.COM extern int tcp_get_peer(int, unsigned int *, int *); 10337917SReza.Sabdar@Sun.COM 10347917SReza.Sabdar@Sun.COM extern char *gethostaddr(void); 1035*13023SReza.Sabdar@Sun.COM extern char *get_default_nic_addr(void); 10367917SReza.Sabdar@Sun.COM extern int tlm_init(void); 10377917SReza.Sabdar@Sun.COM 103812904SReza.Sabdar@Sun.COM extern int snapshot_create(char *, char *, boolean_t, boolean_t); 103912904SReza.Sabdar@Sun.COM extern int snapshot_destroy(char *, char *, boolean_t, boolean_t, int *); 10407917SReza.Sabdar@Sun.COM 10417917SReza.Sabdar@Sun.COM extern boolean_t fs_is_chkpntvol(char *); 10427917SReza.Sabdar@Sun.COM extern boolean_t fs_is_chkpnt_enabled(char *); 10437917SReza.Sabdar@Sun.COM extern boolean_t fs_is_rdonly(char *); 10447917SReza.Sabdar@Sun.COM extern boolean_t fs_volexist(char *); 10457917SReza.Sabdar@Sun.COM extern boolean_t fs_is_valid_logvol(char *); 10467917SReza.Sabdar@Sun.COM extern boolean_t rootfs_dot_or_dotdot(char *); 10477917SReza.Sabdar@Sun.COM extern int dp_readdir(DIR *, unsigned long *, char *, 10487917SReza.Sabdar@Sun.COM int *, unsigned long *); 10497917SReza.Sabdar@Sun.COM 10507917SReza.Sabdar@Sun.COM extern void scsi_find_sid_lun(); 10517917SReza.Sabdar@Sun.COM extern char *sasd_slink_name(); 10527917SReza.Sabdar@Sun.COM extern int scsi_dev_exists(char *, int, int); 10537917SReza.Sabdar@Sun.COM extern int scsi_get_devtype(char *, int, int); 10547917SReza.Sabdar@Sun.COM extern struct open_list *ndmp_open_list_find(char *, int, int); 10557917SReza.Sabdar@Sun.COM extern int filecopy(char *, char *); 10567917SReza.Sabdar@Sun.COM 10577917SReza.Sabdar@Sun.COM extern void ndmp_stop_local_reader(); 10587917SReza.Sabdar@Sun.COM extern void ndmp_stop_remote_reader(); 10597917SReza.Sabdar@Sun.COM 10607917SReza.Sabdar@Sun.COM extern boolean_t match(char *, char *); 10617917SReza.Sabdar@Sun.COM extern char *trim_whitespace(char *); 10629714SReza.Sabdar@Sun.COM extern int fs_getstat(char *, struct fs_fhandle *, struct stat64 *); 10637917SReza.Sabdar@Sun.COM extern int fs_readdir(struct fs_fhandle *, char *, long *, 10649714SReza.Sabdar@Sun.COM char *, int *, struct fs_fhandle *, struct stat64 *); 10657917SReza.Sabdar@Sun.COM extern int iscreated(ndmp_lbr_params_t *nlp, char *name, tlm_acls_t *tacl, 10667917SReza.Sabdar@Sun.COM time_t t); 10677917SReza.Sabdar@Sun.COM 10687917SReza.Sabdar@Sun.COM extern int sasd_dev_count(void); 10697917SReza.Sabdar@Sun.COM extern struct scsi_link *sasd_dev_slink(int); 10707917SReza.Sabdar@Sun.COM extern struct sasd_drive *sasd_drive(int); 10717917SReza.Sabdar@Sun.COM extern void *ndmp_malloc(size_t size); 10727917SReza.Sabdar@Sun.COM 10737917SReza.Sabdar@Sun.COM extern ndmp_plugin_t *ndmp_pl; 107412186SJanice.Chang@Sun.COM 107512186SJanice.Chang@Sun.COM #define NDMP_APILOG(s, t, m, ...) \ 107612186SJanice.Chang@Sun.COM { \ 107712186SJanice.Chang@Sun.COM if (((ndmpd_session_t *)(s))->ns_protocol_version == NDMPV4) \ 107812186SJanice.Chang@Sun.COM (void) ndmpd_api_log_v4(s, t, m, __VA_ARGS__); \ 107912186SJanice.Chang@Sun.COM else if (((ndmpd_session_t *)(s))->ns_protocol_version == NDMPV3) \ 108012186SJanice.Chang@Sun.COM (void) ndmpd_api_log_v3(s, t, m, __VA_ARGS__); \ 108112186SJanice.Chang@Sun.COM else \ 108212186SJanice.Chang@Sun.COM (void) ndmpd_api_log_v2(s, __VA_ARGS__); \ 108312186SJanice.Chang@Sun.COM } 108412186SJanice.Chang@Sun.COM 108512186SJanice.Chang@Sun.COM /* 108612186SJanice.Chang@Sun.COM * Backup path utility functions 108712186SJanice.Chang@Sun.COM */ 108812186SJanice.Chang@Sun.COM extern char *get_backup_path_v3(ndmpd_module_params_t *); 108912186SJanice.Chang@Sun.COM extern char *get_backup_path_v2(ndmpd_module_params_t *); 109012186SJanice.Chang@Sun.COM 109112186SJanice.Chang@Sun.COM /* 109212186SJanice.Chang@Sun.COM * Functions for zfs-based backup 109312186SJanice.Chang@Sun.COM */ 109412186SJanice.Chang@Sun.COM 109512186SJanice.Chang@Sun.COM module_start_func_t ndmpd_zfs_backup_starter; 109612186SJanice.Chang@Sun.COM module_start_func_t ndmpd_zfs_restore_starter; 109712186SJanice.Chang@Sun.COM module_abort_func_t ndmpd_zfs_abort; 109812186SJanice.Chang@Sun.COM 109912186SJanice.Chang@Sun.COM int ndmpd_zfs_init(ndmpd_session_t *); 110012186SJanice.Chang@Sun.COM void ndmpd_zfs_fini(ndmpd_zfs_args_t *); 110112186SJanice.Chang@Sun.COM 110212186SJanice.Chang@Sun.COM boolean_t ndmpd_zfs_backup_parms_valid(ndmpd_zfs_args_t *); 110312186SJanice.Chang@Sun.COM boolean_t ndmpd_zfs_restore_parms_valid(ndmpd_zfs_args_t *); 110412186SJanice.Chang@Sun.COM 110512186SJanice.Chang@Sun.COM int ndmpd_zfs_pre_backup(ndmpd_zfs_args_t *); 110612186SJanice.Chang@Sun.COM int ndmpd_zfs_pre_restore(ndmpd_zfs_args_t *); 110712186SJanice.Chang@Sun.COM int ndmpd_zfs_post_backup(ndmpd_zfs_args_t *); 110812186SJanice.Chang@Sun.COM int ndmpd_zfs_post_restore(ndmpd_zfs_args_t *); 110912186SJanice.Chang@Sun.COM 111012186SJanice.Chang@Sun.COM void ndmpd_zfs_dma_log(ndmpd_zfs_args_t *, ndmp_log_type, char *, ...); 111112186SJanice.Chang@Sun.COM 11127917SReza.Sabdar@Sun.COM #endif /* _NDMPD_H */ 1113