12654012fSReza Sabdar /* 28c4f9701SJanice Chang * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 3*a1988827SMatthew Ahrens * Copyright (c) 2015 by Delphix. All rights reserved. 42654012fSReza Sabdar */ 52654012fSReza Sabdar 62654012fSReza Sabdar /* 72654012fSReza Sabdar * BSD 3 Clause License 82654012fSReza Sabdar * 92654012fSReza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association. 102654012fSReza Sabdar * 112654012fSReza Sabdar * Redistribution and use in source and binary forms, with or without 122654012fSReza Sabdar * modification, are permitted provided that the following conditions 132654012fSReza Sabdar * are met: 142654012fSReza Sabdar * - Redistributions of source code must retain the above copyright 152654012fSReza Sabdar * notice, this list of conditions and the following disclaimer. 162654012fSReza Sabdar * 172654012fSReza Sabdar * - Redistributions in binary form must reproduce the above copyright 182654012fSReza Sabdar * notice, this list of conditions and the following disclaimer in 192654012fSReza Sabdar * the documentation and/or other materials provided with the 202654012fSReza Sabdar * distribution. 212654012fSReza Sabdar * 222654012fSReza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA) 232654012fSReza Sabdar * nor the names of its contributors may be used to endorse or promote 242654012fSReza Sabdar * products derived from this software without specific prior written 252654012fSReza Sabdar * permission. 262654012fSReza Sabdar * 272654012fSReza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 282654012fSReza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 292654012fSReza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 302654012fSReza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 312654012fSReza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 322654012fSReza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 332654012fSReza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 342654012fSReza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 352654012fSReza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 362654012fSReza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 372654012fSReza Sabdar * POSSIBILITY OF SUCH DAMAGE. 382654012fSReza Sabdar */ 392654012fSReza Sabdar /* Copyright (c) 2007, The Storage Networking Industry Association. */ 402654012fSReza Sabdar /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */ 419ee94b97SJan Kryl /* Copyright 2014 Nexenta Systems, Inc. All rights reserved. */ 422654012fSReza Sabdar 432654012fSReza Sabdar #ifndef _NDMPD_H 442654012fSReza Sabdar #define _NDMPD_H 452654012fSReza Sabdar 462654012fSReza Sabdar #include <sys/types.h> 472654012fSReza Sabdar #include <libzfs.h> 482654012fSReza Sabdar #include <ndmpd_door.h> 492654012fSReza Sabdar #include <libndmp.h> 502654012fSReza Sabdar #include "ndmpd_common.h" 512654012fSReza Sabdar #include "tlm_buffers.h" 522654012fSReza Sabdar #include <dirent.h> 532654012fSReza Sabdar #include "ndmpd_prop.h" 542654012fSReza Sabdar #include "traverse.h" 552654012fSReza Sabdar #include <pthread.h> 562654012fSReza Sabdar #include <libndmp.h> 572654012fSReza Sabdar #include <atomic.h> 582654012fSReza Sabdar 592654012fSReza Sabdar #define MAX_RECORD_SIZE (126*512) 602654012fSReza Sabdar #define REMOTE_RECORD_SIZE (60*KILOBYTE) 612654012fSReza Sabdar #define SCSI_MAX_NAME 32 622654012fSReza Sabdar #define MD5_CHALLENGE_SIZE 64 632654012fSReza Sabdar #define MD5_PASS_LIMIT 32 642654012fSReza Sabdar 652654012fSReza Sabdar /* Test unit ready */ 662654012fSReza Sabdar #define TUR_WAIT 3000000 672654012fSReza Sabdar #define TUR_MAX_TRY 3 682654012fSReza Sabdar 692654012fSReza Sabdar 702654012fSReza Sabdar /* File handler classes */ 712654012fSReza Sabdar #define HC_CLIENT 1 722654012fSReza Sabdar #define HC_MOVER 2 732654012fSReza Sabdar #define HC_MODULE 4 742654012fSReza Sabdar #define HC_ALL 0xffffffff 752654012fSReza Sabdar 762654012fSReza Sabdar #define IN_ADDR(x) \ 772654012fSReza Sabdar (*(struct in_addr *)&x) 782654012fSReza Sabdar 792654012fSReza Sabdar #define FS_READONLY(fs) (hasmntopt(fs, "ro") ? 1 : 0) 802654012fSReza Sabdar 812654012fSReza Sabdar typedef void *(*funct_t)(void *); /* function pointer */ 822654012fSReza Sabdar 832654012fSReza Sabdar #define HOSTNAMELEN 256 842654012fSReza Sabdar 852654012fSReza Sabdar #define VENDOR_NAME "Sun Microsystems" 862654012fSReza Sabdar #define PRODUCT_NAME "Solaris 5.11" 872654012fSReza Sabdar 882654012fSReza Sabdar /* 892654012fSReza Sabdar * Calculate array length based on its size and size of 902654012fSReza Sabdar * its elements. 912654012fSReza Sabdar */ 922654012fSReza Sabdar #define ARRAY_LEN(a, t) (sizeof (a) / sizeof (t)) 932654012fSReza Sabdar /* 942654012fSReza Sabdar * Default maximum permitted sequence number for the token-based backup. 952654012fSReza Sabdar */ 962654012fSReza Sabdar #define NDMP_MAX_TOKSEQ 9 972654012fSReza Sabdar 982654012fSReza Sabdar /* 992654012fSReza Sabdar * Hard-limit for the sequence number in the token-based backup. 1002654012fSReza Sabdar * It's one less than the ASCII value of 'A'. The 'A' letter 1012654012fSReza Sabdar * can be used as level in the lbr-type backups. 1022654012fSReza Sabdar */ 1032654012fSReza Sabdar #define NDMP_TOKSEQ_HLIMIT ('A' - 1) 1042654012fSReza Sabdar 1052654012fSReza Sabdar 1062654012fSReza Sabdar /* 1072654012fSReza Sabdar * Soft-limit for the sequence number in the token-based backup. 1082654012fSReza Sabdar */ 1092654012fSReza Sabdar #define NDMP_TOKSEQ_SLIMIT (NDMP_TOKSEQ_HLIMIT - 5) 1102654012fSReza Sabdar 1112654012fSReza Sabdar 1122654012fSReza Sabdar /* 1132654012fSReza Sabdar * Root inode number of dump format in V2. 1142654012fSReza Sabdar */ 1152654012fSReza Sabdar #define ROOT_INODE 2 1162654012fSReza Sabdar 1172654012fSReza Sabdar /* 1188c4f9701SJanice Chang * NDMP backup image signature 1192654012fSReza Sabdar */ 1202654012fSReza Sabdar #define NDMPUTF8MAGIC "NDMPUTF8MAGIC" 1212654012fSReza Sabdar 1222654012fSReza Sabdar /* 1232654012fSReza Sabdar * Supported BU types 1242654012fSReza Sabdar */ 1252654012fSReza Sabdar #define NDMP_TAR_TYPE "tar" 1268c4f9701SJanice Chang #define NDMP_DUMP_TYPE "dump" 1278c4f9701SJanice Chang #define NDMP_ZFS_TYPE "zfs" 1282654012fSReza Sabdar 1292654012fSReza Sabdar /* All 1's binary maximum mover window */ 1302654012fSReza Sabdar #define MAX_WINDOW_SIZE 0xffffffffffffffffULL 1312654012fSReza Sabdar 1322654012fSReza Sabdar #define NDMP_FREE(cp) { free((char *)(cp)); (cp) = NULL; } 1332654012fSReza Sabdar 1342654012fSReza Sabdar #define NDMP_YORN(f) ((f) ? 'Y' : 'N') 1352654012fSReza Sabdar #define NDMP_TORF(f) ((f) ? "TRUE" : "FALSE") 1362654012fSReza Sabdar #define NDMP_SVAL(cp) ((cp) ? (cp) : "NULL") 1372654012fSReza Sabdar 1382654012fSReza Sabdar #define NDMP_SETENV(env, nm, val) \ 1392654012fSReza Sabdar { \ 1402654012fSReza Sabdar env->name = nm; \ 1412654012fSReza Sabdar env->value = val; \ 1422654012fSReza Sabdar env++; \ 1432654012fSReza Sabdar } 1442654012fSReza Sabdar 1452654012fSReza Sabdar #define NDMP_CL_ADDR_LEN 24 1462654012fSReza Sabdar #define NDMP_TCP_ADDR_SIZE 32 1472654012fSReza Sabdar #define NDMP_TAPE_DEV_NAME 256 1482654012fSReza Sabdar 1492654012fSReza Sabdar typedef struct { 1502654012fSReza Sabdar char *bk_path; 1512654012fSReza Sabdar int bk_llevel; /* last backup level */ 1522654012fSReza Sabdar time_t bk_ldate; /* last backup date */ 1532654012fSReza Sabdar int bk_clevel; /* current backup level */ 1542654012fSReza Sabdar time_t bk_cdate; /* current backup date */ 1552654012fSReza Sabdar int bk_map; 1562654012fSReza Sabdar int bk_dirino; 1572654012fSReza Sabdar char *bk_dmpnm; 1582654012fSReza Sabdar char **bk_exl; /* exlude list */ 1592654012fSReza Sabdar char **bk_inc; /* include list */ 1602654012fSReza Sabdar } ndmp_backup_params_t; 1612654012fSReza Sabdar 1622654012fSReza Sabdar 1632654012fSReza Sabdar typedef struct { 1642654012fSReza Sabdar ulong_t rs_nf; /* number of files to restore */ 1652654012fSReza Sabdar char *rs_path; 1662654012fSReza Sabdar char *rs_bkpath; 1672654012fSReza Sabdar int *rs_restored; 1682654012fSReza Sabdar int rs_bm; 1692654012fSReza Sabdar int rs_lastidx; 1702654012fSReza Sabdar } ndmp_restore_params_t; 1712654012fSReza Sabdar 1722654012fSReza Sabdar /* 1732654012fSReza Sabdar * Tar format archiving ops table 1742654012fSReza Sabdar */ 1752654012fSReza Sabdar extern tm_ops_t tm_tar_ops; 1762654012fSReza Sabdar 1772654012fSReza Sabdar /* 1782654012fSReza Sabdar * IS_LBR_BKTYPE shows if the backup type is one of these 1792654012fSReza Sabdar * 'F' of 'f': 'Full' backup type. 1802654012fSReza Sabdar * 'A' of 'a': 'Archive' backup type. 1812654012fSReza Sabdar * 'I' of 'i': 'Incremental' backup type. 1822654012fSReza Sabdar * 'D' of 'd': 'Differntial' backup type. 1832654012fSReza Sabdar */ 1842654012fSReza Sabdar #define IS_LBR_BKTYPE(t) (((t) && strchr("FAID", toupper(t))) ? 1 : 0) 1852654012fSReza Sabdar 1862654012fSReza Sabdar 1872654012fSReza Sabdar /* 1882654012fSReza Sabdar * NLP flags. 1892654012fSReza Sabdar */ 1902654012fSReza Sabdar #define NLPF_CHKPNTED_PATH (1 << 0) 1912654012fSReza Sabdar #define NLPF_FH (1 << 1) 1922654012fSReza Sabdar #define NLPF_DIRECT (1 << 2) 1932654012fSReza Sabdar #define NLPF_UPDATE (1 << 3) 1942654012fSReza Sabdar #define NLPF_DUMP (1 << 4) 1952654012fSReza Sabdar #define NLPF_TAR (1 << 5) 1962654012fSReza Sabdar #define NLPF_ABORTED (1 << 6) 1972654012fSReza Sabdar #define NLPF_TOKENBK (1 << 8) 1982654012fSReza Sabdar #define NLPF_LBRBK (1 << 9) 1992654012fSReza Sabdar #define NLPF_LEVELBK (1 << 10) 2002654012fSReza Sabdar #define NLPF_IGNCTIME (1 << 11) 2012654012fSReza Sabdar #define NLPF_INCLMTIME (1 << 12) 2022654012fSReza Sabdar #define NLPF_RECURSIVE (1 << 13) 2032654012fSReza Sabdar 2042654012fSReza Sabdar /* 2052654012fSReza Sabdar * Macros on NLP flags. 2062654012fSReza Sabdar */ 2072654012fSReza Sabdar #define NLP_ISSET(n, f) (((n)->nlp_flags & (f)) != 0) 2082654012fSReza Sabdar #define NLP_SET(n, f) (n)->nlp_flags |= (f) 2092654012fSReza Sabdar #define NLP_UNSET(n, f) (n)->nlp_flags &= ~(f) 2102654012fSReza Sabdar 2112654012fSReza Sabdar 2122654012fSReza Sabdar #define NLP_ISCHKPNTED(n) NLP_ISSET(n, NLPF_CHKPNTED_PATH) 2132654012fSReza Sabdar #define NLP_SHOULD_UPDATE(n) NLP_ISSET(n, NLPF_UPDATE) 2142654012fSReza Sabdar #define NLP_ISDUMP(n) NLP_ISSET(n, NLPF_DUMP) 2152654012fSReza Sabdar #define NLP_ISTAR(n) NLP_ISSET(n, NLPF_TAR) 2162654012fSReza Sabdar #define NLP_IGNCTIME(n) NLP_ISSET(n, NLPF_IGNCTIME) 2172654012fSReza Sabdar #define NLP_INCLMTIME(n) NLP_ISSET(n, NLPF_INCLMTIME) 2182654012fSReza Sabdar 2192654012fSReza Sabdar /* 2202654012fSReza Sabdar * NDMP statistics 2212654012fSReza Sabdar */ 2222654012fSReza Sabdar #define NS_INC(s) (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s)) 2232654012fSReza Sabdar #define NS_DEC(s) (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s)) 2242654012fSReza Sabdar #define NS_ADD(s, d) (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \ 2252654012fSReza Sabdar (uint64_t)d)) 2262654012fSReza Sabdar #define NS_UPD(s, t) { \ 2272654012fSReza Sabdar atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \ 2282654012fSReza Sabdar atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \ 2292654012fSReza Sabdar } 2302654012fSReza Sabdar 2312654012fSReza Sabdar #define NLP_READY 1 2322654012fSReza Sabdar 2332654012fSReza Sabdar typedef struct ndmp_lbr_params { 2342654012fSReza Sabdar struct ndmpd_session *nlp_session; 2352654012fSReza Sabdar int nlp_flags; 2362654012fSReza Sabdar 2372654012fSReza Sabdar ndmp_backup_params_t bk_params; 2382654012fSReza Sabdar ndmp_restore_params_t rs_params; 2392654012fSReza Sabdar #define nlp_backup_path bk_params.bk_path 2402654012fSReza Sabdar #define nlp_llevel bk_params.bk_llevel 2412654012fSReza Sabdar #define nlp_ldate bk_params.bk_ldate 2422654012fSReza Sabdar #define nlp_clevel bk_params.bk_clevel 2432654012fSReza Sabdar #define nlp_tokseq nlp_clevel 2442654012fSReza Sabdar #define nlp_tokdate nlp_ldate 2452654012fSReza Sabdar #define nlp_cdate bk_params.bk_cdate 2462654012fSReza Sabdar #define nlp_bkmap bk_params.bk_map 2472654012fSReza Sabdar #define nlp_bkdirino bk_params.bk_dirino 2482654012fSReza Sabdar #define nlp_dmpnm bk_params.bk_dmpnm 2492654012fSReza Sabdar #define nlp_exl bk_params.bk_exl 2502654012fSReza Sabdar #define nlp_inc bk_params.bk_inc 2512654012fSReza Sabdar 2522654012fSReza Sabdar #define nlp_nfiles rs_params.rs_nf 2532654012fSReza Sabdar #define nlp_restore_path rs_params.rs_path 2542654012fSReza Sabdar #define nlp_restore_bk_path rs_params.rs_bkpath 2552654012fSReza Sabdar #define nlp_restored rs_params.rs_restored 2562654012fSReza Sabdar #define nlp_rsbm rs_params.rs_bm 2572654012fSReza Sabdar #define nlp_lastidx rs_params.rs_lastidx 2582654012fSReza Sabdar 2592654012fSReza Sabdar ndmpd_module_params_t *nlp_params; 2602654012fSReza Sabdar tlm_job_stats_t *nlp_jstat; 2612654012fSReza Sabdar lbr_fhlog_call_backs_t *nlp_logcallbacks; 2622654012fSReza Sabdar tlm_commands_t nlp_cmds; 263a23888a3SJan Kryl 264a23888a3SJan Kryl cond_t nlp_cv; /* for signaling a processed request */ 265a23888a3SJan Kryl mutex_t nlp_mtx; /* mutex to synchronize access to nlp_cv */ 2662654012fSReza Sabdar u_longlong_t nlp_bytes_total; 2672654012fSReza Sabdar } ndmp_lbr_params_t; 2682654012fSReza Sabdar 2692654012fSReza Sabdar 2702654012fSReza Sabdar typedef struct mem_ndmp_name_v3 { 2712654012fSReza Sabdar char *nm3_opath; 2722654012fSReza Sabdar char *nm3_dpath; 2732654012fSReza Sabdar char *nm3_newnm; 2742654012fSReza Sabdar u_longlong_t nm3_node; 2752654012fSReza Sabdar u_longlong_t nm3_fh_info; 2762654012fSReza Sabdar ndmp_error nm3_err; 2772654012fSReza Sabdar } mem_ndmp_name_v3_t; 2782654012fSReza Sabdar 2792654012fSReza Sabdar typedef struct ndmpd_file_handler { 2802654012fSReza Sabdar int fh_fd; 2812654012fSReza Sabdar ulong_t fh_mode; 2822654012fSReza Sabdar ulong_t fh_class; 2832654012fSReza Sabdar void *fh_cookie; 2842654012fSReza Sabdar ndmpd_file_handler_func_t *fh_func; 2852654012fSReza Sabdar struct ndmpd_file_handler *fh_next; 2862654012fSReza Sabdar } ndmpd_file_handler_t; 2872654012fSReza Sabdar 2882654012fSReza Sabdar typedef struct ndmpd_session_scsi_desc { 2892654012fSReza Sabdar int sd_is_open; 2902654012fSReza Sabdar int sd_devid; 2912654012fSReza Sabdar boolean_t sd_valid_target_set; 2922654012fSReza Sabdar int sd_sid; 2932654012fSReza Sabdar int sd_lun; 2942654012fSReza Sabdar char sd_adapter_name[SCSI_MAX_NAME]; 2952654012fSReza Sabdar } ndmpd_session_scsi_desc_t; 2962654012fSReza Sabdar 2972654012fSReza Sabdar typedef struct ndmpd_session_tape_desc { 2982654012fSReza Sabdar int td_fd; /* tape device file descriptor */ 2992654012fSReza Sabdar ulong_t td_record_count; /* number of records written */ 3002654012fSReza Sabdar ndmp_tape_open_mode td_mode; /* tape device open mode */ 3012654012fSReza Sabdar u_longlong_t td_pos; /* current position on the current tape */ 3022654012fSReza Sabdar int td_sid; 3032654012fSReza Sabdar int td_lun; 3042654012fSReza Sabdar char td_adapter_name[SCSI_MAX_NAME]; 3052654012fSReza Sabdar } ndmpd_session_tape_desc_t; 3062654012fSReza Sabdar 3072654012fSReza Sabdar typedef struct ndmpd_session_mover_desc { 3082654012fSReza Sabdar ndmp_mover_state md_state; /* current state */ 3092654012fSReza Sabdar ndmp_mover_mode md_mode; /* current mode */ 3102654012fSReza Sabdar ndmp_mover_pause_reason md_pause_reason; /* current reason */ 3112654012fSReza Sabdar ndmp_mover_halt_reason md_halt_reason; /* current reason */ 3122654012fSReza Sabdar u_longlong_t md_data_written; /* total written to tape */ 3132654012fSReza Sabdar u_longlong_t md_seek_position; /* current seek position */ 3142654012fSReza Sabdar u_longlong_t md_bytes_left_to_read; /* #bytes to end of seek window */ 3152654012fSReza Sabdar u_longlong_t md_window_offset; /* valid data window begin */ 3162654012fSReza Sabdar u_longlong_t md_window_length; /* valid data window length */ 3172654012fSReza Sabdar u_longlong_t md_position; /* current data stream pos */ 3182654012fSReza Sabdar boolean_t md_pre_cond; /* used for precondition checks */ 3192654012fSReza Sabdar ulong_t md_record_size; /* tape I/O record size */ 3202654012fSReza Sabdar ulong_t md_record_num; /* current record num */ 3212654012fSReza Sabdar int md_listen_sock; /* data conn listen socket */ 3222654012fSReza Sabdar int md_sock; /* data conn socket */ 3232654012fSReza Sabdar ulong_t md_r_index; /* buffer read index */ 3242654012fSReza Sabdar ulong_t md_w_index; /* buffer write index */ 3252654012fSReza Sabdar char *md_buf; /* data buffer */ 3262654012fSReza Sabdar /* 3272654012fSReza Sabdar * V2 fields. 3282654012fSReza Sabdar */ 3292654012fSReza Sabdar ulong_t md_discard_length; /* bytes to discard */ 3302654012fSReza Sabdar 3312654012fSReza Sabdar /* 3322654012fSReza Sabdar * V3 fields. 3332654012fSReza Sabdar */ 3342654012fSReza Sabdar ndmp_addr_v3 md_data_addr; 3352654012fSReza Sabdar /* 3362654012fSReza Sabdar * V4 fields. 3372654012fSReza Sabdar */ 3382654012fSReza Sabdar ndmp_addr_v4 md_data_addr_v4; 3392654012fSReza Sabdar } ndmpd_session_mover_desc_t; 3402654012fSReza Sabdar 3412654012fSReza Sabdar 3422654012fSReza Sabdar typedef struct ndmpd_session_data_module { 3432654012fSReza Sabdar void *dm_module_cookie; /* sent as abort_func param */ 3442654012fSReza Sabdar module_start_func_t *dm_start_func; /* start function */ 3452654012fSReza Sabdar module_abort_func_t *dm_abort_func; /* abort function */ 3462654012fSReza Sabdar ndmpd_module_stats dm_stats; /* statistics buffer */ 3472654012fSReza Sabdar } ndmpd_session_data_module_t; 3482654012fSReza Sabdar 3492654012fSReza Sabdar typedef struct ndmpd_session_data_desc { 3502654012fSReza Sabdar /* 3512654012fSReza Sabdar * Common fields. 3522654012fSReza Sabdar */ 3532654012fSReza Sabdar ndmp_data_operation dd_operation; /* current operation */ 3542654012fSReza Sabdar boolean_t dd_abort; /* abort operation flag */ 3552654012fSReza Sabdar boolean_t dd_io_ready; /* mover sock read for I/O */ 3562654012fSReza Sabdar ndmp_pval *dd_env; /* environment from backup or recover request */ 3572654012fSReza Sabdar ulong_t dd_env_len; /* environment length */ 3582654012fSReza Sabdar ulong_t dd_nlist_len; /* recover file list length */ 3592654012fSReza Sabdar int dd_sock; /* listen and data socket */ 3602654012fSReza Sabdar u_longlong_t dd_read_offset; /* data read seek offset */ 3612654012fSReza Sabdar u_longlong_t dd_read_length; /* data read length */ 3622654012fSReza Sabdar u_longlong_t dd_data_size; /* data size to be backed up */ 3632654012fSReza Sabdar ndmpd_session_data_module_t dd_module; 3642654012fSReza Sabdar 3652654012fSReza Sabdar ndmp_data_state dd_state; /* current state */ 3662654012fSReza Sabdar ndmp_data_halt_reason dd_halt_reason; /* current reason */ 3672654012fSReza Sabdar /* 3682654012fSReza Sabdar * V2 fields. 3692654012fSReza Sabdar */ 3702654012fSReza Sabdar ndmp_name *dd_nlist; /* recover file list */ 3712654012fSReza Sabdar ndmp_mover_addr dd_mover; /* mover address */ 3722654012fSReza Sabdar /* 3732654012fSReza Sabdar * V3 fields. 3742654012fSReza Sabdar */ 3752654012fSReza Sabdar mem_ndmp_name_v3_t *dd_nlist_v3; 3762654012fSReza Sabdar ndmp_addr_v3 dd_data_addr; 3772654012fSReza Sabdar int dd_listen_sock; /* socket for listening for remote */ 3782654012fSReza Sabdar /* mover connections */ 3792654012fSReza Sabdar u_longlong_t dd_bytes_left_to_read; 3802654012fSReza Sabdar u_longlong_t dd_position; 3812654012fSReza Sabdar u_longlong_t dd_discard_length; 3822654012fSReza Sabdar /* 3832654012fSReza Sabdar * V4 fields. 3842654012fSReza Sabdar */ 3852654012fSReza Sabdar ndmp_addr_v4 dd_data_addr_v4; 3862654012fSReza Sabdar } ndmpd_session_data_desc_t; 3872654012fSReza Sabdar 3882654012fSReza Sabdar typedef struct ndmpd_session_file_history { 3892654012fSReza Sabdar ndmp_fh_unix_path *fh_path_entries; 3902654012fSReza Sabdar ndmp_fh_unix_dir *fh_dir_entries; 3912654012fSReza Sabdar ndmp_fh_unix_node *fh_node_entries; 3922654012fSReza Sabdar char *fh_path_name_buf; 3932654012fSReza Sabdar char *fh_dir_name_buf; 3942654012fSReza Sabdar ulong_t fh_path_index; 3952654012fSReza Sabdar ulong_t fh_dir_index; 3962654012fSReza Sabdar ulong_t fh_node_index; 3972654012fSReza Sabdar ulong_t fh_path_name_buf_index; 3982654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 3992654012fSReza Sabdar } ndmpd_session_file_history_t; 4002654012fSReza Sabdar 4012654012fSReza Sabdar typedef struct ndmpd_session_file_history_v3 { 4022654012fSReza Sabdar ndmp_file_v3 *fh_files; 4032654012fSReza Sabdar ndmp_dir_v3 *fh_dirs; 4042654012fSReza Sabdar ndmp_node_v3 *fh_nodes; 4052654012fSReza Sabdar ndmp_file_name_v3 *fh_file_names; 4062654012fSReza Sabdar ndmp_file_name_v3 *fh_dir_names; 4072654012fSReza Sabdar ndmp_file_stat_v3 *fh_file_stats; 4082654012fSReza Sabdar ndmp_file_stat_v3 *fh_node_stats; 4092654012fSReza Sabdar char *fh_file_name_buf; 4102654012fSReza Sabdar char *fh_dir_name_buf; 4112654012fSReza Sabdar ulong_t fh_file_index; 4122654012fSReza Sabdar ulong_t fh_dir_index; 4132654012fSReza Sabdar ulong_t fh_node_index; 4142654012fSReza Sabdar ulong_t fh_file_name_buf_index; 4152654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 4162654012fSReza Sabdar } ndmpd_session_file_history_v3_t; 4172654012fSReza Sabdar 4188c4f9701SJanice Chang /* 4198c4f9701SJanice Chang * zfs-based backup (zfs send/recv) 4208c4f9701SJanice Chang */ 4218c4f9701SJanice Chang 4228c4f9701SJanice Chang typedef enum { 4238c4f9701SJanice Chang NDMPD_ZFS_MAJOR_0, 4248c4f9701SJanice Chang } ndmpd_zfs_major_t; 4258c4f9701SJanice Chang 4268c4f9701SJanice Chang typedef enum { 4278c4f9701SJanice Chang NDMPD_ZFS_MINOR_0, 4288c4f9701SJanice Chang } ndmpd_zfs_minor_t; 4298c4f9701SJanice Chang 4308c4f9701SJanice Chang typedef enum { 4318c4f9701SJanice Chang NDMPD_ZFS_PROP_MAJOR_0, 4328c4f9701SJanice Chang } ndmpd_zfs_prop_major_t; 4338c4f9701SJanice Chang 4348c4f9701SJanice Chang typedef enum { 4358c4f9701SJanice Chang NDMPD_ZFS_PROP_MINOR_0, 4368c4f9701SJanice Chang } ndmpd_zfs_prop_minor_t; 4378c4f9701SJanice Chang 4388c4f9701SJanice Chang #define NDMPD_ZFS_MAJOR_VERSION NDMPD_ZFS_MAJOR_0 4398c4f9701SJanice Chang #define NDMPD_ZFS_MINOR_VERSION NDMPD_ZFS_MINOR_0 4408c4f9701SJanice Chang #define NDMPD_ZFS_PROP_MAJOR_VERSION NDMPD_ZFS_PROP_MAJOR_0 4418c4f9701SJanice Chang #define NDMPD_ZFS_PROP_MINOR_VERSION NDMPD_ZFS_PROP_MINOR_0 4428c4f9701SJanice Chang 4438c4f9701SJanice Chang #pragma pack(1) 4448c4f9701SJanice Chang typedef struct { 4458c4f9701SJanice Chang char nzh_magic[14]; /* NDMPUTF8MAGIC\0 */ 4468c4f9701SJanice Chang uint32_t nzh_major; /* major version */ 4478c4f9701SJanice Chang uint32_t nzh_minor; /* minor version */ 4488c4f9701SJanice Chang uint32_t nzh_hdrlen; /* length of hdr in bytes including magic */ 4498c4f9701SJanice Chang /* future extensions */ 4508c4f9701SJanice Chang } ndmpd_zfs_header_t; 4518c4f9701SJanice Chang #pragma pack() 4528c4f9701SJanice Chang 4538c4f9701SJanice Chang #define PIPE_TAPE 0 4548c4f9701SJanice Chang #define PIPE_ZFS 1 4558c4f9701SJanice Chang 4568c4f9701SJanice Chang #define NDMPD_ZFS_DMP_NAME_MAX 32 4578c4f9701SJanice Chang 4588c4f9701SJanice Chang typedef struct ndmpd_zfs_args { 4598c4f9701SJanice Chang zfs_type_t nz_type; /* type of ZFS dataset */ 460*a1988827SMatthew Ahrens char nz_dataset[ZFS_MAX_DATASET_NAME_LEN]; /* dataset name */ 461*a1988827SMatthew Ahrens char nz_snapname[ZFS_MAX_DATASET_NAME_LEN]; /* snapname (following @) */ 462*a1988827SMatthew Ahrens char nz_fromsnap[ZFS_MAX_DATASET_NAME_LEN]; /* snap of L-1 bkup */ 4638c4f9701SJanice Chang char nz_snapprop[ZFS_MAXPROPLEN]; /* contents of snap incr prop */ 4648c4f9701SJanice Chang boolean_t nz_ndmpd_snap; /* ndmpd-generated snap? */ 4658c4f9701SJanice Chang 4668c4f9701SJanice Chang pthread_t nz_sendrecv_thread; /* thread for send/recv */ 4678c4f9701SJanice Chang pthread_t nz_tape_thread; /* thread for tape r/w */ 4688c4f9701SJanice Chang int32_t nz_pipe_fd[2]; /* pipe for above 2 threads */ 4698c4f9701SJanice Chang int32_t nz_bufsize; /* tape r/w buf size */ 4708c4f9701SJanice Chang int64_t nz_window_len; /* DMA window length */ 4718c4f9701SJanice Chang 4728c4f9701SJanice Chang int nz_level; /* val of LEVEL env var */ 4738c4f9701SJanice Chang char nz_zfs_mode; /* val of ZFS_MODE env var */ 4748c4f9701SJanice Chang boolean_t nz_zfs_force; /* val of ZFS_FORCE env var */ 4758c4f9701SJanice Chang boolean_t nz_update; /* val of UPDATE env var */ 4768c4f9701SJanice Chang char nz_dmp_name[NDMPD_ZFS_DMP_NAME_MAX]; /* val of DMP_NAME env var */ 477c1a2c731SJanice Chang u_longlong_t nz_zfs_backup_size; /* used for restore only */ 4788c4f9701SJanice Chang 4798c4f9701SJanice Chang ndmpd_module_params_t nz_params; 4808c4f9701SJanice Chang ndmp_lbr_params_t *nz_nlp; 4818c4f9701SJanice Chang libzfs_handle_t *nz_zlibh; /* session-specific lzfs hdl */ 4828c4f9701SJanice Chang ndmp_context_t nz_nctx; /* used by plugin */ 4838c4f9701SJanice Chang 4848c4f9701SJanice Chang ndmpd_zfs_header_t nz_tape_header; /* tape hdr for "zfs" backup */ 4858c4f9701SJanice Chang } ndmpd_zfs_args_t; 4868c4f9701SJanice Chang 4878c4f9701SJanice Chang #define ndmpd_zfs_params (&(ndmpd_zfs_args)->nz_params) 4888c4f9701SJanice Chang 4892654012fSReza Sabdar typedef struct ndmpd_session { 4902654012fSReza Sabdar ndmp_connection_t *ns_connection; /* NDMP connection to client */ 4912654012fSReza Sabdar boolean_t ns_eof; /* connection EOF flag */ 4922654012fSReza Sabdar ushort_t ns_protocol_version; /* connection protocol version */ 4932654012fSReza Sabdar ndmpd_session_scsi_desc_t ns_scsi; 4942654012fSReza Sabdar ndmpd_session_tape_desc_t ns_tape; 4952654012fSReza Sabdar ndmpd_session_mover_desc_t ns_mover; 4962654012fSReza Sabdar ndmpd_session_data_desc_t ns_data; 4972654012fSReza Sabdar ndmpd_session_file_history_t ns_fh; 4982654012fSReza Sabdar ndmpd_file_handler_t *ns_file_handler_list; /* for I/O multiplexing */ 4992654012fSReza Sabdar int ns_nref; 5002654012fSReza Sabdar ndmp_lbr_params_t *ns_ndmp_lbr_params; 5018c4f9701SJanice Chang struct ndmpd_zfs_args ns_ndmpd_zfs_args; 5028c4f9701SJanice Chang ndmpd_backup_type_t ns_butype; 5032654012fSReza Sabdar mutex_t ns_lock; 5042654012fSReza Sabdar 5052654012fSReza Sabdar /* 5062654012fSReza Sabdar * NDMP V3 5072654012fSReza Sabdar * Tape, SCSI, mover, data and file handlers will 5082654012fSReza Sabdar * be shared between V2 and V3. 5092654012fSReza Sabdar */ 5102654012fSReza Sabdar ndmpd_session_file_history_v3_t ns_fh_v3; 5112654012fSReza Sabdar unsigned char ns_challenge[MD5_CHALLENGE_SIZE]; /* For MD5 */ 5122654012fSReza Sabdar 5132654012fSReza Sabdar /* 5142654012fSReza Sabdar * NDMP V4 related data 5152654012fSReza Sabdar */ 5165bc1e222SAlbert Lee boolean_t ns_get_ext_list; 5172654012fSReza Sabdar boolean_t ns_set_ext_list; 5182654012fSReza Sabdar 5192654012fSReza Sabdar /* handling of hardlink, hardlink queue head */ 5202654012fSReza Sabdar struct hardlink_q *hardlink_q; 5212654012fSReza Sabdar } ndmpd_session_t; 5222654012fSReza Sabdar 5232654012fSReza Sabdar 5242654012fSReza Sabdar /* 5252654012fSReza Sabdar * NDMP request handler functions. 5262654012fSReza Sabdar */ 5272654012fSReza Sabdar 5282654012fSReza Sabdar /* Config */ 5292654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v2; 5302654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_attr_v2; 5312654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_mover_type_v2; 5322654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v2; 5332654012fSReza Sabdar 5342654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v3; 5352654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v3; 5362654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_connection_type_v3; 5372654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v3; 5382654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_fs_info_v3; 5392654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_tape_info_v3; 5402654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_scsi_info_v3; 5412654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_server_info_v3; 5422654012fSReza Sabdar 5432654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v4; 5442654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_ext_list_v4; 5452654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_set_ext_list_v4; 5462654012fSReza Sabdar 5472654012fSReza Sabdar 5482654012fSReza Sabdar /* Scsi */ 5492654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v2; 5502654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_close_v2; 5512654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_get_state_v2; 5522654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v2; 5532654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_device_v2; 5542654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_bus_v2; 5552654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_execute_cdb_v2; 5562654012fSReza Sabdar 5572654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v3; 5582654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v3; 5592654012fSReza Sabdar 5602654012fSReza Sabdar 5612654012fSReza Sabdar /* Tape */ 5622654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v2; 5632654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v2; 5642654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v2; 5652654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_mtio_v2; 5662654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v2; 5672654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v2; 5682654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_execute_cdb_v2; 5692654012fSReza Sabdar 5702654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v3; 5712654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v3; 5722654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v3; 5732654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v3; 5742654012fSReza Sabdar 5752654012fSReza Sabdar 5762654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v4; 5772654012fSReza Sabdar /* Data */ 5782654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v2; 5792654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v2; 5802654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v2; 5812654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v2; 5822654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v2; 5832654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v2; 5842654012fSReza Sabdar 5852654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v3; 5862654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v3; 5872654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v3; 5882654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v3; 5892654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v3; 5902654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v3; 5912654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v3; 5922654012fSReza Sabdar 5932654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v4; 5942654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v4; 5952654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v4; 5962654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v4; 5972654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_filehist_v4; 5982654012fSReza Sabdar 5992654012fSReza Sabdar 6002654012fSReza Sabdar /* Connect */ 6012654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_open_v2; 6022654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v2; 6032654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_server_auth_v2; 6042654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v2; 6052654012fSReza Sabdar 6062654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v3; 6072654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v3; 6082654012fSReza Sabdar 6092654012fSReza Sabdar 6102654012fSReza Sabdar /* Mover */ 6112654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v2; 6122654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v2; 6132654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v2; 6142654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v2; 6152654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_stop_v2; 6162654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v2; 6172654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v2; 6182654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_close_v2; 6192654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v2; 6202654012fSReza Sabdar 6212654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v3; 6222654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v3; 6232654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v3; 6242654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v3; 6252654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v3; 6262654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v3; 6272654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v3; 6282654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v3; 6292654012fSReza Sabdar 6302654012fSReza Sabdar 6312654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v4; 6322654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v4; 6332654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v4; 6342654012fSReza Sabdar 6352654012fSReza Sabdar 6362654012fSReza Sabdar /* 6372654012fSReza Sabdar * Backup/recover module API functions. 6382654012fSReza Sabdar */ 6392654012fSReza Sabdar ndmpd_get_env_func_t ndmpd_api_get_env; 6402654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_add_env; 6412654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_set_env; 6422654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name; 6432654012fSReza Sabdar ndmpd_dispatch_func_t ndmpd_api_dispatch; 6442654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v2; 6452654012fSReza Sabdar 6462654012fSReza Sabdar 6472654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v2; 6482654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_path_v2; 6492654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v2; 6502654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v2; 6512654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v2; 6522654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v2; 6532654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v2; 6542654012fSReza Sabdar ndmpd_add_file_handler_func_t ndmpd_api_add_file_handler; 6552654012fSReza Sabdar ndmpd_remove_file_handler_func_t ndmpd_api_remove_file_handler; 6562654012fSReza Sabdar 6572654012fSReza Sabdar 6582654012fSReza Sabdar /* 6592654012fSReza Sabdar * NDMP V3 6602654012fSReza Sabdar */ 6612654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v3; 6622654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v3; 6632654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v3; 6642654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v3; 6652654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v3; 6662654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name_v3; 6672654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_file_v3; 6682654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v3; 6692654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v3; 6702654012fSReza Sabdar 6712654012fSReza Sabdar /* 6722654012fSReza Sabdar * NDMP V4 6732654012fSReza Sabdar */ 6742654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v4; 6752654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4; 6762654012fSReza Sabdar 6772654012fSReza Sabdar #ifndef NO_NDMP_API_LOG_PROTOTYPES 6782654012fSReza Sabdar ndmpd_log_func_t ndmpd_api_log_v2; 6792654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v3; 6802654012fSReza Sabdar #endif /* NO_NDMP_API_LOG_PROTOTYPES */ 6812654012fSReza Sabdar 6822654012fSReza Sabdar typedef void ndmpd_func_t(ndmp_connection_t *, void *); 6832654012fSReza Sabdar 6842654012fSReza Sabdar /* 6852654012fSReza Sabdar * pthread call arg parameters 6862654012fSReza Sabdar */ 6872654012fSReza Sabdar typedef struct { 6882654012fSReza Sabdar int nw_sock; 6892654012fSReza Sabdar long nw_ipaddr; 6902654012fSReza Sabdar ndmp_con_handler_func_t nw_con_handler_func; 6912654012fSReza Sabdar } ndmpd_worker_arg_t; 6922654012fSReza Sabdar 6932654012fSReza Sabdar typedef struct { 6942654012fSReza Sabdar char *br_jname; 6952654012fSReza Sabdar ndmp_lbr_params_t *br_nlp; 6962654012fSReza Sabdar tlm_commands_t *br_cmds; 6972654012fSReza Sabdar pthread_barrier_t br_barrier; 6982654012fSReza Sabdar } backup_reader_arg_t; 6992654012fSReza Sabdar 7002654012fSReza Sabdar typedef struct { 7012654012fSReza Sabdar ndmpd_session_t *tr_session; 7022654012fSReza Sabdar ndmpd_module_params_t *tr_mod_params; 7032654012fSReza Sabdar tlm_commands_t *tr_cmds; 7042654012fSReza Sabdar } ndmp_tar_reader_arg_t; 7052654012fSReza Sabdar 706416eec61SReza Sabdar typedef struct { 707416eec61SReza Sabdar ndmpd_session_t *bs_session; 708416eec61SReza Sabdar char *bs_jname; 709416eec61SReza Sabdar char *bs_path; 710416eec61SReza Sabdar } ndmp_bkup_size_arg_t; 711416eec61SReza Sabdar 7122654012fSReza Sabdar /* 7132654012fSReza Sabdar * Variables from ndmpd_comm.c 7142654012fSReza Sabdar */ 7152654012fSReza Sabdar extern int ndmp_ver; 7162654012fSReza Sabdar extern int ndmp_full_restore_path; 7172654012fSReza Sabdar extern int ndmp_dar_support; 7182654012fSReza Sabdar extern int ndmp_port; 7192654012fSReza Sabdar extern ndmp_stat_t ndstat; 7202654012fSReza Sabdar 7212654012fSReza Sabdar extern void ndmpd_main(void); 7222654012fSReza Sabdar extern void connection_handler(ndmp_connection_t *); 7232654012fSReza Sabdar extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path, 7242654012fSReza Sabdar int dest, char *local_path, int result); 7252654012fSReza Sabdar extern void ndmpd_audit_restore(ndmp_connection_t *conn, 7262654012fSReza Sabdar char *path, int dest, char *local_path, int result); 7272654012fSReza Sabdar extern void ndmpd_audit_connect(ndmp_connection_t *conn, 7282654012fSReza Sabdar int result); 7292654012fSReza Sabdar extern void ndmpd_audit_disconnect(ndmp_connection_t *conn); 7302654012fSReza Sabdar 7312654012fSReza Sabdar /* Variables from ndmpd_main.c */ 7322654012fSReza Sabdar extern libzfs_handle_t *zlibh; 7332654012fSReza Sabdar extern mutex_t zlib_mtx; 7342654012fSReza Sabdar 7352654012fSReza Sabdar /* 7362654012fSReza Sabdar * Utility from ndmpd_connect.c. 7372654012fSReza Sabdar */ 7382654012fSReza Sabdar extern int ndmp_connect_list_add(ndmp_connection_t *, int *); 7392654012fSReza Sabdar extern int ndmp_connect_list_del(ndmp_connection_t *); 7402654012fSReza Sabdar extern int ndmpd_connect_kill_id(int); 7412654012fSReza Sabdar extern void ndmp_connect_list_get(ndmp_door_ctx_t *); 7422654012fSReza Sabdar extern void ndmpd_get_devs(ndmp_door_ctx_t *); 7432654012fSReza Sabdar 7442654012fSReza Sabdar /* 7452654012fSReza Sabdar * Utility functions form ndmpd_data.c. 7462654012fSReza Sabdar */ 7472654012fSReza Sabdar extern void ndmpd_data_cleanup(ndmpd_session_t *); 7482654012fSReza Sabdar extern int ndmpd_data_init(ndmpd_session_t *); 7492654012fSReza Sabdar extern char *ndmp_data_get_mover_mode(ndmpd_session_t *); 7502654012fSReza Sabdar extern void ndmpd_data_error(ndmpd_session_t *, ndmp_data_halt_reason); 7512654012fSReza Sabdar 7522654012fSReza Sabdar 7532654012fSReza Sabdar /* 7542654012fSReza Sabdar * Utility functions from ndmpd_mover.c. 7552654012fSReza Sabdar */ 7562654012fSReza Sabdar extern int ndmpd_mover_init(ndmpd_session_t *); 7572654012fSReza Sabdar extern void ndmpd_mover_cleanup(ndmpd_session_t *); 7582654012fSReza Sabdar extern ndmp_error ndmpd_mover_connect(ndmpd_session_t *, 7592654012fSReza Sabdar ndmp_mover_mode); 7602654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 7612654012fSReza Sabdar ndmp_mover_halt_reason); 7622654012fSReza Sabdar extern int ndmpd_mover_seek(ndmpd_session_t *, 7632654012fSReza Sabdar u_longlong_t, 7642654012fSReza Sabdar u_longlong_t); 7652654012fSReza Sabdar extern int ndmpd_local_write(ndmpd_session_t *, 7662654012fSReza Sabdar char *, 7672654012fSReza Sabdar ulong_t); 7682654012fSReza Sabdar extern int ndmpd_remote_write(ndmpd_session_t *, 7692654012fSReza Sabdar char *, 7702654012fSReza Sabdar ulong_t); 7712654012fSReza Sabdar extern int ndmpd_local_read(ndmpd_session_t *, 7722654012fSReza Sabdar char *, 7732654012fSReza Sabdar ulong_t); 7742654012fSReza Sabdar extern int ndmpd_remote_read(ndmpd_session_t *, 7752654012fSReza Sabdar char *, 7762654012fSReza Sabdar ulong_t); 7772654012fSReza Sabdar 7782654012fSReza Sabdar extern void ndmpd_mover_shut_down(ndmpd_session_t *); 7792654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 7802654012fSReza Sabdar ndmp_mover_halt_reason); 7812654012fSReza Sabdar extern int ndmpd_local_write_v3(ndmpd_session_t *, 7822654012fSReza Sabdar char *, 7832654012fSReza Sabdar ulong_t); 7842654012fSReza Sabdar extern int ndmpd_local_read_v3(ndmpd_session_t *, 7852654012fSReza Sabdar char *, 7862654012fSReza Sabdar ulong_t); 7872654012fSReza Sabdar extern int ndmpd_remote_read_v3(ndmpd_session_t *, 7882654012fSReza Sabdar char *, 7892654012fSReza Sabdar ulong_t); 7902654012fSReza Sabdar 7912654012fSReza Sabdar 7922654012fSReza Sabdar /* 7932654012fSReza Sabdar * Utility functions from ndmpd_file_history.c 7942654012fSReza Sabdar */ 7952654012fSReza Sabdar extern void ndmpd_file_history_init(ndmpd_session_t *); 7962654012fSReza Sabdar extern void ndmpd_file_history_cleanup(ndmpd_session_t *, 7972654012fSReza Sabdar boolean_t); 7982654012fSReza Sabdar extern int ndmpd_file_history_path(lbr_fhlog_call_backs_t *, 7992654012fSReza Sabdar char *, 8002654012fSReza Sabdar struct stat64 *, 8012654012fSReza Sabdar u_longlong_t); 8022654012fSReza Sabdar extern int ndmpd_file_history_dir(lbr_fhlog_call_backs_t *, 8032654012fSReza Sabdar char *, 8042654012fSReza Sabdar struct stat64 *); 8052654012fSReza Sabdar extern int ndmpd_file_history_node(lbr_fhlog_call_backs_t *, 8062654012fSReza Sabdar char *, 8072654012fSReza Sabdar char *, 8082654012fSReza Sabdar struct stat64 *, 8092654012fSReza Sabdar u_longlong_t); 8102654012fSReza Sabdar extern int 8112654012fSReza Sabdar ndmpd_path_restored(lbr_fhlog_call_backs_t *, 8122654012fSReza Sabdar char *, 8132654012fSReza Sabdar struct stat64 *, 8142654012fSReza Sabdar u_longlong_t); 8152654012fSReza Sabdar extern int ndmpd_fhpath_v3_cb(lbr_fhlog_call_backs_t *, 8162654012fSReza Sabdar char *, 8172654012fSReza Sabdar struct stat64 *, 8182654012fSReza Sabdar u_longlong_t); 8192654012fSReza Sabdar extern int ndmpd_fhdir_v3_cb(lbr_fhlog_call_backs_t *, 8202654012fSReza Sabdar char *, 8212654012fSReza Sabdar struct stat64 *); 8222654012fSReza Sabdar extern int ndmpd_fhnode_v3_cb(lbr_fhlog_call_backs_t *, 8232654012fSReza Sabdar char *, 8242654012fSReza Sabdar char *, 8252654012fSReza Sabdar struct stat64 *, 8262654012fSReza Sabdar u_longlong_t); 8272654012fSReza Sabdar extern int ndmpd_path_restored_v3(lbr_fhlog_call_backs_t *, 8282654012fSReza Sabdar char *, 8292654012fSReza Sabdar struct stat64 *, 8302654012fSReza Sabdar u_longlong_t); 8312654012fSReza Sabdar 8322654012fSReza Sabdar extern int ndmp_send_recovery_stat_v3(ndmpd_module_params_t *, 8332654012fSReza Sabdar ndmp_lbr_params_t *, 8342654012fSReza Sabdar int, 8352654012fSReza Sabdar int); 8362654012fSReza Sabdar 8372654012fSReza Sabdar 8382654012fSReza Sabdar /* 8392654012fSReza Sabdar * Utility functions from ndmpd_dtime.c 8402654012fSReza Sabdar */ 8412654012fSReza Sabdar extern int ndmpd_put_dumptime(char *, int, time_t); 8422654012fSReza Sabdar extern int ndmpd_get_dumptime(char *, int *, time_t *); 8432654012fSReza Sabdar extern int ndmpd_append_dumptime(char *, char *, int, time_t); 8442654012fSReza Sabdar 8452654012fSReza Sabdar 8462654012fSReza Sabdar /* 8472654012fSReza Sabdar * Global variables from ndmpd_tar3.c 8482654012fSReza Sabdar */ 8492654012fSReza Sabdar extern char **ndmp_excl_list; 8502654012fSReza Sabdar 8512654012fSReza Sabdar 8522654012fSReza Sabdar /* 8532654012fSReza Sabdar * Global variables from ndmpd_util.c 8542654012fSReza Sabdar */ 8552654012fSReza Sabdar extern int ndmp_force_bk_dirs; 8562654012fSReza Sabdar extern int ndmp_rbs; 8572654012fSReza Sabdar extern int ndmp_sbs; 8582654012fSReza Sabdar extern boolean_t ndmp_dump_path_node; 8592654012fSReza Sabdar extern boolean_t ndmp_tar_path_node; 8602654012fSReza Sabdar extern boolean_t ndmp_ignore_ctime; 8612654012fSReza Sabdar extern boolean_t ndmp_include_lmtime; 8622654012fSReza Sabdar 8632654012fSReza Sabdar 8642654012fSReza Sabdar /* 8652654012fSReza Sabdar * Utility functions from ndmpd_util.c. 8662654012fSReza Sabdar */ 8672654012fSReza Sabdar extern int ndmpd_select(ndmpd_session_t *, 8682654012fSReza Sabdar boolean_t, 8692654012fSReza Sabdar ulong_t); 8702654012fSReza Sabdar 8712654012fSReza Sabdar extern ndmp_error ndmpd_save_env(ndmpd_session_t *, 8722654012fSReza Sabdar ndmp_pval *, 8732654012fSReza Sabdar ulong_t); 8742654012fSReza Sabdar 8752654012fSReza Sabdar extern void ndmpd_free_env(ndmpd_session_t *); 8762654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v2(ndmpd_session_t *, 8772654012fSReza Sabdar ndmp_name *, 8782654012fSReza Sabdar ulong_t); 8792654012fSReza Sabdar 8802654012fSReza Sabdar extern void ndmpd_free_nlist(ndmpd_session_t *); 8812654012fSReza Sabdar extern int ndmpd_add_file_handler(ndmpd_session_t *, 8822654012fSReza Sabdar void *, 8832654012fSReza Sabdar int, 8842654012fSReza Sabdar ulong_t, 8852654012fSReza Sabdar ulong_t, 8862654012fSReza Sabdar ndmpd_file_handler_func_t *); 8872654012fSReza Sabdar 8882654012fSReza Sabdar extern int ndmpd_remove_file_handler(ndmpd_session_t *, 8892654012fSReza Sabdar int); 8902654012fSReza Sabdar 8912654012fSReza Sabdar extern void ndmp_send_reply(ndmp_connection_t *, 8922654012fSReza Sabdar void *, 8932654012fSReza Sabdar char *); 8942654012fSReza Sabdar 8952654012fSReza Sabdar extern int ndmp_mtioctl(int, int, int); 8962654012fSReza Sabdar 8972654012fSReza Sabdar extern u_longlong_t quad_to_long_long(ndmp_u_quad); 8982654012fSReza Sabdar extern ndmp_u_quad long_long_to_quad(u_longlong_t); 8992654012fSReza Sabdar 90097f7c475SJan Kryl extern void set_socket_options(int sock); 9012654012fSReza Sabdar 9022654012fSReza Sabdar extern long ndmp_buffer_get_size(ndmpd_session_t *); 9032654012fSReza Sabdar extern int ndmp_lbr_init(ndmpd_session_t *); 9042654012fSReza Sabdar extern void ndmp_lbr_cleanup(ndmpd_session_t *); 9052654012fSReza Sabdar 906a23888a3SJan Kryl extern int ndmp_wait_for_mover(ndmpd_session_t *); 9072654012fSReza Sabdar extern boolean_t is_buffer_erroneous(tlm_buffer_t *); 9082654012fSReza Sabdar extern void ndmp_execute_cdb(ndmpd_session_t *, 9092654012fSReza Sabdar char *, 9102654012fSReza Sabdar int, 9112654012fSReza Sabdar int, 9122654012fSReza Sabdar ndmp_execute_cdb_request *); 9132654012fSReza Sabdar 9142654012fSReza Sabdar extern scsi_adapter_t *scsi_get_adapter(int); 9152654012fSReza Sabdar extern boolean_t is_tape_unit_ready(char *, int); 9162654012fSReza Sabdar 9172654012fSReza Sabdar extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int); 9182654012fSReza Sabdar extern int ndmp_open_list_del(char *, int, int); 9192654012fSReza Sabdar extern void ndmp_open_list_release(ndmp_connection_t *); 9202654012fSReza Sabdar 9212654012fSReza Sabdar extern void ndmp_stop_buffer_worker(ndmpd_session_t *); 9222654012fSReza Sabdar extern void ndmp_stop_reader_thread(ndmpd_session_t *); 9232654012fSReza Sabdar extern void ndmp_stop_writer_thread(ndmpd_session_t *); 9242654012fSReza Sabdar extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *); 9252654012fSReza Sabdar extern void ndmp_waitfor_op(ndmpd_session_t *); 9262654012fSReza Sabdar 9272654012fSReza Sabdar extern char *cctime(time_t *); 9282654012fSReza Sabdar extern char *ndmp_new_job_name(char *); 9292654012fSReza Sabdar extern char *ndmpd_mk_temp(char *); 9302654012fSReza Sabdar extern char *ndmpd_make_bk_dir_path(char *, char *); 9312654012fSReza Sabdar extern boolean_t ndmp_is_chkpnt_root(char *); 9322654012fSReza Sabdar extern char **ndmpd_make_exc_list(void); 9332654012fSReza Sabdar extern void ndmp_sort_nlist_v3(ndmpd_session_t *); 9342654012fSReza Sabdar extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *); 9352654012fSReza Sabdar extern int ndmp_write_utf8magic(tlm_cmd_t *); 9362654012fSReza Sabdar extern int ndmp_tar_writer(ndmpd_session_t *, 9372654012fSReza Sabdar ndmpd_module_params_t *, 9382654012fSReza Sabdar tlm_commands_t *); 9392654012fSReza Sabdar extern void ndmp_wait_for_reader(tlm_commands_t *); 9402654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *, 9412654012fSReza Sabdar ndmp_name_v3 *, 9422654012fSReza Sabdar ulong_t); 9432654012fSReza Sabdar extern void ndmpd_free_nlist_v3(ndmpd_session_t *); 9442654012fSReza Sabdar extern int ndmp_create_socket(ulong_t *, ushort_t *); 9452654012fSReza Sabdar extern int ndmp_connect_sock_v3(ulong_t, ushort_t); 9462654012fSReza Sabdar extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *); 9472654012fSReza Sabdar extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *); 9482654012fSReza Sabdar extern char *ndmp_addr2str_v3(ndmp_addr_type); 9492654012fSReza Sabdar extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type); 9502654012fSReza Sabdar extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *); 9512654012fSReza Sabdar extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *, 9522654012fSReza Sabdar time_t *, char *); 9532654012fSReza Sabdar extern char *ndmp_get_relative_path(char *, char *); 9542654012fSReza Sabdar 9552654012fSReza Sabdar extern boolean_t ndmp_fhinode; 9562654012fSReza Sabdar extern void ndmp_load_params(void); 9572654012fSReza Sabdar extern void randomize(unsigned char *, int); 9582654012fSReza Sabdar 9592654012fSReza Sabdar 9602654012fSReza Sabdar /* 9612654012fSReza Sabdar * Utility functions from ndmpd_tar3.c. 9622654012fSReza Sabdar */ 9632654012fSReza Sabdar extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *, 9642654012fSReza Sabdar ndmpd_module_params_t *); 9652654012fSReza Sabdar extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *, 9662654012fSReza Sabdar ndmpd_module_params_t *); 9672654012fSReza Sabdar 9682654012fSReza Sabdar /* 9692654012fSReza Sabdar * door init and fini function from ndmpd_door_serv.c 9702654012fSReza Sabdar */ 9712654012fSReza Sabdar extern int ndmp_door_init(void); 9722654012fSReza Sabdar extern void ndmp_door_fini(void); 9732654012fSReza Sabdar extern boolean_t ndmp_door_check(void); 9742654012fSReza Sabdar 9752654012fSReza Sabdar extern int ndmp_get_max_tok_seq(void); 9762654012fSReza Sabdar 9772654012fSReza Sabdar extern int get_zfsvolname(char *, int, char *); 978876b86efSReza Sabdar extern int ndmp_create_snapshot(char *, char *); 979876b86efSReza Sabdar extern int ndmp_remove_snapshot(char *, char *); 9802654012fSReza Sabdar extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *); 9812654012fSReza Sabdar extern void ndmpd_abort_marking_v2(ndmpd_session_t *); 9822654012fSReza Sabdar extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *); 9832654012fSReza Sabdar extern ndmp_lbr_params_t *ndmp_get_nlp(void *); 9842654012fSReza Sabdar 9852654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter; 9862654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort; 9872654012fSReza Sabdar 9882654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter; 9892654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort; 9902654012fSReza Sabdar 9912654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter_v3; 9922654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort_v3; 9932654012fSReza Sabdar 9942654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter_v3; 9952654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort_v3; 9962654012fSReza Sabdar 9972654012fSReza Sabdar extern int ndmp_backup_extract_params(ndmpd_session_t *, 9982654012fSReza Sabdar ndmpd_module_params_t *); 9992654012fSReza Sabdar extern int ndmp_restore_extract_params(ndmpd_session_t *, 10002654012fSReza Sabdar ndmpd_module_params_t *); 10012654012fSReza Sabdar extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *); 10022654012fSReza Sabdar 10032654012fSReza Sabdar extern int tape_open(char *, int); 10049ee94b97SJan Kryl extern int tape_is_at_bot(ndmpd_session_t *); 10059ee94b97SJan Kryl extern int tape_is_at_bof(ndmpd_session_t *); 10069ee94b97SJan Kryl extern void fm_dance(ndmpd_session_t *); 10072654012fSReza Sabdar 10082654012fSReza Sabdar extern void ndmp_session_ref(ndmpd_session_t *); 10092654012fSReza Sabdar extern void ndmp_session_unref(ndmpd_session_t *); 10102654012fSReza Sabdar 10112654012fSReza Sabdar void ndmpd_get_file_entry_type(int, ndmp_file_type *); 10122654012fSReza Sabdar 10132654012fSReza Sabdar extern int tcp_accept(int, unsigned int *); 10142654012fSReza Sabdar extern int tcp_get_peer(int, unsigned int *, int *); 10152654012fSReza Sabdar 10162654012fSReza Sabdar extern char *gethostaddr(void); 1017588541fbSReza Sabdar extern char *get_default_nic_addr(void); 10182654012fSReza Sabdar extern int tlm_init(void); 10192654012fSReza Sabdar 1020876b86efSReza Sabdar extern int snapshot_create(char *, char *, boolean_t, boolean_t); 1021876b86efSReza Sabdar extern int snapshot_destroy(char *, char *, boolean_t, boolean_t, int *); 10222654012fSReza Sabdar 10232654012fSReza Sabdar extern boolean_t fs_is_chkpntvol(char *); 10242654012fSReza Sabdar extern boolean_t fs_is_chkpnt_enabled(char *); 10252654012fSReza Sabdar extern boolean_t fs_is_rdonly(char *); 10262654012fSReza Sabdar extern boolean_t fs_volexist(char *); 10272654012fSReza Sabdar extern boolean_t fs_is_valid_logvol(char *); 10282654012fSReza Sabdar extern boolean_t rootfs_dot_or_dotdot(char *); 10292654012fSReza Sabdar extern int dp_readdir(DIR *, unsigned long *, char *, 10302654012fSReza Sabdar int *, unsigned long *); 10312654012fSReza Sabdar 10322654012fSReza Sabdar extern void scsi_find_sid_lun(); 10332654012fSReza Sabdar extern char *sasd_slink_name(); 10342654012fSReza Sabdar extern int scsi_dev_exists(char *, int, int); 10352654012fSReza Sabdar extern int scsi_get_devtype(char *, int, int); 10362654012fSReza Sabdar extern struct open_list *ndmp_open_list_find(char *, int, int); 10372654012fSReza Sabdar extern int filecopy(char *, char *); 10382654012fSReza Sabdar 10392654012fSReza Sabdar extern void ndmp_stop_local_reader(); 10402654012fSReza Sabdar extern void ndmp_stop_remote_reader(); 10412654012fSReza Sabdar 10422654012fSReza Sabdar extern boolean_t match(char *, char *); 10432654012fSReza Sabdar extern char *trim_whitespace(char *); 104484bf06e9SReza Sabdar extern int fs_getstat(char *, struct fs_fhandle *, struct stat64 *); 10452654012fSReza Sabdar extern int fs_readdir(struct fs_fhandle *, char *, long *, 104684bf06e9SReza Sabdar char *, int *, struct fs_fhandle *, struct stat64 *); 10472654012fSReza Sabdar extern int iscreated(ndmp_lbr_params_t *nlp, char *name, tlm_acls_t *tacl, 10482654012fSReza Sabdar time_t t); 10492654012fSReza Sabdar 10502654012fSReza Sabdar extern int sasd_dev_count(void); 10512654012fSReza Sabdar extern struct scsi_link *sasd_dev_slink(int); 10522654012fSReza Sabdar extern struct sasd_drive *sasd_drive(int); 10532654012fSReza Sabdar extern void *ndmp_malloc(size_t size); 10542654012fSReza Sabdar 10552654012fSReza Sabdar extern ndmp_plugin_t *ndmp_pl; 10568c4f9701SJanice Chang 10578c4f9701SJanice Chang #define NDMP_APILOG(s, t, m, ...) \ 10588c4f9701SJanice Chang { \ 10598c4f9701SJanice Chang if (((ndmpd_session_t *)(s))->ns_protocol_version == NDMPV4) \ 10608c4f9701SJanice Chang (void) ndmpd_api_log_v4(s, t, m, __VA_ARGS__); \ 10618c4f9701SJanice Chang else if (((ndmpd_session_t *)(s))->ns_protocol_version == NDMPV3) \ 10628c4f9701SJanice Chang (void) ndmpd_api_log_v3(s, t, m, __VA_ARGS__); \ 10638c4f9701SJanice Chang else \ 10648c4f9701SJanice Chang (void) ndmpd_api_log_v2(s, __VA_ARGS__); \ 10658c4f9701SJanice Chang } 10668c4f9701SJanice Chang 10678c4f9701SJanice Chang /* 10688c4f9701SJanice Chang * Backup path utility functions 10698c4f9701SJanice Chang */ 10708c4f9701SJanice Chang extern char *get_backup_path_v3(ndmpd_module_params_t *); 10718c4f9701SJanice Chang extern char *get_backup_path_v2(ndmpd_module_params_t *); 10728c4f9701SJanice Chang 10738c4f9701SJanice Chang /* 10748c4f9701SJanice Chang * Functions for zfs-based backup 10758c4f9701SJanice Chang */ 10768c4f9701SJanice Chang 10778c4f9701SJanice Chang module_start_func_t ndmpd_zfs_backup_starter; 10788c4f9701SJanice Chang module_start_func_t ndmpd_zfs_restore_starter; 10798c4f9701SJanice Chang module_abort_func_t ndmpd_zfs_abort; 10808c4f9701SJanice Chang 10818c4f9701SJanice Chang int ndmpd_zfs_init(ndmpd_session_t *); 10828c4f9701SJanice Chang void ndmpd_zfs_fini(ndmpd_zfs_args_t *); 10838c4f9701SJanice Chang 10848c4f9701SJanice Chang boolean_t ndmpd_zfs_backup_parms_valid(ndmpd_zfs_args_t *); 10858c4f9701SJanice Chang boolean_t ndmpd_zfs_restore_parms_valid(ndmpd_zfs_args_t *); 10868c4f9701SJanice Chang 10878c4f9701SJanice Chang int ndmpd_zfs_pre_backup(ndmpd_zfs_args_t *); 10888c4f9701SJanice Chang int ndmpd_zfs_pre_restore(ndmpd_zfs_args_t *); 10898c4f9701SJanice Chang int ndmpd_zfs_post_backup(ndmpd_zfs_args_t *); 10908c4f9701SJanice Chang int ndmpd_zfs_post_restore(ndmpd_zfs_args_t *); 10918c4f9701SJanice Chang 10928c4f9701SJanice Chang void ndmpd_zfs_dma_log(ndmpd_zfs_args_t *, ndmp_log_type, char *, ...); 10938c4f9701SJanice Chang 10942654012fSReza Sabdar #endif /* _NDMPD_H */ 1095