12654012fSReza Sabdar /* 286c48bbfSReza Sabdar * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 32654012fSReza Sabdar * Use is subject to license terms. 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 */ 412654012fSReza Sabdar 422654012fSReza Sabdar #ifndef _NDMPD_H 432654012fSReza Sabdar #define _NDMPD_H 442654012fSReza Sabdar 452654012fSReza Sabdar #include <sys/types.h> 462654012fSReza Sabdar #include <libzfs.h> 472654012fSReza Sabdar #include <ndmpd_door.h> 482654012fSReza Sabdar #include <libndmp.h> 492654012fSReza Sabdar #include "ndmpd_common.h" 502654012fSReza Sabdar #include "tlm_buffers.h" 512654012fSReza Sabdar #include <dirent.h> 522654012fSReza Sabdar #include "ndmpd_prop.h" 532654012fSReza Sabdar #include "traverse.h" 542654012fSReza Sabdar #include <pthread.h> 552654012fSReza Sabdar #include <libndmp.h> 562654012fSReza Sabdar #include <atomic.h> 572654012fSReza Sabdar 582654012fSReza Sabdar #define MAX_RECORD_SIZE (126*512) 592654012fSReza Sabdar #define REMOTE_RECORD_SIZE (60*KILOBYTE) 602654012fSReza Sabdar #define SCSI_MAX_NAME 32 612654012fSReza Sabdar #define MD5_CHALLENGE_SIZE 64 622654012fSReza Sabdar #define MD5_PASS_LIMIT 32 632654012fSReza Sabdar 642654012fSReza Sabdar /* Test unit ready */ 652654012fSReza Sabdar #define TUR_WAIT 3000000 662654012fSReza Sabdar #define TUR_MAX_TRY 3 672654012fSReza Sabdar 682654012fSReza Sabdar 692654012fSReza Sabdar /* File handler classes */ 702654012fSReza Sabdar #define HC_CLIENT 1 712654012fSReza Sabdar #define HC_MOVER 2 722654012fSReza Sabdar #define HC_MODULE 4 732654012fSReza Sabdar #define HC_ALL 0xffffffff 742654012fSReza Sabdar 752654012fSReza Sabdar #define IN_ADDR(x) \ 762654012fSReza Sabdar (*(struct in_addr *)&x) 772654012fSReza Sabdar 782654012fSReza Sabdar #define FS_READONLY(fs) (hasmntopt(fs, "ro") ? 1 : 0) 792654012fSReza Sabdar 802654012fSReza Sabdar typedef void *(*funct_t)(void *); /* function pointer */ 812654012fSReza Sabdar 822654012fSReza Sabdar #define HOSTNAMELEN 256 832654012fSReza Sabdar 842654012fSReza Sabdar #define VENDOR_NAME "Sun Microsystems" 852654012fSReza Sabdar #define PRODUCT_NAME "Solaris 5.11" 862654012fSReza Sabdar 872654012fSReza Sabdar /* 882654012fSReza Sabdar * Calculate array length based on its size and size of 892654012fSReza Sabdar * its elements. 902654012fSReza Sabdar */ 912654012fSReza Sabdar #define ARRAY_LEN(a, t) (sizeof (a) / sizeof (t)) 922654012fSReza Sabdar /* 932654012fSReza Sabdar * Default maximum permitted sequence number for the token-based backup. 942654012fSReza Sabdar */ 952654012fSReza Sabdar #define NDMP_MAX_TOKSEQ 9 962654012fSReza Sabdar 972654012fSReza Sabdar /* 982654012fSReza Sabdar * Hard-limit for the sequence number in the token-based backup. 992654012fSReza Sabdar * It's one less than the ASCII value of 'A'. The 'A' letter 1002654012fSReza Sabdar * can be used as level in the lbr-type backups. 1012654012fSReza Sabdar */ 1022654012fSReza Sabdar #define NDMP_TOKSEQ_HLIMIT ('A' - 1) 1032654012fSReza Sabdar 1042654012fSReza Sabdar 1052654012fSReza Sabdar /* 1062654012fSReza Sabdar * Soft-limit for the sequence number in the token-based backup. 1072654012fSReza Sabdar */ 1082654012fSReza Sabdar #define NDMP_TOKSEQ_SLIMIT (NDMP_TOKSEQ_HLIMIT - 5) 1092654012fSReza Sabdar 1102654012fSReza Sabdar 1112654012fSReza Sabdar /* 1122654012fSReza Sabdar * Root inode number of dump format in V2. 1132654012fSReza Sabdar */ 1142654012fSReza Sabdar #define ROOT_INODE 2 1152654012fSReza Sabdar 1162654012fSReza Sabdar /* 1172654012fSReza Sabdar * NDMP backup image signature. 1182654012fSReza Sabdar */ 1192654012fSReza Sabdar #define NDMPUTF8MAGIC "NDMPUTF8MAGIC" 1202654012fSReza Sabdar 1212654012fSReza Sabdar /* 1222654012fSReza Sabdar * Supported BU types 1232654012fSReza Sabdar */ 1242654012fSReza Sabdar #define NDMP_DUMP_TYPE "dump" 1252654012fSReza Sabdar #define NDMP_TAR_TYPE "tar" 1262654012fSReza Sabdar 1272654012fSReza Sabdar /* All 1's binary maximum mover window */ 1282654012fSReza Sabdar #define MAX_WINDOW_SIZE 0xffffffffffffffffULL 1292654012fSReza Sabdar 1302654012fSReza Sabdar #define NDMP_FREE(cp) { free((char *)(cp)); (cp) = NULL; } 1312654012fSReza Sabdar 1322654012fSReza Sabdar #define NDMP_YORN(f) ((f) ? 'Y' : 'N') 1332654012fSReza Sabdar #define NDMP_TORF(f) ((f) ? "TRUE" : "FALSE") 1342654012fSReza Sabdar #define NDMP_SVAL(cp) ((cp) ? (cp) : "NULL") 1352654012fSReza Sabdar 1362654012fSReza Sabdar #define NDMP_SETENV(env, nm, val) \ 1372654012fSReza Sabdar { \ 1382654012fSReza Sabdar env->name = nm; \ 1392654012fSReza Sabdar env->value = val; \ 1402654012fSReza Sabdar env++; \ 1412654012fSReza Sabdar } 1422654012fSReza Sabdar 1432654012fSReza Sabdar #define NDMP_CL_ADDR_LEN 24 1442654012fSReza Sabdar #define NDMP_TCP_ADDR_SIZE 32 1452654012fSReza Sabdar #define NDMP_TAPE_DEV_NAME 256 1462654012fSReza Sabdar 1472654012fSReza Sabdar typedef struct { 1482654012fSReza Sabdar char *bk_path; 1492654012fSReza Sabdar int bk_llevel; /* last backup level */ 1502654012fSReza Sabdar time_t bk_ldate; /* last backup date */ 1512654012fSReza Sabdar int bk_clevel; /* current backup level */ 1522654012fSReza Sabdar time_t bk_cdate; /* current backup date */ 1532654012fSReza Sabdar int bk_map; 1542654012fSReza Sabdar int bk_dirino; 1552654012fSReza Sabdar char *bk_dmpnm; 1562654012fSReza Sabdar char **bk_exl; /* exlude list */ 1572654012fSReza Sabdar char **bk_inc; /* include list */ 1582654012fSReza Sabdar } ndmp_backup_params_t; 1592654012fSReza Sabdar 1602654012fSReza Sabdar 1612654012fSReza Sabdar typedef struct { 1622654012fSReza Sabdar ulong_t rs_nf; /* number of files to restore */ 1632654012fSReza Sabdar char *rs_path; 1642654012fSReza Sabdar char *rs_bkpath; 1652654012fSReza Sabdar int *rs_restored; 1662654012fSReza Sabdar int rs_bm; 1672654012fSReza Sabdar int rs_lastidx; 1682654012fSReza Sabdar } ndmp_restore_params_t; 1692654012fSReza Sabdar 1702654012fSReza Sabdar /* 1712654012fSReza Sabdar * Tar format archiving ops table 1722654012fSReza Sabdar */ 1732654012fSReza Sabdar extern tm_ops_t tm_tar_ops; 1742654012fSReza Sabdar 1752654012fSReza Sabdar /* 1762654012fSReza Sabdar * IS_LBR_BKTYPE shows if the backup type is one of these 1772654012fSReza Sabdar * 'F' of 'f': 'Full' backup type. 1782654012fSReza Sabdar * 'A' of 'a': 'Archive' backup type. 1792654012fSReza Sabdar * 'I' of 'i': 'Incremental' backup type. 1802654012fSReza Sabdar * 'D' of 'd': 'Differntial' backup type. 1812654012fSReza Sabdar */ 1822654012fSReza Sabdar #define IS_LBR_BKTYPE(t) (((t) && strchr("FAID", toupper(t))) ? 1 : 0) 1832654012fSReza Sabdar 1842654012fSReza Sabdar 1852654012fSReza Sabdar /* 1862654012fSReza Sabdar * NLP flags. 1872654012fSReza Sabdar */ 1882654012fSReza Sabdar #define NLPF_CHKPNTED_PATH (1 << 0) 1892654012fSReza Sabdar #define NLPF_FH (1 << 1) 1902654012fSReza Sabdar #define NLPF_DIRECT (1 << 2) 1912654012fSReza Sabdar #define NLPF_UPDATE (1 << 3) 1922654012fSReza Sabdar #define NLPF_DUMP (1 << 4) 1932654012fSReza Sabdar #define NLPF_TAR (1 << 5) 1942654012fSReza Sabdar #define NLPF_ABORTED (1 << 6) 1952654012fSReza Sabdar #define NLPF_TOKENBK (1 << 8) 1962654012fSReza Sabdar #define NLPF_LBRBK (1 << 9) 1972654012fSReza Sabdar #define NLPF_LEVELBK (1 << 10) 1982654012fSReza Sabdar #define NLPF_IGNCTIME (1 << 11) 1992654012fSReza Sabdar #define NLPF_INCLMTIME (1 << 12) 2002654012fSReza Sabdar #define NLPF_RECURSIVE (1 << 13) 2012654012fSReza Sabdar 2022654012fSReza Sabdar /* 2032654012fSReza Sabdar * Macros on NLP flags. 2042654012fSReza Sabdar */ 2052654012fSReza Sabdar #define NLP_ISSET(n, f) (((n)->nlp_flags & (f)) != 0) 2062654012fSReza Sabdar #define NLP_SET(n, f) (n)->nlp_flags |= (f) 2072654012fSReza Sabdar #define NLP_UNSET(n, f) (n)->nlp_flags &= ~(f) 2082654012fSReza Sabdar 2092654012fSReza Sabdar 2102654012fSReza Sabdar #define NLP_ISCHKPNTED(n) NLP_ISSET(n, NLPF_CHKPNTED_PATH) 2112654012fSReza Sabdar #define NLP_SHOULD_UPDATE(n) NLP_ISSET(n, NLPF_UPDATE) 2122654012fSReza Sabdar #define NLP_ISDUMP(n) NLP_ISSET(n, NLPF_DUMP) 2132654012fSReza Sabdar #define NLP_ISTAR(n) NLP_ISSET(n, NLPF_TAR) 2142654012fSReza Sabdar #define NLP_IGNCTIME(n) NLP_ISSET(n, NLPF_IGNCTIME) 2152654012fSReza Sabdar #define NLP_INCLMTIME(n) NLP_ISSET(n, NLPF_INCLMTIME) 2162654012fSReza Sabdar 2172654012fSReza Sabdar /* 2182654012fSReza Sabdar * NDMP statistics 2192654012fSReza Sabdar */ 2202654012fSReza Sabdar #define NS_INC(s) (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s)) 2212654012fSReza Sabdar #define NS_DEC(s) (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s)) 2222654012fSReza Sabdar #define NS_ADD(s, d) (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \ 2232654012fSReza Sabdar (uint64_t)d)) 2242654012fSReza Sabdar #define NS_UPD(s, t) { \ 2252654012fSReza Sabdar atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \ 2262654012fSReza Sabdar atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \ 2272654012fSReza Sabdar } 2282654012fSReza Sabdar 2292654012fSReza Sabdar #define NLP_READY 1 2302654012fSReza Sabdar 2312654012fSReza Sabdar typedef struct ndmp_lbr_params { 2322654012fSReza Sabdar struct ndmpd_session *nlp_session; 2332654012fSReza Sabdar int nlp_flags; 2342654012fSReza Sabdar 2352654012fSReza Sabdar ndmp_backup_params_t bk_params; 2362654012fSReza Sabdar ndmp_restore_params_t rs_params; 2372654012fSReza Sabdar #define nlp_backup_path bk_params.bk_path 2382654012fSReza Sabdar #define nlp_llevel bk_params.bk_llevel 2392654012fSReza Sabdar #define nlp_ldate bk_params.bk_ldate 2402654012fSReza Sabdar #define nlp_clevel bk_params.bk_clevel 2412654012fSReza Sabdar #define nlp_tokseq nlp_clevel 2422654012fSReza Sabdar #define nlp_tokdate nlp_ldate 2432654012fSReza Sabdar #define nlp_cdate bk_params.bk_cdate 2442654012fSReza Sabdar #define nlp_bkmap bk_params.bk_map 2452654012fSReza Sabdar #define nlp_bkdirino bk_params.bk_dirino 2462654012fSReza Sabdar #define nlp_dmpnm bk_params.bk_dmpnm 2472654012fSReza Sabdar #define nlp_exl bk_params.bk_exl 2482654012fSReza Sabdar #define nlp_inc bk_params.bk_inc 2492654012fSReza Sabdar 2502654012fSReza Sabdar #define nlp_nfiles rs_params.rs_nf 2512654012fSReza Sabdar #define nlp_restore_path rs_params.rs_path 2522654012fSReza Sabdar #define nlp_restore_bk_path rs_params.rs_bkpath 2532654012fSReza Sabdar #define nlp_restored rs_params.rs_restored 2542654012fSReza Sabdar #define nlp_rsbm rs_params.rs_bm 2552654012fSReza Sabdar #define nlp_lastidx rs_params.rs_lastidx 2562654012fSReza Sabdar 2572654012fSReza Sabdar ndmpd_module_params_t *nlp_params; 2582654012fSReza Sabdar tlm_job_stats_t *nlp_jstat; 2592654012fSReza Sabdar lbr_fhlog_call_backs_t *nlp_logcallbacks; 2602654012fSReza Sabdar tlm_commands_t nlp_cmds; 2612654012fSReza Sabdar struct { 2622654012fSReza Sabdar /* 2632654012fSReza Sabdar * nw: shows the number of threads waiting for a request 2642654012fSReza Sabdar * to be processed. 2652654012fSReza Sabdar * rv: if error occurred when processing a request. 2662654012fSReza Sabdar */ 2672654012fSReza Sabdar int ev_nw; 2682654012fSReza Sabdar int ev_rv; 2692654012fSReza Sabdar } nlp_event; 2702654012fSReza Sabdar cond_t nlp_cv; 2712654012fSReza Sabdar int nlp_flag; 2722654012fSReza Sabdar #define nlp_nw nlp_event.ev_nw 2732654012fSReza Sabdar #define nlp_rv nlp_event.ev_rv 2742654012fSReza Sabdar u_longlong_t nlp_bytes_total; 2752654012fSReza Sabdar } ndmp_lbr_params_t; 2762654012fSReza Sabdar 2772654012fSReza Sabdar 2782654012fSReza Sabdar typedef struct mem_ndmp_name_v3 { 2792654012fSReza Sabdar char *nm3_opath; 2802654012fSReza Sabdar char *nm3_dpath; 2812654012fSReza Sabdar char *nm3_newnm; 2822654012fSReza Sabdar u_longlong_t nm3_node; 2832654012fSReza Sabdar u_longlong_t nm3_fh_info; 2842654012fSReza Sabdar ndmp_error nm3_err; 2852654012fSReza Sabdar } mem_ndmp_name_v3_t; 2862654012fSReza Sabdar 2872654012fSReza Sabdar 2882654012fSReza Sabdar typedef struct ndmpd_file_handler { 2892654012fSReza Sabdar int fh_fd; 2902654012fSReza Sabdar ulong_t fh_mode; 2912654012fSReza Sabdar ulong_t fh_class; 2922654012fSReza Sabdar void *fh_cookie; 2932654012fSReza Sabdar ndmpd_file_handler_func_t *fh_func; 2942654012fSReza Sabdar struct ndmpd_file_handler *fh_next; 2952654012fSReza Sabdar } ndmpd_file_handler_t; 2962654012fSReza Sabdar 2972654012fSReza Sabdar typedef struct ndmpd_session_scsi_desc { 2982654012fSReza Sabdar int sd_is_open; 2992654012fSReza Sabdar int sd_devid; 3002654012fSReza Sabdar boolean_t sd_valid_target_set; 3012654012fSReza Sabdar int sd_sid; 3022654012fSReza Sabdar int sd_lun; 3032654012fSReza Sabdar char sd_adapter_name[SCSI_MAX_NAME]; 3042654012fSReza Sabdar } ndmpd_session_scsi_desc_t; 3052654012fSReza Sabdar 3062654012fSReza Sabdar typedef struct ndmpd_session_tape_desc { 3072654012fSReza Sabdar int td_fd; /* tape device file descriptor */ 3082654012fSReza Sabdar ulong_t td_record_count; /* number of records written */ 3092654012fSReza Sabdar ndmp_tape_open_mode td_mode; /* tape device open mode */ 3102654012fSReza Sabdar u_longlong_t td_pos; /* current position on the current tape */ 3112654012fSReza Sabdar int td_sid; 3122654012fSReza Sabdar int td_lun; 3132654012fSReza Sabdar char td_adapter_name[SCSI_MAX_NAME]; 3142654012fSReza Sabdar ulong_t td_eom_seen:1, 3152654012fSReza Sabdar td_io_err:1, 3162654012fSReza Sabdar td_write:1; 3172654012fSReza Sabdar } ndmpd_session_tape_desc_t; 3182654012fSReza Sabdar 3192654012fSReza Sabdar typedef struct ndmpd_session_mover_desc { 3202654012fSReza Sabdar ndmp_mover_state md_state; /* current state */ 3212654012fSReza Sabdar ndmp_mover_mode md_mode; /* current mode */ 3222654012fSReza Sabdar ndmp_mover_pause_reason md_pause_reason; /* current reason */ 3232654012fSReza Sabdar ndmp_mover_halt_reason md_halt_reason; /* current reason */ 3242654012fSReza Sabdar u_longlong_t md_data_written; /* total written to tape */ 3252654012fSReza Sabdar u_longlong_t md_seek_position; /* current seek position */ 3262654012fSReza Sabdar u_longlong_t md_bytes_left_to_read; /* #bytes to end of seek window */ 3272654012fSReza Sabdar u_longlong_t md_window_offset; /* valid data window begin */ 3282654012fSReza Sabdar u_longlong_t md_window_length; /* valid data window length */ 3292654012fSReza Sabdar u_longlong_t md_position; /* current data stream pos */ 3302654012fSReza Sabdar boolean_t md_pre_cond; /* used for precondition checks */ 3312654012fSReza Sabdar ulong_t md_record_size; /* tape I/O record size */ 3322654012fSReza Sabdar ulong_t md_record_num; /* current record num */ 3332654012fSReza Sabdar int md_listen_sock; /* data conn listen socket */ 3342654012fSReza Sabdar int md_sock; /* data conn socket */ 3352654012fSReza Sabdar ulong_t md_r_index; /* buffer read index */ 3362654012fSReza Sabdar ulong_t md_w_index; /* buffer write index */ 3372654012fSReza Sabdar char *md_buf; /* data buffer */ 3382654012fSReza Sabdar /* 3392654012fSReza Sabdar * V2 fields. 3402654012fSReza Sabdar */ 3412654012fSReza Sabdar ulong_t md_discard_length; /* bytes to discard */ 3422654012fSReza Sabdar 3432654012fSReza Sabdar /* 3442654012fSReza Sabdar * V3 fields. 3452654012fSReza Sabdar */ 3462654012fSReza Sabdar ndmp_addr_v3 md_data_addr; 3472654012fSReza Sabdar /* 3482654012fSReza Sabdar * V4 fields. 3492654012fSReza Sabdar */ 3502654012fSReza Sabdar ndmp_addr_v4 md_data_addr_v4; 3512654012fSReza Sabdar } ndmpd_session_mover_desc_t; 3522654012fSReza Sabdar 3532654012fSReza Sabdar 3542654012fSReza Sabdar typedef struct ndmpd_session_data_module { 3552654012fSReza Sabdar void *dm_module_cookie; /* sent as abort_func param */ 3562654012fSReza Sabdar module_start_func_t *dm_start_func; /* start function */ 3572654012fSReza Sabdar module_abort_func_t *dm_abort_func; /* abort function */ 3582654012fSReza Sabdar ndmpd_module_stats dm_stats; /* statistics buffer */ 3592654012fSReza Sabdar } ndmpd_session_data_module_t; 3602654012fSReza Sabdar 3612654012fSReza Sabdar typedef struct ndmpd_session_data_desc { 3622654012fSReza Sabdar /* 3632654012fSReza Sabdar * Common fields. 3642654012fSReza Sabdar */ 3652654012fSReza Sabdar ndmp_data_operation dd_operation; /* current operation */ 3662654012fSReza Sabdar boolean_t dd_abort; /* abort operation flag */ 3672654012fSReza Sabdar boolean_t dd_io_ready; /* mover sock read for I/O */ 3682654012fSReza Sabdar ndmp_pval *dd_env; /* environment from backup or recover request */ 3692654012fSReza Sabdar ulong_t dd_env_len; /* environment length */ 3702654012fSReza Sabdar ulong_t dd_nlist_len; /* recover file list length */ 3712654012fSReza Sabdar int dd_sock; /* listen and data socket */ 3722654012fSReza Sabdar u_longlong_t dd_read_offset; /* data read seek offset */ 3732654012fSReza Sabdar u_longlong_t dd_read_length; /* data read length */ 3742654012fSReza Sabdar u_longlong_t dd_data_size; /* data size to be backed up */ 3752654012fSReza Sabdar ndmpd_session_data_module_t dd_module; 3762654012fSReza Sabdar 3772654012fSReza Sabdar ndmp_data_state dd_state; /* current state */ 3782654012fSReza Sabdar ndmp_data_halt_reason dd_halt_reason; /* current reason */ 3792654012fSReza Sabdar /* 3802654012fSReza Sabdar * V2 fields. 3812654012fSReza Sabdar */ 3822654012fSReza Sabdar ndmp_name *dd_nlist; /* recover file list */ 3832654012fSReza Sabdar ndmp_mover_addr dd_mover; /* mover address */ 3842654012fSReza Sabdar /* 3852654012fSReza Sabdar * V3 fields. 3862654012fSReza Sabdar */ 3872654012fSReza Sabdar mem_ndmp_name_v3_t *dd_nlist_v3; 3882654012fSReza Sabdar ndmp_addr_v3 dd_data_addr; 3892654012fSReza Sabdar int dd_listen_sock; /* socket for listening for remote */ 3902654012fSReza Sabdar /* mover connections */ 3912654012fSReza Sabdar u_longlong_t dd_bytes_left_to_read; 3922654012fSReza Sabdar u_longlong_t dd_position; 3932654012fSReza Sabdar u_longlong_t dd_discard_length; 3942654012fSReza Sabdar /* 3952654012fSReza Sabdar * V4 fields. 3962654012fSReza Sabdar */ 3972654012fSReza Sabdar ndmp_addr_v4 dd_data_addr_v4; 3982654012fSReza Sabdar } ndmpd_session_data_desc_t; 3992654012fSReza Sabdar 4002654012fSReza Sabdar typedef struct ndmpd_session_file_history { 4012654012fSReza Sabdar ndmp_fh_unix_path *fh_path_entries; 4022654012fSReza Sabdar ndmp_fh_unix_dir *fh_dir_entries; 4032654012fSReza Sabdar ndmp_fh_unix_node *fh_node_entries; 4042654012fSReza Sabdar char *fh_path_name_buf; 4052654012fSReza Sabdar char *fh_dir_name_buf; 4062654012fSReza Sabdar ulong_t fh_path_index; 4072654012fSReza Sabdar ulong_t fh_dir_index; 4082654012fSReza Sabdar ulong_t fh_node_index; 4092654012fSReza Sabdar ulong_t fh_path_name_buf_index; 4102654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 4112654012fSReza Sabdar } ndmpd_session_file_history_t; 4122654012fSReza Sabdar 4132654012fSReza Sabdar typedef struct ndmpd_session_file_history_v3 { 4142654012fSReza Sabdar ndmp_file_v3 *fh_files; 4152654012fSReza Sabdar ndmp_dir_v3 *fh_dirs; 4162654012fSReza Sabdar ndmp_node_v3 *fh_nodes; 4172654012fSReza Sabdar ndmp_file_name_v3 *fh_file_names; 4182654012fSReza Sabdar ndmp_file_name_v3 *fh_dir_names; 4192654012fSReza Sabdar ndmp_file_stat_v3 *fh_file_stats; 4202654012fSReza Sabdar ndmp_file_stat_v3 *fh_node_stats; 4212654012fSReza Sabdar char *fh_file_name_buf; 4222654012fSReza Sabdar char *fh_dir_name_buf; 4232654012fSReza Sabdar ulong_t fh_file_index; 4242654012fSReza Sabdar ulong_t fh_dir_index; 4252654012fSReza Sabdar ulong_t fh_node_index; 4262654012fSReza Sabdar ulong_t fh_file_name_buf_index; 4272654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 4282654012fSReza Sabdar } ndmpd_session_file_history_v3_t; 4292654012fSReza Sabdar 4302654012fSReza Sabdar typedef struct ndmpd_session { 4312654012fSReza Sabdar ndmp_connection_t *ns_connection; /* NDMP connection to client */ 4322654012fSReza Sabdar boolean_t ns_eof; /* connection EOF flag */ 4332654012fSReza Sabdar ushort_t ns_protocol_version; /* connection protocol version */ 4342654012fSReza Sabdar ndmpd_session_scsi_desc_t ns_scsi; 4352654012fSReza Sabdar ndmpd_session_tape_desc_t ns_tape; 4362654012fSReza Sabdar ndmpd_session_mover_desc_t ns_mover; 4372654012fSReza Sabdar ndmpd_session_data_desc_t ns_data; 4382654012fSReza Sabdar ndmpd_session_file_history_t ns_fh; 4392654012fSReza Sabdar ndmpd_file_handler_t *ns_file_handler_list; /* for I/O multiplexing */ 4402654012fSReza Sabdar int ns_nref; 4412654012fSReza Sabdar ndmp_lbr_params_t *ns_ndmp_lbr_params; 4422654012fSReza Sabdar mutex_t ns_lock; 4432654012fSReza Sabdar 4442654012fSReza Sabdar /* 4452654012fSReza Sabdar * NDMP V3 4462654012fSReza Sabdar * Tape, SCSI, mover, data and file handlers will 4472654012fSReza Sabdar * be shared between V2 and V3. 4482654012fSReza Sabdar */ 4492654012fSReza Sabdar ndmpd_session_file_history_v3_t ns_fh_v3; 4502654012fSReza Sabdar unsigned char ns_challenge[MD5_CHALLENGE_SIZE]; /* For MD5 */ 4512654012fSReza Sabdar 4522654012fSReza Sabdar /* 4532654012fSReza Sabdar * NDMP V4 related data 4542654012fSReza Sabdar */ 4552654012fSReza Sabdar boolean_t ns_set_ext_list; 4562654012fSReza Sabdar 4572654012fSReza Sabdar /* handling of hardlink, hardlink queue head */ 4582654012fSReza Sabdar struct hardlink_q *hardlink_q; 4592654012fSReza Sabdar } ndmpd_session_t; 4602654012fSReza Sabdar 4612654012fSReza Sabdar 4622654012fSReza Sabdar /* 4632654012fSReza Sabdar * NDMP request handler functions. 4642654012fSReza Sabdar */ 4652654012fSReza Sabdar 4662654012fSReza Sabdar /* Config */ 4672654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v2; 4682654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_attr_v2; 4692654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_mover_type_v2; 4702654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v2; 4712654012fSReza Sabdar 4722654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v3; 4732654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v3; 4742654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_connection_type_v3; 4752654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v3; 4762654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_fs_info_v3; 4772654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_tape_info_v3; 4782654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_scsi_info_v3; 4792654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_server_info_v3; 4802654012fSReza Sabdar 4812654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v4; 4822654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_ext_list_v4; 4832654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_set_ext_list_v4; 4842654012fSReza Sabdar 4852654012fSReza Sabdar 4862654012fSReza Sabdar /* Scsi */ 4872654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v2; 4882654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_close_v2; 4892654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_get_state_v2; 4902654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v2; 4912654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_device_v2; 4922654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_bus_v2; 4932654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_execute_cdb_v2; 4942654012fSReza Sabdar 4952654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v3; 4962654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v3; 4972654012fSReza Sabdar 4982654012fSReza Sabdar 4992654012fSReza Sabdar /* Tape */ 5002654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v2; 5012654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v2; 5022654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v2; 5032654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_mtio_v2; 5042654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v2; 5052654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v2; 5062654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_execute_cdb_v2; 5072654012fSReza Sabdar 5082654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v3; 5092654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v3; 5102654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v3; 5112654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v3; 5122654012fSReza Sabdar 5132654012fSReza Sabdar 5142654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v4; 5152654012fSReza Sabdar /* Data */ 5162654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v2; 5172654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v2; 5182654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v2; 5192654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v2; 5202654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v2; 5212654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v2; 5222654012fSReza Sabdar 5232654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v3; 5242654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v3; 5252654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v3; 5262654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v3; 5272654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v3; 5282654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v3; 5292654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v3; 5302654012fSReza Sabdar 5312654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v4; 5322654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v4; 5332654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v4; 5342654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v4; 5352654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_filehist_v4; 5362654012fSReza Sabdar 5372654012fSReza Sabdar 5382654012fSReza Sabdar /* Connect */ 5392654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_open_v2; 5402654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v2; 5412654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_server_auth_v2; 5422654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v2; 5432654012fSReza Sabdar 5442654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v3; 5452654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v3; 5462654012fSReza Sabdar 5472654012fSReza Sabdar 5482654012fSReza Sabdar /* Mover */ 5492654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v2; 5502654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v2; 5512654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v2; 5522654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v2; 5532654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_stop_v2; 5542654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v2; 5552654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v2; 5562654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_close_v2; 5572654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v2; 5582654012fSReza Sabdar 5592654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v3; 5602654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v3; 5612654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v3; 5622654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v3; 5632654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v3; 5642654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v3; 5652654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v3; 5662654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v3; 5672654012fSReza Sabdar 5682654012fSReza Sabdar 5692654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v4; 5702654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v4; 5712654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v4; 5722654012fSReza Sabdar 5732654012fSReza Sabdar 5742654012fSReza Sabdar /* 5752654012fSReza Sabdar * Backup/recover module API functions. 5762654012fSReza Sabdar */ 5772654012fSReza Sabdar ndmpd_get_env_func_t ndmpd_api_get_env; 5782654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_add_env; 5792654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_set_env; 5802654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name; 5812654012fSReza Sabdar ndmpd_dispatch_func_t ndmpd_api_dispatch; 5822654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v2; 5832654012fSReza Sabdar 5842654012fSReza Sabdar 5852654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v2; 5862654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_path_v2; 5872654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v2; 5882654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v2; 5892654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v2; 5902654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v2; 5912654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v2; 5922654012fSReza Sabdar ndmpd_add_file_handler_func_t ndmpd_api_add_file_handler; 5932654012fSReza Sabdar ndmpd_remove_file_handler_func_t ndmpd_api_remove_file_handler; 5942654012fSReza Sabdar 5952654012fSReza Sabdar 5962654012fSReza Sabdar /* 5972654012fSReza Sabdar * NDMP V3 5982654012fSReza Sabdar */ 5992654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v3; 6002654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v3; 6012654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v3; 6022654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v3; 6032654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v3; 6042654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name_v3; 6052654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_file_v3; 6062654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v3; 6072654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v3; 6082654012fSReza Sabdar 6092654012fSReza Sabdar /* 6102654012fSReza Sabdar * NDMP V4 6112654012fSReza Sabdar */ 6122654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v4; 6132654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4; 6142654012fSReza Sabdar 6152654012fSReza Sabdar #ifndef NO_NDMP_API_LOG_PROTOTYPES 6162654012fSReza Sabdar ndmpd_log_func_t ndmpd_api_log_v2; 6172654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v3; 6182654012fSReza Sabdar #endif /* NO_NDMP_API_LOG_PROTOTYPES */ 6192654012fSReza Sabdar 6202654012fSReza Sabdar typedef void ndmpd_func_t(ndmp_connection_t *, void *); 6212654012fSReza Sabdar 6222654012fSReza Sabdar /* 6232654012fSReza Sabdar * pthread call arg parameters 6242654012fSReza Sabdar */ 6252654012fSReza Sabdar typedef struct { 6262654012fSReza Sabdar int nw_sock; 6272654012fSReza Sabdar long nw_ipaddr; 6282654012fSReza Sabdar ndmp_con_handler_func_t nw_con_handler_func; 6292654012fSReza Sabdar } ndmpd_worker_arg_t; 6302654012fSReza Sabdar 6312654012fSReza Sabdar typedef struct { 6322654012fSReza Sabdar char *br_jname; 6332654012fSReza Sabdar ndmp_lbr_params_t *br_nlp; 6342654012fSReza Sabdar tlm_commands_t *br_cmds; 6352654012fSReza Sabdar pthread_barrier_t br_barrier; 6362654012fSReza Sabdar } backup_reader_arg_t; 6372654012fSReza Sabdar 6382654012fSReza Sabdar typedef struct { 6392654012fSReza Sabdar ndmpd_session_t *tr_session; 6402654012fSReza Sabdar ndmpd_module_params_t *tr_mod_params; 6412654012fSReza Sabdar tlm_commands_t *tr_cmds; 6422654012fSReza Sabdar } ndmp_tar_reader_arg_t; 6432654012fSReza Sabdar 644*416eec61SReza Sabdar typedef struct { 645*416eec61SReza Sabdar ndmpd_session_t *bs_session; 646*416eec61SReza Sabdar char *bs_jname; 647*416eec61SReza Sabdar char *bs_path; 648*416eec61SReza Sabdar } ndmp_bkup_size_arg_t; 649*416eec61SReza Sabdar 6502654012fSReza Sabdar /* 6512654012fSReza Sabdar * Variables from ndmpd_comm.c 6522654012fSReza Sabdar */ 6532654012fSReza Sabdar extern int ndmp_ver; 6542654012fSReza Sabdar extern int ndmp_full_restore_path; 6552654012fSReza Sabdar extern int ndmp_dar_support; 6562654012fSReza Sabdar extern int ndmp_port; 6572654012fSReza Sabdar extern ndmp_stat_t ndstat; 6582654012fSReza Sabdar 6592654012fSReza Sabdar extern void ndmpd_main(void); 6602654012fSReza Sabdar extern void connection_handler(ndmp_connection_t *); 6612654012fSReza Sabdar extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path, 6622654012fSReza Sabdar int dest, char *local_path, int result); 6632654012fSReza Sabdar extern void ndmpd_audit_restore(ndmp_connection_t *conn, 6642654012fSReza Sabdar char *path, int dest, char *local_path, int result); 6652654012fSReza Sabdar extern void ndmpd_audit_connect(ndmp_connection_t *conn, 6662654012fSReza Sabdar int result); 6672654012fSReza Sabdar extern void ndmpd_audit_disconnect(ndmp_connection_t *conn); 6682654012fSReza Sabdar 6692654012fSReza Sabdar /* Variables from ndmpd_main.c */ 6702654012fSReza Sabdar extern libzfs_handle_t *zlibh; 6712654012fSReza Sabdar extern mutex_t zlib_mtx; 6722654012fSReza Sabdar 6732654012fSReza Sabdar /* 6742654012fSReza Sabdar * Utility from ndmpd_connect.c. 6752654012fSReza Sabdar */ 6762654012fSReza Sabdar extern int ndmp_connect_list_add(ndmp_connection_t *, int *); 6772654012fSReza Sabdar extern int ndmp_connect_list_del(ndmp_connection_t *); 6782654012fSReza Sabdar extern int ndmpd_connect_kill_id(int); 6792654012fSReza Sabdar extern void ndmp_connect_list_get(ndmp_door_ctx_t *); 6802654012fSReza Sabdar extern void ndmpd_get_devs(ndmp_door_ctx_t *); 6812654012fSReza Sabdar 6822654012fSReza Sabdar /* 6832654012fSReza Sabdar * Utility functions form ndmpd_data.c. 6842654012fSReza Sabdar */ 6852654012fSReza Sabdar extern void ndmpd_data_cleanup(ndmpd_session_t *); 6862654012fSReza Sabdar extern int ndmpd_data_init(ndmpd_session_t *); 6872654012fSReza Sabdar extern char *ndmp_data_get_mover_mode(ndmpd_session_t *); 6882654012fSReza Sabdar extern void ndmpd_data_error(ndmpd_session_t *, ndmp_data_halt_reason); 6892654012fSReza Sabdar 6902654012fSReza Sabdar 6912654012fSReza Sabdar /* 6922654012fSReza Sabdar * Utility functions from ndmpd_mover.c. 6932654012fSReza Sabdar */ 6942654012fSReza Sabdar extern int ndmpd_mover_init(ndmpd_session_t *); 6952654012fSReza Sabdar extern void ndmpd_mover_cleanup(ndmpd_session_t *); 6962654012fSReza Sabdar extern ndmp_error ndmpd_mover_connect(ndmpd_session_t *, 6972654012fSReza Sabdar ndmp_mover_mode); 6982654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 6992654012fSReza Sabdar ndmp_mover_halt_reason); 7002654012fSReza Sabdar extern int ndmpd_mover_seek(ndmpd_session_t *, 7012654012fSReza Sabdar u_longlong_t, 7022654012fSReza Sabdar u_longlong_t); 7032654012fSReza Sabdar extern int ndmpd_local_write(ndmpd_session_t *, 7042654012fSReza Sabdar char *, 7052654012fSReza Sabdar ulong_t); 7062654012fSReza Sabdar extern int ndmpd_remote_write(ndmpd_session_t *, 7072654012fSReza Sabdar char *, 7082654012fSReza Sabdar ulong_t); 7092654012fSReza Sabdar extern int ndmpd_local_read(ndmpd_session_t *, 7102654012fSReza Sabdar char *, 7112654012fSReza Sabdar ulong_t); 7122654012fSReza Sabdar extern int ndmpd_remote_read(ndmpd_session_t *, 7132654012fSReza Sabdar char *, 7142654012fSReza Sabdar ulong_t); 7152654012fSReza Sabdar 7162654012fSReza Sabdar extern void ndmpd_mover_shut_down(ndmpd_session_t *); 7172654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 7182654012fSReza Sabdar ndmp_mover_halt_reason); 7192654012fSReza Sabdar extern int ndmpd_local_write_v3(ndmpd_session_t *, 7202654012fSReza Sabdar char *, 7212654012fSReza Sabdar ulong_t); 7222654012fSReza Sabdar extern int ndmpd_local_read_v3(ndmpd_session_t *, 7232654012fSReza Sabdar char *, 7242654012fSReza Sabdar ulong_t); 7252654012fSReza Sabdar extern int ndmpd_remote_read_v3(ndmpd_session_t *, 7262654012fSReza Sabdar char *, 7272654012fSReza Sabdar ulong_t); 7282654012fSReza Sabdar extern int ndmpd_mover_wait_v3(ndmpd_session_t *); 7292654012fSReza Sabdar extern void ndmpd_write_eom(int); 7302654012fSReza Sabdar 7312654012fSReza Sabdar 7322654012fSReza Sabdar /* 7332654012fSReza Sabdar * Utility functions from ndmpd_file_history.c 7342654012fSReza Sabdar */ 7352654012fSReza Sabdar extern void ndmpd_file_history_init(ndmpd_session_t *); 7362654012fSReza Sabdar extern void ndmpd_file_history_cleanup(ndmpd_session_t *, 7372654012fSReza Sabdar boolean_t); 7382654012fSReza Sabdar extern int ndmpd_file_history_path(lbr_fhlog_call_backs_t *, 7392654012fSReza Sabdar char *, 7402654012fSReza Sabdar struct stat64 *, 7412654012fSReza Sabdar u_longlong_t); 7422654012fSReza Sabdar extern int ndmpd_file_history_dir(lbr_fhlog_call_backs_t *, 7432654012fSReza Sabdar char *, 7442654012fSReza Sabdar struct stat64 *); 7452654012fSReza Sabdar extern int ndmpd_file_history_node(lbr_fhlog_call_backs_t *, 7462654012fSReza Sabdar char *, 7472654012fSReza Sabdar char *, 7482654012fSReza Sabdar struct stat64 *, 7492654012fSReza Sabdar u_longlong_t); 7502654012fSReza Sabdar extern int 7512654012fSReza Sabdar ndmpd_path_restored(lbr_fhlog_call_backs_t *, 7522654012fSReza Sabdar char *, 7532654012fSReza Sabdar struct stat64 *, 7542654012fSReza Sabdar u_longlong_t); 7552654012fSReza Sabdar extern int ndmpd_fhpath_v3_cb(lbr_fhlog_call_backs_t *, 7562654012fSReza Sabdar char *, 7572654012fSReza Sabdar struct stat64 *, 7582654012fSReza Sabdar u_longlong_t); 7592654012fSReza Sabdar extern int ndmpd_fhdir_v3_cb(lbr_fhlog_call_backs_t *, 7602654012fSReza Sabdar char *, 7612654012fSReza Sabdar struct stat64 *); 7622654012fSReza Sabdar extern int ndmpd_fhnode_v3_cb(lbr_fhlog_call_backs_t *, 7632654012fSReza Sabdar char *, 7642654012fSReza Sabdar char *, 7652654012fSReza Sabdar struct stat64 *, 7662654012fSReza Sabdar u_longlong_t); 7672654012fSReza Sabdar extern int ndmpd_path_restored_v3(lbr_fhlog_call_backs_t *, 7682654012fSReza Sabdar char *, 7692654012fSReza Sabdar struct stat64 *, 7702654012fSReza Sabdar u_longlong_t); 7712654012fSReza Sabdar 7722654012fSReza Sabdar extern int ndmp_send_recovery_stat_v3(ndmpd_module_params_t *, 7732654012fSReza Sabdar ndmp_lbr_params_t *, 7742654012fSReza Sabdar int, 7752654012fSReza Sabdar int); 7762654012fSReza Sabdar 7772654012fSReza Sabdar 7782654012fSReza Sabdar /* 7792654012fSReza Sabdar * Utility functions from ndmpd_dtime.c 7802654012fSReza Sabdar */ 7812654012fSReza Sabdar extern int ndmpd_put_dumptime(char *, int, time_t); 7822654012fSReza Sabdar extern int ndmpd_get_dumptime(char *, int *, time_t *); 7832654012fSReza Sabdar extern int ndmpd_append_dumptime(char *, char *, int, time_t); 7842654012fSReza Sabdar 7852654012fSReza Sabdar 7862654012fSReza Sabdar /* 7872654012fSReza Sabdar * Global variables from ndmpd_tar3.c 7882654012fSReza Sabdar */ 7892654012fSReza Sabdar extern char **ndmp_excl_list; 7902654012fSReza Sabdar 7912654012fSReza Sabdar 7922654012fSReza Sabdar /* 7932654012fSReza Sabdar * Global variables from ndmpd_util.c 7942654012fSReza Sabdar */ 7952654012fSReza Sabdar extern int ndmp_force_bk_dirs; 7962654012fSReza Sabdar extern int ndmp_rbs; 7972654012fSReza Sabdar extern int ndmp_sbs; 7982654012fSReza Sabdar extern boolean_t ndmp_dump_path_node; 7992654012fSReza Sabdar extern boolean_t ndmp_tar_path_node; 8002654012fSReza Sabdar extern boolean_t ndmp_ignore_ctime; 8012654012fSReza Sabdar extern boolean_t ndmp_include_lmtime; 8022654012fSReza Sabdar 8032654012fSReza Sabdar 8042654012fSReza Sabdar /* 8052654012fSReza Sabdar * Utility functions from ndmpd_util.c. 8062654012fSReza Sabdar */ 8072654012fSReza Sabdar extern int ndmpd_select(ndmpd_session_t *, 8082654012fSReza Sabdar boolean_t, 8092654012fSReza Sabdar ulong_t); 8102654012fSReza Sabdar 8112654012fSReza Sabdar extern ndmp_error ndmpd_save_env(ndmpd_session_t *, 8122654012fSReza Sabdar ndmp_pval *, 8132654012fSReza Sabdar ulong_t); 8142654012fSReza Sabdar 8152654012fSReza Sabdar extern void ndmpd_free_env(ndmpd_session_t *); 8162654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v2(ndmpd_session_t *, 8172654012fSReza Sabdar ndmp_name *, 8182654012fSReza Sabdar ulong_t); 8192654012fSReza Sabdar 8202654012fSReza Sabdar extern void ndmpd_free_nlist(ndmpd_session_t *); 8212654012fSReza Sabdar extern int ndmpd_add_file_handler(ndmpd_session_t *, 8222654012fSReza Sabdar void *, 8232654012fSReza Sabdar int, 8242654012fSReza Sabdar ulong_t, 8252654012fSReza Sabdar ulong_t, 8262654012fSReza Sabdar ndmpd_file_handler_func_t *); 8272654012fSReza Sabdar 8282654012fSReza Sabdar extern int ndmpd_remove_file_handler(ndmpd_session_t *, 8292654012fSReza Sabdar int); 8302654012fSReza Sabdar 8312654012fSReza Sabdar extern void ndmp_send_reply(ndmp_connection_t *, 8322654012fSReza Sabdar void *, 8332654012fSReza Sabdar char *); 8342654012fSReza Sabdar 8352654012fSReza Sabdar extern int ndmp_mtioctl(int, int, int); 8362654012fSReza Sabdar 8372654012fSReza Sabdar extern u_longlong_t quad_to_long_long(ndmp_u_quad); 8382654012fSReza Sabdar extern ndmp_u_quad long_long_to_quad(u_longlong_t); 8392654012fSReza Sabdar 8402654012fSReza Sabdar extern void ndmp_set_socket_nodelay(int); 8412654012fSReza Sabdar extern void ndmp_set_socket_snd_buf(int, int); 8422654012fSReza Sabdar extern void ndmp_set_socket_rcv_buf(int, int); 8432654012fSReza Sabdar 8442654012fSReza Sabdar extern long ndmp_buffer_get_size(ndmpd_session_t *); 8452654012fSReza Sabdar extern int ndmp_lbr_init(ndmpd_session_t *); 8462654012fSReza Sabdar extern void ndmp_lbr_cleanup(ndmpd_session_t *); 8472654012fSReza Sabdar 8482654012fSReza Sabdar extern void nlp_ref_nw(ndmpd_session_t *); 8492654012fSReza Sabdar extern void nlp_unref_nw(ndmpd_session_t *); 8502654012fSReza Sabdar extern void nlp_wait_nw(ndmpd_session_t *); 8512654012fSReza Sabdar extern void nlp_event_nw(ndmpd_session_t *); 8522654012fSReza Sabdar extern int nlp_event_rv_get(ndmpd_session_t *); 8532654012fSReza Sabdar extern void nlp_event_rv_set(ndmpd_session_t *, int); 8542654012fSReza Sabdar extern boolean_t is_buffer_erroneous(tlm_buffer_t *); 8552654012fSReza Sabdar extern void ndmp_execute_cdb(ndmpd_session_t *, 8562654012fSReza Sabdar char *, 8572654012fSReza Sabdar int, 8582654012fSReza Sabdar int, 8592654012fSReza Sabdar ndmp_execute_cdb_request *); 8602654012fSReza Sabdar 8612654012fSReza Sabdar extern scsi_adapter_t *scsi_get_adapter(int); 8622654012fSReza Sabdar extern boolean_t is_tape_unit_ready(char *, int); 8632654012fSReza Sabdar 8642654012fSReza Sabdar extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int); 8652654012fSReza Sabdar extern int ndmp_open_list_del(char *, int, int); 8662654012fSReza Sabdar extern void ndmp_open_list_release(ndmp_connection_t *); 8672654012fSReza Sabdar 8682654012fSReza Sabdar extern void ndmp_stop_buffer_worker(ndmpd_session_t *); 8692654012fSReza Sabdar extern void ndmp_stop_reader_thread(ndmpd_session_t *); 8702654012fSReza Sabdar extern void ndmp_stop_writer_thread(ndmpd_session_t *); 8712654012fSReza Sabdar extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *); 8722654012fSReza Sabdar extern void ndmp_waitfor_op(ndmpd_session_t *); 8732654012fSReza Sabdar 8742654012fSReza Sabdar extern char *cctime(time_t *); 8752654012fSReza Sabdar extern char *ndmp_new_job_name(char *); 8762654012fSReza Sabdar extern char *ndmpd_mk_temp(char *); 8772654012fSReza Sabdar extern char *ndmpd_make_bk_dir_path(char *, char *); 8782654012fSReza Sabdar extern boolean_t ndmp_is_chkpnt_root(char *); 8792654012fSReza Sabdar extern char **ndmpd_make_exc_list(void); 8802654012fSReza Sabdar extern void ndmp_sort_nlist_v3(ndmpd_session_t *); 8812654012fSReza Sabdar extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *); 8822654012fSReza Sabdar extern int ndmp_write_utf8magic(tlm_cmd_t *); 8832654012fSReza Sabdar extern int ndmp_tar_writer(ndmpd_session_t *, 8842654012fSReza Sabdar ndmpd_module_params_t *, 8852654012fSReza Sabdar tlm_commands_t *); 8862654012fSReza Sabdar extern void ndmp_wait_for_reader(tlm_commands_t *); 8872654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *, 8882654012fSReza Sabdar ndmp_name_v3 *, 8892654012fSReza Sabdar ulong_t); 8902654012fSReza Sabdar extern void ndmpd_free_nlist_v3(ndmpd_session_t *); 8912654012fSReza Sabdar extern int ndmp_create_socket(ulong_t *, ushort_t *); 8922654012fSReza Sabdar extern int ndmp_connect_sock_v3(ulong_t, ushort_t); 8932654012fSReza Sabdar extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *); 8942654012fSReza Sabdar extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *); 8952654012fSReza Sabdar extern char *ndmp_addr2str_v3(ndmp_addr_type); 8962654012fSReza Sabdar extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type); 8972654012fSReza Sabdar extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *); 8982654012fSReza Sabdar extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *, 8992654012fSReza Sabdar time_t *, char *); 9002654012fSReza Sabdar extern char *ndmp_get_relative_path(char *, char *); 9012654012fSReza Sabdar 9022654012fSReza Sabdar extern boolean_t ndmp_fhinode; 9032654012fSReza Sabdar extern void ndmp_load_params(void); 9042654012fSReza Sabdar extern void randomize(unsigned char *, int); 9052654012fSReza Sabdar 9062654012fSReza Sabdar 9072654012fSReza Sabdar /* 9082654012fSReza Sabdar * Utility functions from ndmpd_tar3.c. 9092654012fSReza Sabdar */ 9102654012fSReza Sabdar extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *, 9112654012fSReza Sabdar ndmpd_module_params_t *); 9122654012fSReza Sabdar extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *, 9132654012fSReza Sabdar ndmpd_module_params_t *); 9142654012fSReza Sabdar extern char *get_bk_path_v3(ndmpd_module_params_t *); 9152654012fSReza Sabdar 9162654012fSReza Sabdar /* 9172654012fSReza Sabdar * door init and fini function from ndmpd_door_serv.c 9182654012fSReza Sabdar */ 9192654012fSReza Sabdar extern int ndmp_door_init(void); 9202654012fSReza Sabdar extern void ndmp_door_fini(void); 9212654012fSReza Sabdar extern boolean_t ndmp_door_check(void); 9222654012fSReza Sabdar 9232654012fSReza Sabdar extern int ndmp_get_max_tok_seq(void); 9242654012fSReza Sabdar extern boolean_t set_debug_level(boolean_t); 9252654012fSReza Sabdar extern boolean_t get_debug_level(void); 9262654012fSReza Sabdar 9272654012fSReza Sabdar typedef struct ndmp_chkpnt_vol { 9282654012fSReza Sabdar char cv_vol_name[64]; 9292654012fSReza Sabdar unsigned int cv_count; 9302654012fSReza Sabdar void *cv_next; 9312654012fSReza Sabdar } ndmp_chkpnt_vol_t; 9322654012fSReza Sabdar 9332654012fSReza Sabdar extern int get_zfsvolname(char *, int, char *); 9342654012fSReza Sabdar extern int ndmp_start_check_point(char *, char *); 9352654012fSReza Sabdar extern int ndmp_release_check_point(char *, char *); 9362654012fSReza Sabdar extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *); 9372654012fSReza Sabdar extern void ndmpd_abort_marking_v2(ndmpd_session_t *); 9382654012fSReza Sabdar extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *); 9392654012fSReza Sabdar extern ndmp_lbr_params_t *ndmp_get_nlp(void *); 9402654012fSReza Sabdar 9412654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter; 9422654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort; 9432654012fSReza Sabdar 9442654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter; 9452654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort; 9462654012fSReza Sabdar 9472654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter_v3; 9482654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort_v3; 9492654012fSReza Sabdar 9502654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter_v3; 9512654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort_v3; 9522654012fSReza Sabdar 9532654012fSReza Sabdar extern int ndmp_backup_extract_params(ndmpd_session_t *, 9542654012fSReza Sabdar ndmpd_module_params_t *); 9552654012fSReza Sabdar extern int ndmp_restore_extract_params(ndmpd_session_t *, 9562654012fSReza Sabdar ndmpd_module_params_t *); 9572654012fSReza Sabdar extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *); 9582654012fSReza Sabdar 9592654012fSReza Sabdar extern int tape_open(char *, int); 9602654012fSReza Sabdar 9612654012fSReza Sabdar extern void ndmp_session_ref(ndmpd_session_t *); 9622654012fSReza Sabdar extern void ndmp_session_unref(ndmpd_session_t *); 9632654012fSReza Sabdar 9642654012fSReza Sabdar void ndmpd_get_file_entry_type(int, ndmp_file_type *); 9652654012fSReza Sabdar 9662654012fSReza Sabdar extern int tcp_accept(int, unsigned int *); 9672654012fSReza Sabdar extern int tcp_get_peer(int, unsigned int *, int *); 9682654012fSReza Sabdar 9692654012fSReza Sabdar extern char *gethostaddr(void); 9702654012fSReza Sabdar extern int tlm_init(void); 9712654012fSReza Sabdar 9722654012fSReza Sabdar extern int chkpnt_backup_successful(char *, char *); 9732654012fSReza Sabdar extern int chkpnt_backup_prepare(char *, char *); 9742654012fSReza Sabdar 9752654012fSReza Sabdar extern boolean_t fs_is_chkpntvol(char *); 9762654012fSReza Sabdar extern boolean_t fs_is_chkpnt_enabled(char *); 9772654012fSReza Sabdar extern boolean_t fs_is_rdonly(char *); 9782654012fSReza Sabdar extern boolean_t fs_volexist(char *); 9792654012fSReza Sabdar extern boolean_t fs_is_valid_logvol(char *); 9802654012fSReza Sabdar extern boolean_t rootfs_dot_or_dotdot(char *); 9812654012fSReza Sabdar extern int dp_readdir(DIR *, unsigned long *, char *, 9822654012fSReza Sabdar int *, unsigned long *); 9832654012fSReza Sabdar 9842654012fSReza Sabdar extern void scsi_find_sid_lun(); 9852654012fSReza Sabdar extern char *sasd_slink_name(); 9862654012fSReza Sabdar extern int scsi_dev_exists(char *, int, int); 9872654012fSReza Sabdar extern int scsi_get_devtype(char *, int, int); 9882654012fSReza Sabdar extern struct open_list *ndmp_open_list_find(char *, int, int); 9892654012fSReza Sabdar extern int filecopy(char *, char *); 9902654012fSReza Sabdar 9912654012fSReza Sabdar extern void ndmp_stop_local_reader(); 9922654012fSReza Sabdar extern void ndmp_stop_remote_reader(); 9932654012fSReza Sabdar 9942654012fSReza Sabdar extern boolean_t match(char *, char *); 9952654012fSReza Sabdar extern char *trim_whitespace(char *); 99684bf06e9SReza Sabdar extern int fs_getstat(char *, struct fs_fhandle *, struct stat64 *); 9972654012fSReza Sabdar extern int fs_readdir(struct fs_fhandle *, char *, long *, 99884bf06e9SReza Sabdar char *, int *, struct fs_fhandle *, struct stat64 *); 9992654012fSReza Sabdar extern int iscreated(ndmp_lbr_params_t *nlp, char *name, tlm_acls_t *tacl, 10002654012fSReza Sabdar time_t t); 10012654012fSReza Sabdar 10022654012fSReza Sabdar extern int sasd_dev_count(void); 10032654012fSReza Sabdar extern struct scsi_link *sasd_dev_slink(int); 10042654012fSReza Sabdar extern struct sasd_drive *sasd_drive(int); 10052654012fSReza Sabdar extern void *ndmp_malloc(size_t size); 10062654012fSReza Sabdar 10072654012fSReza Sabdar extern ndmp_plugin_t *ndmp_pl; 10082654012fSReza Sabdar #endif /* _NDMPD_H */ 1009