1*2654012fSReza Sabdar /* 2*2654012fSReza Sabdar * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3*2654012fSReza Sabdar * Use is subject to license terms. 4*2654012fSReza Sabdar */ 5*2654012fSReza Sabdar 6*2654012fSReza Sabdar /* 7*2654012fSReza Sabdar * BSD 3 Clause License 8*2654012fSReza Sabdar * 9*2654012fSReza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association. 10*2654012fSReza Sabdar * 11*2654012fSReza Sabdar * Redistribution and use in source and binary forms, with or without 12*2654012fSReza Sabdar * modification, are permitted provided that the following conditions 13*2654012fSReza Sabdar * are met: 14*2654012fSReza Sabdar * - Redistributions of source code must retain the above copyright 15*2654012fSReza Sabdar * notice, this list of conditions and the following disclaimer. 16*2654012fSReza Sabdar * 17*2654012fSReza Sabdar * - Redistributions in binary form must reproduce the above copyright 18*2654012fSReza Sabdar * notice, this list of conditions and the following disclaimer in 19*2654012fSReza Sabdar * the documentation and/or other materials provided with the 20*2654012fSReza Sabdar * distribution. 21*2654012fSReza Sabdar * 22*2654012fSReza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA) 23*2654012fSReza Sabdar * nor the names of its contributors may be used to endorse or promote 24*2654012fSReza Sabdar * products derived from this software without specific prior written 25*2654012fSReza Sabdar * permission. 26*2654012fSReza Sabdar * 27*2654012fSReza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 28*2654012fSReza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29*2654012fSReza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30*2654012fSReza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 31*2654012fSReza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32*2654012fSReza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33*2654012fSReza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34*2654012fSReza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35*2654012fSReza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36*2654012fSReza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37*2654012fSReza Sabdar * POSSIBILITY OF SUCH DAMAGE. 38*2654012fSReza Sabdar */ 39*2654012fSReza Sabdar /* Copyright (c) 2007, The Storage Networking Industry Association. */ 40*2654012fSReza Sabdar /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */ 41*2654012fSReza Sabdar 42*2654012fSReza Sabdar #ifndef _NDMPD_H 43*2654012fSReza Sabdar #define _NDMPD_H 44*2654012fSReza Sabdar 45*2654012fSReza Sabdar #include <sys/types.h> 46*2654012fSReza Sabdar #include <libzfs.h> 47*2654012fSReza Sabdar #include <ndmpd_door.h> 48*2654012fSReza Sabdar #include <libndmp.h> 49*2654012fSReza Sabdar #include "ndmpd_common.h" 50*2654012fSReza Sabdar #include "tlm_buffers.h" 51*2654012fSReza Sabdar #include <dirent.h> 52*2654012fSReza Sabdar #include "ndmpd_prop.h" 53*2654012fSReza Sabdar #include "traverse.h" 54*2654012fSReza Sabdar #include <pthread.h> 55*2654012fSReza Sabdar #include <libndmp.h> 56*2654012fSReza Sabdar #include <atomic.h> 57*2654012fSReza Sabdar 58*2654012fSReza Sabdar #define MAX_RECORD_SIZE (126*512) 59*2654012fSReza Sabdar #define REMOTE_RECORD_SIZE (60*KILOBYTE) 60*2654012fSReza Sabdar #define SCSI_MAX_NAME 32 61*2654012fSReza Sabdar #define MD5_CHALLENGE_SIZE 64 62*2654012fSReza Sabdar #define MD5_PASS_LIMIT 32 63*2654012fSReza Sabdar 64*2654012fSReza Sabdar /* Test unit ready */ 65*2654012fSReza Sabdar #define TUR_WAIT 3000000 66*2654012fSReza Sabdar #define TUR_MAX_TRY 3 67*2654012fSReza Sabdar 68*2654012fSReza Sabdar 69*2654012fSReza Sabdar /* File handler classes */ 70*2654012fSReza Sabdar #define HC_CLIENT 1 71*2654012fSReza Sabdar #define HC_MOVER 2 72*2654012fSReza Sabdar #define HC_MODULE 4 73*2654012fSReza Sabdar #define HC_ALL 0xffffffff 74*2654012fSReza Sabdar 75*2654012fSReza Sabdar #define IN_ADDR(x) \ 76*2654012fSReza Sabdar (*(struct in_addr *)&x) 77*2654012fSReza Sabdar 78*2654012fSReza Sabdar #define FS_READONLY(fs) (hasmntopt(fs, "ro") ? 1 : 0) 79*2654012fSReza Sabdar 80*2654012fSReza Sabdar typedef void *(*funct_t)(void *); /* function pointer */ 81*2654012fSReza Sabdar 82*2654012fSReza Sabdar #define HOSTNAMELEN 256 83*2654012fSReza Sabdar 84*2654012fSReza Sabdar #define VENDOR_NAME "Sun Microsystems" 85*2654012fSReza Sabdar #define PRODUCT_NAME "Solaris 5.11" 86*2654012fSReza Sabdar 87*2654012fSReza Sabdar /* 88*2654012fSReza Sabdar * Calculate array length based on its size and size of 89*2654012fSReza Sabdar * its elements. 90*2654012fSReza Sabdar */ 91*2654012fSReza Sabdar #define ARRAY_LEN(a, t) (sizeof (a) / sizeof (t)) 92*2654012fSReza Sabdar /* 93*2654012fSReza Sabdar * Default maximum permitted sequence number for the token-based backup. 94*2654012fSReza Sabdar */ 95*2654012fSReza Sabdar #define NDMP_MAX_TOKSEQ 9 96*2654012fSReza Sabdar 97*2654012fSReza Sabdar /* 98*2654012fSReza Sabdar * Hard-limit for the sequence number in the token-based backup. 99*2654012fSReza Sabdar * It's one less than the ASCII value of 'A'. The 'A' letter 100*2654012fSReza Sabdar * can be used as level in the lbr-type backups. 101*2654012fSReza Sabdar */ 102*2654012fSReza Sabdar #define NDMP_TOKSEQ_HLIMIT ('A' - 1) 103*2654012fSReza Sabdar 104*2654012fSReza Sabdar 105*2654012fSReza Sabdar /* 106*2654012fSReza Sabdar * Soft-limit for the sequence number in the token-based backup. 107*2654012fSReza Sabdar */ 108*2654012fSReza Sabdar #define NDMP_TOKSEQ_SLIMIT (NDMP_TOKSEQ_HLIMIT - 5) 109*2654012fSReza Sabdar 110*2654012fSReza Sabdar 111*2654012fSReza Sabdar /* 112*2654012fSReza Sabdar * Root inode number of dump format in V2. 113*2654012fSReza Sabdar */ 114*2654012fSReza Sabdar #define ROOT_INODE 2 115*2654012fSReza Sabdar 116*2654012fSReza Sabdar /* 117*2654012fSReza Sabdar * NDMP backup image signature. 118*2654012fSReza Sabdar */ 119*2654012fSReza Sabdar #define NDMPUTF8MAGIC "NDMPUTF8MAGIC" 120*2654012fSReza Sabdar 121*2654012fSReza Sabdar /* 122*2654012fSReza Sabdar * Supported BU types 123*2654012fSReza Sabdar */ 124*2654012fSReza Sabdar #define NDMP_DUMP_TYPE "dump" 125*2654012fSReza Sabdar #define NDMP_TAR_TYPE "tar" 126*2654012fSReza Sabdar 127*2654012fSReza Sabdar /* All 1's binary maximum mover window */ 128*2654012fSReza Sabdar #define MAX_WINDOW_SIZE 0xffffffffffffffffULL 129*2654012fSReza Sabdar 130*2654012fSReza Sabdar #define NDMP_FREE(cp) { free((char *)(cp)); (cp) = NULL; } 131*2654012fSReza Sabdar 132*2654012fSReza Sabdar #define NDMP_YORN(f) ((f) ? 'Y' : 'N') 133*2654012fSReza Sabdar #define NDMP_TORF(f) ((f) ? "TRUE" : "FALSE") 134*2654012fSReza Sabdar #define NDMP_SVAL(cp) ((cp) ? (cp) : "NULL") 135*2654012fSReza Sabdar 136*2654012fSReza Sabdar #define NDMP_SETENV(env, nm, val) \ 137*2654012fSReza Sabdar { \ 138*2654012fSReza Sabdar env->name = nm; \ 139*2654012fSReza Sabdar env->value = val; \ 140*2654012fSReza Sabdar env++; \ 141*2654012fSReza Sabdar } 142*2654012fSReza Sabdar 143*2654012fSReza Sabdar #define NDMP_CL_ADDR_LEN 24 144*2654012fSReza Sabdar #define NDMP_TCP_ADDR_SIZE 32 145*2654012fSReza Sabdar #define NDMP_TAPE_DEV_NAME 256 146*2654012fSReza Sabdar 147*2654012fSReza Sabdar typedef struct { 148*2654012fSReza Sabdar char *bk_path; 149*2654012fSReza Sabdar int bk_llevel; /* last backup level */ 150*2654012fSReza Sabdar time_t bk_ldate; /* last backup date */ 151*2654012fSReza Sabdar int bk_clevel; /* current backup level */ 152*2654012fSReza Sabdar time_t bk_cdate; /* current backup date */ 153*2654012fSReza Sabdar int bk_map; 154*2654012fSReza Sabdar int bk_dirino; 155*2654012fSReza Sabdar char *bk_dmpnm; 156*2654012fSReza Sabdar char **bk_exl; /* exlude list */ 157*2654012fSReza Sabdar char **bk_inc; /* include list */ 158*2654012fSReza Sabdar } ndmp_backup_params_t; 159*2654012fSReza Sabdar 160*2654012fSReza Sabdar 161*2654012fSReza Sabdar typedef struct { 162*2654012fSReza Sabdar ulong_t rs_nf; /* number of files to restore */ 163*2654012fSReza Sabdar char *rs_path; 164*2654012fSReza Sabdar char *rs_bkpath; 165*2654012fSReza Sabdar int *rs_restored; 166*2654012fSReza Sabdar int rs_bm; 167*2654012fSReza Sabdar int rs_lastidx; 168*2654012fSReza Sabdar } ndmp_restore_params_t; 169*2654012fSReza Sabdar 170*2654012fSReza Sabdar /* 171*2654012fSReza Sabdar * Tar format archiving ops table 172*2654012fSReza Sabdar */ 173*2654012fSReza Sabdar extern tm_ops_t tm_tar_ops; 174*2654012fSReza Sabdar 175*2654012fSReza Sabdar /* 176*2654012fSReza Sabdar * IS_LBR_BKTYPE shows if the backup type is one of these 177*2654012fSReza Sabdar * 'F' of 'f': 'Full' backup type. 178*2654012fSReza Sabdar * 'A' of 'a': 'Archive' backup type. 179*2654012fSReza Sabdar * 'I' of 'i': 'Incremental' backup type. 180*2654012fSReza Sabdar * 'D' of 'd': 'Differntial' backup type. 181*2654012fSReza Sabdar */ 182*2654012fSReza Sabdar #define IS_LBR_BKTYPE(t) (((t) && strchr("FAID", toupper(t))) ? 1 : 0) 183*2654012fSReza Sabdar 184*2654012fSReza Sabdar 185*2654012fSReza Sabdar /* 186*2654012fSReza Sabdar * NLP flags. 187*2654012fSReza Sabdar */ 188*2654012fSReza Sabdar #define NLPF_CHKPNTED_PATH (1 << 0) 189*2654012fSReza Sabdar #define NLPF_FH (1 << 1) 190*2654012fSReza Sabdar #define NLPF_DIRECT (1 << 2) 191*2654012fSReza Sabdar #define NLPF_UPDATE (1 << 3) 192*2654012fSReza Sabdar #define NLPF_DUMP (1 << 4) 193*2654012fSReza Sabdar #define NLPF_TAR (1 << 5) 194*2654012fSReza Sabdar #define NLPF_ABORTED (1 << 6) 195*2654012fSReza Sabdar #define NLPF_TOKENBK (1 << 8) 196*2654012fSReza Sabdar #define NLPF_LBRBK (1 << 9) 197*2654012fSReza Sabdar #define NLPF_LEVELBK (1 << 10) 198*2654012fSReza Sabdar #define NLPF_IGNCTIME (1 << 11) 199*2654012fSReza Sabdar #define NLPF_INCLMTIME (1 << 12) 200*2654012fSReza Sabdar #define NLPF_RECURSIVE (1 << 13) 201*2654012fSReza Sabdar 202*2654012fSReza Sabdar /* 203*2654012fSReza Sabdar * Macros on NLP flags. 204*2654012fSReza Sabdar */ 205*2654012fSReza Sabdar #define NLP_ISSET(n, f) (((n)->nlp_flags & (f)) != 0) 206*2654012fSReza Sabdar #define NLP_SET(n, f) (n)->nlp_flags |= (f) 207*2654012fSReza Sabdar #define NLP_UNSET(n, f) (n)->nlp_flags &= ~(f) 208*2654012fSReza Sabdar 209*2654012fSReza Sabdar 210*2654012fSReza Sabdar #define NLP_ISCHKPNTED(n) NLP_ISSET(n, NLPF_CHKPNTED_PATH) 211*2654012fSReza Sabdar #define NLP_SHOULD_UPDATE(n) NLP_ISSET(n, NLPF_UPDATE) 212*2654012fSReza Sabdar #define NLP_ISDUMP(n) NLP_ISSET(n, NLPF_DUMP) 213*2654012fSReza Sabdar #define NLP_ISTAR(n) NLP_ISSET(n, NLPF_TAR) 214*2654012fSReza Sabdar #define NLP_IGNCTIME(n) NLP_ISSET(n, NLPF_IGNCTIME) 215*2654012fSReza Sabdar #define NLP_INCLMTIME(n) NLP_ISSET(n, NLPF_INCLMTIME) 216*2654012fSReza Sabdar 217*2654012fSReza Sabdar /* 218*2654012fSReza Sabdar * NDMP statistics 219*2654012fSReza Sabdar */ 220*2654012fSReza Sabdar #define NS_INC(s) (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s)) 221*2654012fSReza Sabdar #define NS_DEC(s) (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s)) 222*2654012fSReza Sabdar #define NS_ADD(s, d) (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \ 223*2654012fSReza Sabdar (uint64_t)d)) 224*2654012fSReza Sabdar #define NS_UPD(s, t) { \ 225*2654012fSReza Sabdar atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \ 226*2654012fSReza Sabdar atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \ 227*2654012fSReza Sabdar } 228*2654012fSReza Sabdar 229*2654012fSReza Sabdar #define NLP_READY 1 230*2654012fSReza Sabdar 231*2654012fSReza Sabdar typedef struct ndmp_lbr_params { 232*2654012fSReza Sabdar struct ndmpd_session *nlp_session; 233*2654012fSReza Sabdar int nlp_flags; 234*2654012fSReza Sabdar 235*2654012fSReza Sabdar ndmp_backup_params_t bk_params; 236*2654012fSReza Sabdar ndmp_restore_params_t rs_params; 237*2654012fSReza Sabdar #define nlp_backup_path bk_params.bk_path 238*2654012fSReza Sabdar #define nlp_llevel bk_params.bk_llevel 239*2654012fSReza Sabdar #define nlp_ldate bk_params.bk_ldate 240*2654012fSReza Sabdar #define nlp_clevel bk_params.bk_clevel 241*2654012fSReza Sabdar #define nlp_tokseq nlp_clevel 242*2654012fSReza Sabdar #define nlp_tokdate nlp_ldate 243*2654012fSReza Sabdar #define nlp_cdate bk_params.bk_cdate 244*2654012fSReza Sabdar #define nlp_bkmap bk_params.bk_map 245*2654012fSReza Sabdar #define nlp_bkdirino bk_params.bk_dirino 246*2654012fSReza Sabdar #define nlp_dmpnm bk_params.bk_dmpnm 247*2654012fSReza Sabdar #define nlp_exl bk_params.bk_exl 248*2654012fSReza Sabdar #define nlp_inc bk_params.bk_inc 249*2654012fSReza Sabdar 250*2654012fSReza Sabdar #define nlp_nfiles rs_params.rs_nf 251*2654012fSReza Sabdar #define nlp_restore_path rs_params.rs_path 252*2654012fSReza Sabdar #define nlp_restore_bk_path rs_params.rs_bkpath 253*2654012fSReza Sabdar #define nlp_restored rs_params.rs_restored 254*2654012fSReza Sabdar #define nlp_rsbm rs_params.rs_bm 255*2654012fSReza Sabdar #define nlp_lastidx rs_params.rs_lastidx 256*2654012fSReza Sabdar 257*2654012fSReza Sabdar ndmpd_module_params_t *nlp_params; 258*2654012fSReza Sabdar tlm_job_stats_t *nlp_jstat; 259*2654012fSReza Sabdar lbr_fhlog_call_backs_t *nlp_logcallbacks; 260*2654012fSReza Sabdar tlm_commands_t nlp_cmds; 261*2654012fSReza Sabdar struct { 262*2654012fSReza Sabdar /* 263*2654012fSReza Sabdar * nw: shows the number of threads waiting for a request 264*2654012fSReza Sabdar * to be processed. 265*2654012fSReza Sabdar * rv: if error occurred when processing a request. 266*2654012fSReza Sabdar */ 267*2654012fSReza Sabdar int ev_nw; 268*2654012fSReza Sabdar int ev_rv; 269*2654012fSReza Sabdar } nlp_event; 270*2654012fSReza Sabdar cond_t nlp_cv; 271*2654012fSReza Sabdar int nlp_flag; 272*2654012fSReza Sabdar #define nlp_nw nlp_event.ev_nw 273*2654012fSReza Sabdar #define nlp_rv nlp_event.ev_rv 274*2654012fSReza Sabdar u_longlong_t nlp_bytes_total; 275*2654012fSReza Sabdar } ndmp_lbr_params_t; 276*2654012fSReza Sabdar 277*2654012fSReza Sabdar 278*2654012fSReza Sabdar typedef struct mem_ndmp_name_v3 { 279*2654012fSReza Sabdar char *nm3_opath; 280*2654012fSReza Sabdar char *nm3_dpath; 281*2654012fSReza Sabdar char *nm3_newnm; 282*2654012fSReza Sabdar u_longlong_t nm3_node; 283*2654012fSReza Sabdar u_longlong_t nm3_fh_info; 284*2654012fSReza Sabdar ndmp_error nm3_err; 285*2654012fSReza Sabdar } mem_ndmp_name_v3_t; 286*2654012fSReza Sabdar 287*2654012fSReza Sabdar 288*2654012fSReza Sabdar typedef struct ndmpd_file_handler { 289*2654012fSReza Sabdar int fh_fd; 290*2654012fSReza Sabdar ulong_t fh_mode; 291*2654012fSReza Sabdar ulong_t fh_class; 292*2654012fSReza Sabdar void *fh_cookie; 293*2654012fSReza Sabdar ndmpd_file_handler_func_t *fh_func; 294*2654012fSReza Sabdar struct ndmpd_file_handler *fh_next; 295*2654012fSReza Sabdar } ndmpd_file_handler_t; 296*2654012fSReza Sabdar 297*2654012fSReza Sabdar typedef struct ndmpd_session_scsi_desc { 298*2654012fSReza Sabdar int sd_is_open; 299*2654012fSReza Sabdar int sd_devid; 300*2654012fSReza Sabdar boolean_t sd_valid_target_set; 301*2654012fSReza Sabdar int sd_sid; 302*2654012fSReza Sabdar int sd_lun; 303*2654012fSReza Sabdar char sd_adapter_name[SCSI_MAX_NAME]; 304*2654012fSReza Sabdar } ndmpd_session_scsi_desc_t; 305*2654012fSReza Sabdar 306*2654012fSReza Sabdar typedef struct ndmpd_session_tape_desc { 307*2654012fSReza Sabdar int td_fd; /* tape device file descriptor */ 308*2654012fSReza Sabdar ulong_t td_record_count; /* number of records written */ 309*2654012fSReza Sabdar ndmp_tape_open_mode td_mode; /* tape device open mode */ 310*2654012fSReza Sabdar u_longlong_t td_pos; /* current position on the current tape */ 311*2654012fSReza Sabdar int td_sid; 312*2654012fSReza Sabdar int td_lun; 313*2654012fSReza Sabdar char td_adapter_name[SCSI_MAX_NAME]; 314*2654012fSReza Sabdar ulong_t td_eom_seen:1, 315*2654012fSReza Sabdar td_io_err:1, 316*2654012fSReza Sabdar td_write:1; 317*2654012fSReza Sabdar } ndmpd_session_tape_desc_t; 318*2654012fSReza Sabdar 319*2654012fSReza Sabdar typedef struct ndmpd_session_mover_desc { 320*2654012fSReza Sabdar ndmp_mover_state md_state; /* current state */ 321*2654012fSReza Sabdar ndmp_mover_mode md_mode; /* current mode */ 322*2654012fSReza Sabdar ndmp_mover_pause_reason md_pause_reason; /* current reason */ 323*2654012fSReza Sabdar ndmp_mover_halt_reason md_halt_reason; /* current reason */ 324*2654012fSReza Sabdar u_longlong_t md_data_written; /* total written to tape */ 325*2654012fSReza Sabdar u_longlong_t md_seek_position; /* current seek position */ 326*2654012fSReza Sabdar u_longlong_t md_bytes_left_to_read; /* #bytes to end of seek window */ 327*2654012fSReza Sabdar u_longlong_t md_window_offset; /* valid data window begin */ 328*2654012fSReza Sabdar u_longlong_t md_window_length; /* valid data window length */ 329*2654012fSReza Sabdar u_longlong_t md_position; /* current data stream pos */ 330*2654012fSReza Sabdar boolean_t md_pre_cond; /* used for precondition checks */ 331*2654012fSReza Sabdar ulong_t md_record_size; /* tape I/O record size */ 332*2654012fSReza Sabdar ulong_t md_record_num; /* current record num */ 333*2654012fSReza Sabdar int md_listen_sock; /* data conn listen socket */ 334*2654012fSReza Sabdar int md_sock; /* data conn socket */ 335*2654012fSReza Sabdar ulong_t md_r_index; /* buffer read index */ 336*2654012fSReza Sabdar ulong_t md_w_index; /* buffer write index */ 337*2654012fSReza Sabdar char *md_buf; /* data buffer */ 338*2654012fSReza Sabdar /* 339*2654012fSReza Sabdar * V2 fields. 340*2654012fSReza Sabdar */ 341*2654012fSReza Sabdar ulong_t md_discard_length; /* bytes to discard */ 342*2654012fSReza Sabdar 343*2654012fSReza Sabdar /* 344*2654012fSReza Sabdar * V3 fields. 345*2654012fSReza Sabdar */ 346*2654012fSReza Sabdar ndmp_addr_v3 md_data_addr; 347*2654012fSReza Sabdar /* 348*2654012fSReza Sabdar * V4 fields. 349*2654012fSReza Sabdar */ 350*2654012fSReza Sabdar ndmp_addr_v4 md_data_addr_v4; 351*2654012fSReza Sabdar } ndmpd_session_mover_desc_t; 352*2654012fSReza Sabdar 353*2654012fSReza Sabdar 354*2654012fSReza Sabdar typedef struct ndmpd_session_data_module { 355*2654012fSReza Sabdar void *dm_module_cookie; /* sent as abort_func param */ 356*2654012fSReza Sabdar module_start_func_t *dm_start_func; /* start function */ 357*2654012fSReza Sabdar module_abort_func_t *dm_abort_func; /* abort function */ 358*2654012fSReza Sabdar ndmpd_module_stats dm_stats; /* statistics buffer */ 359*2654012fSReza Sabdar } ndmpd_session_data_module_t; 360*2654012fSReza Sabdar 361*2654012fSReza Sabdar typedef struct ndmpd_session_data_desc { 362*2654012fSReza Sabdar /* 363*2654012fSReza Sabdar * Common fields. 364*2654012fSReza Sabdar */ 365*2654012fSReza Sabdar ndmp_data_operation dd_operation; /* current operation */ 366*2654012fSReza Sabdar boolean_t dd_abort; /* abort operation flag */ 367*2654012fSReza Sabdar boolean_t dd_io_ready; /* mover sock read for I/O */ 368*2654012fSReza Sabdar ndmp_pval *dd_env; /* environment from backup or recover request */ 369*2654012fSReza Sabdar ulong_t dd_env_len; /* environment length */ 370*2654012fSReza Sabdar ulong_t dd_nlist_len; /* recover file list length */ 371*2654012fSReza Sabdar int dd_sock; /* listen and data socket */ 372*2654012fSReza Sabdar u_longlong_t dd_read_offset; /* data read seek offset */ 373*2654012fSReza Sabdar u_longlong_t dd_read_length; /* data read length */ 374*2654012fSReza Sabdar u_longlong_t dd_data_size; /* data size to be backed up */ 375*2654012fSReza Sabdar ndmpd_session_data_module_t dd_module; 376*2654012fSReza Sabdar 377*2654012fSReza Sabdar ndmp_data_state dd_state; /* current state */ 378*2654012fSReza Sabdar ndmp_data_halt_reason dd_halt_reason; /* current reason */ 379*2654012fSReza Sabdar /* 380*2654012fSReza Sabdar * V2 fields. 381*2654012fSReza Sabdar */ 382*2654012fSReza Sabdar ndmp_name *dd_nlist; /* recover file list */ 383*2654012fSReza Sabdar ndmp_mover_addr dd_mover; /* mover address */ 384*2654012fSReza Sabdar /* 385*2654012fSReza Sabdar * V3 fields. 386*2654012fSReza Sabdar */ 387*2654012fSReza Sabdar mem_ndmp_name_v3_t *dd_nlist_v3; 388*2654012fSReza Sabdar ndmp_addr_v3 dd_data_addr; 389*2654012fSReza Sabdar int dd_listen_sock; /* socket for listening for remote */ 390*2654012fSReza Sabdar /* mover connections */ 391*2654012fSReza Sabdar u_longlong_t dd_bytes_left_to_read; 392*2654012fSReza Sabdar u_longlong_t dd_position; 393*2654012fSReza Sabdar u_longlong_t dd_discard_length; 394*2654012fSReza Sabdar /* 395*2654012fSReza Sabdar * V4 fields. 396*2654012fSReza Sabdar */ 397*2654012fSReza Sabdar ndmp_addr_v4 dd_data_addr_v4; 398*2654012fSReza Sabdar } ndmpd_session_data_desc_t; 399*2654012fSReza Sabdar 400*2654012fSReza Sabdar typedef struct ndmpd_session_file_history { 401*2654012fSReza Sabdar ndmp_fh_unix_path *fh_path_entries; 402*2654012fSReza Sabdar ndmp_fh_unix_dir *fh_dir_entries; 403*2654012fSReza Sabdar ndmp_fh_unix_node *fh_node_entries; 404*2654012fSReza Sabdar char *fh_path_name_buf; 405*2654012fSReza Sabdar char *fh_dir_name_buf; 406*2654012fSReza Sabdar ulong_t fh_path_index; 407*2654012fSReza Sabdar ulong_t fh_dir_index; 408*2654012fSReza Sabdar ulong_t fh_node_index; 409*2654012fSReza Sabdar ulong_t fh_path_name_buf_index; 410*2654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 411*2654012fSReza Sabdar } ndmpd_session_file_history_t; 412*2654012fSReza Sabdar 413*2654012fSReza Sabdar typedef struct ndmpd_session_file_history_v3 { 414*2654012fSReza Sabdar ndmp_file_v3 *fh_files; 415*2654012fSReza Sabdar ndmp_dir_v3 *fh_dirs; 416*2654012fSReza Sabdar ndmp_node_v3 *fh_nodes; 417*2654012fSReza Sabdar ndmp_file_name_v3 *fh_file_names; 418*2654012fSReza Sabdar ndmp_file_name_v3 *fh_dir_names; 419*2654012fSReza Sabdar ndmp_file_stat_v3 *fh_file_stats; 420*2654012fSReza Sabdar ndmp_file_stat_v3 *fh_node_stats; 421*2654012fSReza Sabdar char *fh_file_name_buf; 422*2654012fSReza Sabdar char *fh_dir_name_buf; 423*2654012fSReza Sabdar ulong_t fh_file_index; 424*2654012fSReza Sabdar ulong_t fh_dir_index; 425*2654012fSReza Sabdar ulong_t fh_node_index; 426*2654012fSReza Sabdar ulong_t fh_file_name_buf_index; 427*2654012fSReza Sabdar ulong_t fh_dir_name_buf_index; 428*2654012fSReza Sabdar } ndmpd_session_file_history_v3_t; 429*2654012fSReza Sabdar 430*2654012fSReza Sabdar typedef struct ndmpd_session { 431*2654012fSReza Sabdar ndmp_connection_t *ns_connection; /* NDMP connection to client */ 432*2654012fSReza Sabdar boolean_t ns_eof; /* connection EOF flag */ 433*2654012fSReza Sabdar ushort_t ns_protocol_version; /* connection protocol version */ 434*2654012fSReza Sabdar ndmpd_session_scsi_desc_t ns_scsi; 435*2654012fSReza Sabdar ndmpd_session_tape_desc_t ns_tape; 436*2654012fSReza Sabdar ndmpd_session_mover_desc_t ns_mover; 437*2654012fSReza Sabdar ndmpd_session_data_desc_t ns_data; 438*2654012fSReza Sabdar ndmpd_session_file_history_t ns_fh; 439*2654012fSReza Sabdar ndmpd_file_handler_t *ns_file_handler_list; /* for I/O multiplexing */ 440*2654012fSReza Sabdar int ns_nref; 441*2654012fSReza Sabdar ndmp_lbr_params_t *ns_ndmp_lbr_params; 442*2654012fSReza Sabdar mutex_t ns_lock; 443*2654012fSReza Sabdar 444*2654012fSReza Sabdar /* 445*2654012fSReza Sabdar * NDMP V3 446*2654012fSReza Sabdar * Tape, SCSI, mover, data and file handlers will 447*2654012fSReza Sabdar * be shared between V2 and V3. 448*2654012fSReza Sabdar */ 449*2654012fSReza Sabdar ndmpd_session_file_history_v3_t ns_fh_v3; 450*2654012fSReza Sabdar unsigned char ns_challenge[MD5_CHALLENGE_SIZE]; /* For MD5 */ 451*2654012fSReza Sabdar 452*2654012fSReza Sabdar /* 453*2654012fSReza Sabdar * NDMP V4 related data 454*2654012fSReza Sabdar */ 455*2654012fSReza Sabdar boolean_t ns_set_ext_list; 456*2654012fSReza Sabdar 457*2654012fSReza Sabdar /* handling of hardlink, hardlink queue head */ 458*2654012fSReza Sabdar struct hardlink_q *hardlink_q; 459*2654012fSReza Sabdar } ndmpd_session_t; 460*2654012fSReza Sabdar 461*2654012fSReza Sabdar 462*2654012fSReza Sabdar /* 463*2654012fSReza Sabdar * NDMP request handler functions. 464*2654012fSReza Sabdar */ 465*2654012fSReza Sabdar 466*2654012fSReza Sabdar /* Config */ 467*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v2; 468*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_attr_v2; 469*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_mover_type_v2; 470*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v2; 471*2654012fSReza Sabdar 472*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_host_info_v3; 473*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v3; 474*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_connection_type_v3; 475*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_auth_attr_v3; 476*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_fs_info_v3; 477*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_tape_info_v3; 478*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_scsi_info_v3; 479*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_server_info_v3; 480*2654012fSReza Sabdar 481*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_butype_info_v4; 482*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_get_ext_list_v4; 483*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_config_set_ext_list_v4; 484*2654012fSReza Sabdar 485*2654012fSReza Sabdar 486*2654012fSReza Sabdar /* Scsi */ 487*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v2; 488*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_close_v2; 489*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_get_state_v2; 490*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v2; 491*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_device_v2; 492*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_reset_bus_v2; 493*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_execute_cdb_v2; 494*2654012fSReza Sabdar 495*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_open_v3; 496*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_scsi_set_target_v3; 497*2654012fSReza Sabdar 498*2654012fSReza Sabdar 499*2654012fSReza Sabdar /* Tape */ 500*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v2; 501*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v2; 502*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v2; 503*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_mtio_v2; 504*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v2; 505*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v2; 506*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_execute_cdb_v2; 507*2654012fSReza Sabdar 508*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_open_v3; 509*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_get_state_v3; 510*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_write_v3; 511*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_read_v3; 512*2654012fSReza Sabdar 513*2654012fSReza Sabdar 514*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_tape_close_v4; 515*2654012fSReza Sabdar /* Data */ 516*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v2; 517*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v2; 518*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v2; 519*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v2; 520*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v2; 521*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v2; 522*2654012fSReza Sabdar 523*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v3; 524*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v3; 525*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v3; 526*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_stop_v3; 527*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_abort_v3; 528*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_v3; 529*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_backup_v3; 530*2654012fSReza Sabdar 531*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_env_v4; 532*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_get_state_v4; 533*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_connect_v4; 534*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_listen_v4; 535*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_data_start_recover_filehist_v4; 536*2654012fSReza Sabdar 537*2654012fSReza Sabdar 538*2654012fSReza Sabdar /* Connect */ 539*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_open_v2; 540*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v2; 541*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_server_auth_v2; 542*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v2; 543*2654012fSReza Sabdar 544*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_client_auth_v3; 545*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_connect_close_v3; 546*2654012fSReza Sabdar 547*2654012fSReza Sabdar 548*2654012fSReza Sabdar /* Mover */ 549*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v2; 550*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v2; 551*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v2; 552*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v2; 553*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_stop_v2; 554*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v2; 555*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v2; 556*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_close_v2; 557*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v2; 558*2654012fSReza Sabdar 559*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v3; 560*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v3; 561*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_continue_v3; 562*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_abort_v3; 563*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_window_v3; 564*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_read_v3; 565*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_set_record_size_v3; 566*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v3; 567*2654012fSReza Sabdar 568*2654012fSReza Sabdar 569*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_get_state_v4; 570*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_listen_v4; 571*2654012fSReza Sabdar ndmp_msg_handler_func_t ndmpd_mover_connect_v4; 572*2654012fSReza Sabdar 573*2654012fSReza Sabdar 574*2654012fSReza Sabdar /* 575*2654012fSReza Sabdar * Backup/recover module API functions. 576*2654012fSReza Sabdar */ 577*2654012fSReza Sabdar ndmpd_get_env_func_t ndmpd_api_get_env; 578*2654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_add_env; 579*2654012fSReza Sabdar ndmpd_add_env_func_t ndmpd_api_set_env; 580*2654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name; 581*2654012fSReza Sabdar ndmpd_dispatch_func_t ndmpd_api_dispatch; 582*2654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v2; 583*2654012fSReza Sabdar 584*2654012fSReza Sabdar 585*2654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v2; 586*2654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_path_v2; 587*2654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v2; 588*2654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v2; 589*2654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v2; 590*2654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v2; 591*2654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v2; 592*2654012fSReza Sabdar ndmpd_add_file_handler_func_t ndmpd_api_add_file_handler; 593*2654012fSReza Sabdar ndmpd_remove_file_handler_func_t ndmpd_api_remove_file_handler; 594*2654012fSReza Sabdar 595*2654012fSReza Sabdar 596*2654012fSReza Sabdar /* 597*2654012fSReza Sabdar * NDMP V3 598*2654012fSReza Sabdar */ 599*2654012fSReza Sabdar ndmpd_done_func_t ndmpd_api_done_v3; 600*2654012fSReza Sabdar ndmpd_write_func_t ndmpd_api_write_v3; 601*2654012fSReza Sabdar ndmpd_read_func_t ndmpd_api_read_v3; 602*2654012fSReza Sabdar ndmpd_seek_func_t ndmpd_api_seek_v3; 603*2654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v3; 604*2654012fSReza Sabdar ndmpd_get_name_func_t ndmpd_api_get_name_v3; 605*2654012fSReza Sabdar ndmpd_file_history_path_func_t ndmpd_api_file_history_file_v3; 606*2654012fSReza Sabdar ndmpd_file_history_dir_func_t ndmpd_api_file_history_dir_v3; 607*2654012fSReza Sabdar ndmpd_file_history_node_func_t ndmpd_api_file_history_node_v3; 608*2654012fSReza Sabdar 609*2654012fSReza Sabdar /* 610*2654012fSReza Sabdar * NDMP V4 611*2654012fSReza Sabdar */ 612*2654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v4; 613*2654012fSReza Sabdar ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4; 614*2654012fSReza Sabdar 615*2654012fSReza Sabdar #ifndef NO_NDMP_API_LOG_PROTOTYPES 616*2654012fSReza Sabdar ndmpd_log_func_t ndmpd_api_log_v2; 617*2654012fSReza Sabdar ndmpd_log_func_v3_t ndmpd_api_log_v3; 618*2654012fSReza Sabdar #endif /* NO_NDMP_API_LOG_PROTOTYPES */ 619*2654012fSReza Sabdar 620*2654012fSReza Sabdar typedef void ndmpd_func_t(ndmp_connection_t *, void *); 621*2654012fSReza Sabdar 622*2654012fSReza Sabdar /* 623*2654012fSReza Sabdar * pthread call arg parameters 624*2654012fSReza Sabdar */ 625*2654012fSReza Sabdar typedef struct { 626*2654012fSReza Sabdar int nw_sock; 627*2654012fSReza Sabdar long nw_ipaddr; 628*2654012fSReza Sabdar ndmp_con_handler_func_t nw_con_handler_func; 629*2654012fSReza Sabdar } ndmpd_worker_arg_t; 630*2654012fSReza Sabdar 631*2654012fSReza Sabdar typedef struct { 632*2654012fSReza Sabdar char *br_jname; 633*2654012fSReza Sabdar ndmp_lbr_params_t *br_nlp; 634*2654012fSReza Sabdar tlm_commands_t *br_cmds; 635*2654012fSReza Sabdar pthread_barrier_t br_barrier; 636*2654012fSReza Sabdar } backup_reader_arg_t; 637*2654012fSReza Sabdar 638*2654012fSReza Sabdar typedef struct { 639*2654012fSReza Sabdar ndmpd_session_t *tr_session; 640*2654012fSReza Sabdar ndmpd_module_params_t *tr_mod_params; 641*2654012fSReza Sabdar tlm_commands_t *tr_cmds; 642*2654012fSReza Sabdar } ndmp_tar_reader_arg_t; 643*2654012fSReza Sabdar 644*2654012fSReza Sabdar /* 645*2654012fSReza Sabdar * Variables from ndmpd_comm.c 646*2654012fSReza Sabdar */ 647*2654012fSReza Sabdar extern int ndmp_ver; 648*2654012fSReza Sabdar extern int ndmp_full_restore_path; 649*2654012fSReza Sabdar extern int ndmp_dar_support; 650*2654012fSReza Sabdar extern int ndmp_port; 651*2654012fSReza Sabdar extern ndmp_stat_t ndstat; 652*2654012fSReza Sabdar extern char *ndmp_log_path; 653*2654012fSReza Sabdar 654*2654012fSReza Sabdar extern void ndmpd_main(void); 655*2654012fSReza Sabdar extern void connection_handler(ndmp_connection_t *); 656*2654012fSReza Sabdar extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path, 657*2654012fSReza Sabdar int dest, char *local_path, int result); 658*2654012fSReza Sabdar extern void ndmpd_audit_restore(ndmp_connection_t *conn, 659*2654012fSReza Sabdar char *path, int dest, char *local_path, int result); 660*2654012fSReza Sabdar extern void ndmpd_audit_connect(ndmp_connection_t *conn, 661*2654012fSReza Sabdar int result); 662*2654012fSReza Sabdar extern void ndmpd_audit_disconnect(ndmp_connection_t *conn); 663*2654012fSReza Sabdar 664*2654012fSReza Sabdar /* Variables from ndmpd_main.c */ 665*2654012fSReza Sabdar extern libzfs_handle_t *zlibh; 666*2654012fSReza Sabdar extern mutex_t zlib_mtx; 667*2654012fSReza Sabdar 668*2654012fSReza Sabdar /* 669*2654012fSReza Sabdar * Utility from ndmpd_connect.c. 670*2654012fSReza Sabdar */ 671*2654012fSReza Sabdar extern int ndmp_connect_list_add(ndmp_connection_t *, int *); 672*2654012fSReza Sabdar extern int ndmp_connect_list_del(ndmp_connection_t *); 673*2654012fSReza Sabdar extern int ndmpd_connect_kill_id(int); 674*2654012fSReza Sabdar extern void ndmp_connect_list_get(ndmp_door_ctx_t *); 675*2654012fSReza Sabdar extern void ndmpd_get_devs(ndmp_door_ctx_t *); 676*2654012fSReza Sabdar 677*2654012fSReza Sabdar /* 678*2654012fSReza Sabdar * Utility functions form ndmpd_data.c. 679*2654012fSReza Sabdar */ 680*2654012fSReza Sabdar extern void ndmpd_data_cleanup(ndmpd_session_t *); 681*2654012fSReza Sabdar extern int ndmpd_data_init(ndmpd_session_t *); 682*2654012fSReza Sabdar extern char *ndmp_data_get_mover_mode(ndmpd_session_t *); 683*2654012fSReza Sabdar extern void ndmpd_data_error(ndmpd_session_t *, ndmp_data_halt_reason); 684*2654012fSReza Sabdar 685*2654012fSReza Sabdar 686*2654012fSReza Sabdar /* 687*2654012fSReza Sabdar * Utility functions from ndmpd_mover.c. 688*2654012fSReza Sabdar */ 689*2654012fSReza Sabdar extern int ndmpd_mover_init(ndmpd_session_t *); 690*2654012fSReza Sabdar extern void ndmpd_mover_cleanup(ndmpd_session_t *); 691*2654012fSReza Sabdar extern ndmp_error ndmpd_mover_connect(ndmpd_session_t *, 692*2654012fSReza Sabdar ndmp_mover_mode); 693*2654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 694*2654012fSReza Sabdar ndmp_mover_halt_reason); 695*2654012fSReza Sabdar extern int ndmpd_mover_seek(ndmpd_session_t *, 696*2654012fSReza Sabdar u_longlong_t, 697*2654012fSReza Sabdar u_longlong_t); 698*2654012fSReza Sabdar extern int ndmpd_local_write(ndmpd_session_t *, 699*2654012fSReza Sabdar char *, 700*2654012fSReza Sabdar ulong_t); 701*2654012fSReza Sabdar extern int ndmpd_remote_write(ndmpd_session_t *, 702*2654012fSReza Sabdar char *, 703*2654012fSReza Sabdar ulong_t); 704*2654012fSReza Sabdar extern int ndmpd_local_read(ndmpd_session_t *, 705*2654012fSReza Sabdar char *, 706*2654012fSReza Sabdar ulong_t); 707*2654012fSReza Sabdar extern int ndmpd_remote_read(ndmpd_session_t *, 708*2654012fSReza Sabdar char *, 709*2654012fSReza Sabdar ulong_t); 710*2654012fSReza Sabdar 711*2654012fSReza Sabdar extern void ndmpd_mover_shut_down(ndmpd_session_t *); 712*2654012fSReza Sabdar extern void ndmpd_mover_error(ndmpd_session_t *, 713*2654012fSReza Sabdar ndmp_mover_halt_reason); 714*2654012fSReza Sabdar extern int ndmpd_local_write_v3(ndmpd_session_t *, 715*2654012fSReza Sabdar char *, 716*2654012fSReza Sabdar ulong_t); 717*2654012fSReza Sabdar extern int ndmpd_local_read_v3(ndmpd_session_t *, 718*2654012fSReza Sabdar char *, 719*2654012fSReza Sabdar ulong_t); 720*2654012fSReza Sabdar extern int ndmpd_remote_read_v3(ndmpd_session_t *, 721*2654012fSReza Sabdar char *, 722*2654012fSReza Sabdar ulong_t); 723*2654012fSReza Sabdar extern int ndmpd_mover_wait_v3(ndmpd_session_t *); 724*2654012fSReza Sabdar extern void ndmpd_write_eom(int); 725*2654012fSReza Sabdar 726*2654012fSReza Sabdar 727*2654012fSReza Sabdar /* 728*2654012fSReza Sabdar * Utility functions from ndmpd_file_history.c 729*2654012fSReza Sabdar */ 730*2654012fSReza Sabdar extern void ndmpd_file_history_init(ndmpd_session_t *); 731*2654012fSReza Sabdar extern void ndmpd_file_history_cleanup(ndmpd_session_t *, 732*2654012fSReza Sabdar boolean_t); 733*2654012fSReza Sabdar extern int ndmpd_file_history_path(lbr_fhlog_call_backs_t *, 734*2654012fSReza Sabdar char *, 735*2654012fSReza Sabdar struct stat64 *, 736*2654012fSReza Sabdar u_longlong_t); 737*2654012fSReza Sabdar extern int ndmpd_file_history_dir(lbr_fhlog_call_backs_t *, 738*2654012fSReza Sabdar char *, 739*2654012fSReza Sabdar struct stat64 *); 740*2654012fSReza Sabdar extern int ndmpd_file_history_node(lbr_fhlog_call_backs_t *, 741*2654012fSReza Sabdar char *, 742*2654012fSReza Sabdar char *, 743*2654012fSReza Sabdar struct stat64 *, 744*2654012fSReza Sabdar u_longlong_t); 745*2654012fSReza Sabdar extern int 746*2654012fSReza Sabdar ndmpd_path_restored(lbr_fhlog_call_backs_t *, 747*2654012fSReza Sabdar char *, 748*2654012fSReza Sabdar struct stat64 *, 749*2654012fSReza Sabdar u_longlong_t); 750*2654012fSReza Sabdar extern int ndmpd_fhpath_v3_cb(lbr_fhlog_call_backs_t *, 751*2654012fSReza Sabdar char *, 752*2654012fSReza Sabdar struct stat64 *, 753*2654012fSReza Sabdar u_longlong_t); 754*2654012fSReza Sabdar extern int ndmpd_fhdir_v3_cb(lbr_fhlog_call_backs_t *, 755*2654012fSReza Sabdar char *, 756*2654012fSReza Sabdar struct stat64 *); 757*2654012fSReza Sabdar extern int ndmpd_fhnode_v3_cb(lbr_fhlog_call_backs_t *, 758*2654012fSReza Sabdar char *, 759*2654012fSReza Sabdar char *, 760*2654012fSReza Sabdar struct stat64 *, 761*2654012fSReza Sabdar u_longlong_t); 762*2654012fSReza Sabdar extern int ndmpd_path_restored_v3(lbr_fhlog_call_backs_t *, 763*2654012fSReza Sabdar char *, 764*2654012fSReza Sabdar struct stat64 *, 765*2654012fSReza Sabdar u_longlong_t); 766*2654012fSReza Sabdar 767*2654012fSReza Sabdar extern int ndmp_send_recovery_stat_v3(ndmpd_module_params_t *, 768*2654012fSReza Sabdar ndmp_lbr_params_t *, 769*2654012fSReza Sabdar int, 770*2654012fSReza Sabdar int); 771*2654012fSReza Sabdar 772*2654012fSReza Sabdar 773*2654012fSReza Sabdar /* 774*2654012fSReza Sabdar * Utility functions from ndmpd_dtime.c 775*2654012fSReza Sabdar */ 776*2654012fSReza Sabdar extern int ndmpd_put_dumptime(char *, int, time_t); 777*2654012fSReza Sabdar extern int ndmpd_get_dumptime(char *, int *, time_t *); 778*2654012fSReza Sabdar extern int ndmpd_append_dumptime(char *, char *, int, time_t); 779*2654012fSReza Sabdar 780*2654012fSReza Sabdar 781*2654012fSReza Sabdar /* 782*2654012fSReza Sabdar * Global variables from ndmpd_tar3.c 783*2654012fSReza Sabdar */ 784*2654012fSReza Sabdar extern char **ndmp_excl_list; 785*2654012fSReza Sabdar 786*2654012fSReza Sabdar 787*2654012fSReza Sabdar /* 788*2654012fSReza Sabdar * Global variables from ndmpd_util.c 789*2654012fSReza Sabdar */ 790*2654012fSReza Sabdar extern int ndmp_force_bk_dirs; 791*2654012fSReza Sabdar extern int ndmp_rbs; 792*2654012fSReza Sabdar extern int ndmp_sbs; 793*2654012fSReza Sabdar extern boolean_t ndmp_dump_path_node; 794*2654012fSReza Sabdar extern boolean_t ndmp_tar_path_node; 795*2654012fSReza Sabdar extern boolean_t ndmp_ignore_ctime; 796*2654012fSReza Sabdar extern boolean_t ndmp_include_lmtime; 797*2654012fSReza Sabdar 798*2654012fSReza Sabdar 799*2654012fSReza Sabdar /* 800*2654012fSReza Sabdar * Utility functions from ndmpd_util.c. 801*2654012fSReza Sabdar */ 802*2654012fSReza Sabdar extern int ndmpd_select(ndmpd_session_t *, 803*2654012fSReza Sabdar boolean_t, 804*2654012fSReza Sabdar ulong_t); 805*2654012fSReza Sabdar 806*2654012fSReza Sabdar extern ndmp_error ndmpd_save_env(ndmpd_session_t *, 807*2654012fSReza Sabdar ndmp_pval *, 808*2654012fSReza Sabdar ulong_t); 809*2654012fSReza Sabdar 810*2654012fSReza Sabdar extern void ndmpd_free_env(ndmpd_session_t *); 811*2654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v2(ndmpd_session_t *, 812*2654012fSReza Sabdar ndmp_name *, 813*2654012fSReza Sabdar ulong_t); 814*2654012fSReza Sabdar 815*2654012fSReza Sabdar extern void ndmpd_free_nlist(ndmpd_session_t *); 816*2654012fSReza Sabdar extern int ndmpd_add_file_handler(ndmpd_session_t *, 817*2654012fSReza Sabdar void *, 818*2654012fSReza Sabdar int, 819*2654012fSReza Sabdar ulong_t, 820*2654012fSReza Sabdar ulong_t, 821*2654012fSReza Sabdar ndmpd_file_handler_func_t *); 822*2654012fSReza Sabdar 823*2654012fSReza Sabdar extern int ndmpd_remove_file_handler(ndmpd_session_t *, 824*2654012fSReza Sabdar int); 825*2654012fSReza Sabdar 826*2654012fSReza Sabdar extern void ndmp_send_reply(ndmp_connection_t *, 827*2654012fSReza Sabdar void *, 828*2654012fSReza Sabdar char *); 829*2654012fSReza Sabdar 830*2654012fSReza Sabdar extern int ndmp_mtioctl(int, int, int); 831*2654012fSReza Sabdar 832*2654012fSReza Sabdar extern u_longlong_t quad_to_long_long(ndmp_u_quad); 833*2654012fSReza Sabdar extern ndmp_u_quad long_long_to_quad(u_longlong_t); 834*2654012fSReza Sabdar 835*2654012fSReza Sabdar extern void ndmp_set_socket_nodelay(int); 836*2654012fSReza Sabdar extern void ndmp_set_socket_snd_buf(int, int); 837*2654012fSReza Sabdar extern void ndmp_set_socket_rcv_buf(int, int); 838*2654012fSReza Sabdar 839*2654012fSReza Sabdar extern long ndmp_buffer_get_size(ndmpd_session_t *); 840*2654012fSReza Sabdar extern int ndmp_lbr_init(ndmpd_session_t *); 841*2654012fSReza Sabdar extern void ndmp_lbr_cleanup(ndmpd_session_t *); 842*2654012fSReza Sabdar 843*2654012fSReza Sabdar extern void nlp_ref_nw(ndmpd_session_t *); 844*2654012fSReza Sabdar extern void nlp_unref_nw(ndmpd_session_t *); 845*2654012fSReza Sabdar extern void nlp_wait_nw(ndmpd_session_t *); 846*2654012fSReza Sabdar extern void nlp_event_nw(ndmpd_session_t *); 847*2654012fSReza Sabdar extern int nlp_event_rv_get(ndmpd_session_t *); 848*2654012fSReza Sabdar extern void nlp_event_rv_set(ndmpd_session_t *, int); 849*2654012fSReza Sabdar extern boolean_t is_buffer_erroneous(tlm_buffer_t *); 850*2654012fSReza Sabdar extern void ndmp_execute_cdb(ndmpd_session_t *, 851*2654012fSReza Sabdar char *, 852*2654012fSReza Sabdar int, 853*2654012fSReza Sabdar int, 854*2654012fSReza Sabdar ndmp_execute_cdb_request *); 855*2654012fSReza Sabdar 856*2654012fSReza Sabdar extern scsi_adapter_t *scsi_get_adapter(int); 857*2654012fSReza Sabdar extern boolean_t is_tape_unit_ready(char *, int); 858*2654012fSReza Sabdar 859*2654012fSReza Sabdar extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int); 860*2654012fSReza Sabdar extern int ndmp_open_list_del(char *, int, int); 861*2654012fSReza Sabdar extern void ndmp_open_list_release(ndmp_connection_t *); 862*2654012fSReza Sabdar 863*2654012fSReza Sabdar extern void ndmp_stop_buffer_worker(ndmpd_session_t *); 864*2654012fSReza Sabdar extern void ndmp_stop_reader_thread(ndmpd_session_t *); 865*2654012fSReza Sabdar extern void ndmp_stop_writer_thread(ndmpd_session_t *); 866*2654012fSReza Sabdar extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *); 867*2654012fSReza Sabdar extern void ndmp_waitfor_op(ndmpd_session_t *); 868*2654012fSReza Sabdar 869*2654012fSReza Sabdar extern char *cctime(time_t *); 870*2654012fSReza Sabdar extern char *ndmp_new_job_name(char *); 871*2654012fSReza Sabdar extern char *ndmpd_mk_temp(char *); 872*2654012fSReza Sabdar extern char *ndmpd_make_bk_dir_path(char *, char *); 873*2654012fSReza Sabdar extern boolean_t ndmp_is_chkpnt_root(char *); 874*2654012fSReza Sabdar extern char **ndmpd_make_exc_list(void); 875*2654012fSReza Sabdar extern void ndmp_sort_nlist_v3(ndmpd_session_t *); 876*2654012fSReza Sabdar extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *); 877*2654012fSReza Sabdar extern int ndmp_write_utf8magic(tlm_cmd_t *); 878*2654012fSReza Sabdar extern int ndmp_tar_writer(ndmpd_session_t *, 879*2654012fSReza Sabdar ndmpd_module_params_t *, 880*2654012fSReza Sabdar tlm_commands_t *); 881*2654012fSReza Sabdar extern void ndmp_wait_for_reader(tlm_commands_t *); 882*2654012fSReza Sabdar extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *, 883*2654012fSReza Sabdar ndmp_name_v3 *, 884*2654012fSReza Sabdar ulong_t); 885*2654012fSReza Sabdar extern void ndmpd_free_nlist_v3(ndmpd_session_t *); 886*2654012fSReza Sabdar extern int ndmp_create_socket(ulong_t *, ushort_t *); 887*2654012fSReza Sabdar extern int ndmp_connect_sock_v3(ulong_t, ushort_t); 888*2654012fSReza Sabdar extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *); 889*2654012fSReza Sabdar extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *); 890*2654012fSReza Sabdar extern char *ndmp_addr2str_v3(ndmp_addr_type); 891*2654012fSReza Sabdar extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type); 892*2654012fSReza Sabdar extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *); 893*2654012fSReza Sabdar extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *, 894*2654012fSReza Sabdar time_t *, char *); 895*2654012fSReza Sabdar extern char *ndmp_get_relative_path(char *, char *); 896*2654012fSReza Sabdar 897*2654012fSReza Sabdar extern boolean_t ndmp_fhinode; 898*2654012fSReza Sabdar extern void ndmp_load_params(void); 899*2654012fSReza Sabdar extern void randomize(unsigned char *, int); 900*2654012fSReza Sabdar 901*2654012fSReza Sabdar 902*2654012fSReza Sabdar /* 903*2654012fSReza Sabdar * Utility functions from ndmpd_tar3.c. 904*2654012fSReza Sabdar */ 905*2654012fSReza Sabdar extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *, 906*2654012fSReza Sabdar ndmpd_module_params_t *); 907*2654012fSReza Sabdar extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *, 908*2654012fSReza Sabdar ndmpd_module_params_t *); 909*2654012fSReza Sabdar extern char *get_bk_path_v3(ndmpd_module_params_t *); 910*2654012fSReza Sabdar 911*2654012fSReza Sabdar /* 912*2654012fSReza Sabdar * door init and fini function from ndmpd_door_serv.c 913*2654012fSReza Sabdar */ 914*2654012fSReza Sabdar extern int ndmp_door_init(void); 915*2654012fSReza Sabdar extern void ndmp_door_fini(void); 916*2654012fSReza Sabdar extern boolean_t ndmp_door_check(void); 917*2654012fSReza Sabdar 918*2654012fSReza Sabdar extern int ndmp_get_max_tok_seq(void); 919*2654012fSReza Sabdar extern boolean_t set_debug_level(boolean_t); 920*2654012fSReza Sabdar extern boolean_t get_debug_level(void); 921*2654012fSReza Sabdar 922*2654012fSReza Sabdar typedef struct ndmp_chkpnt_vol { 923*2654012fSReza Sabdar char cv_vol_name[64]; 924*2654012fSReza Sabdar unsigned int cv_count; 925*2654012fSReza Sabdar void *cv_next; 926*2654012fSReza Sabdar } ndmp_chkpnt_vol_t; 927*2654012fSReza Sabdar 928*2654012fSReza Sabdar extern int get_zfsvolname(char *, int, char *); 929*2654012fSReza Sabdar extern int ndmp_start_check_point(char *, char *); 930*2654012fSReza Sabdar extern int ndmp_release_check_point(char *, char *); 931*2654012fSReza Sabdar extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *); 932*2654012fSReza Sabdar extern void ndmpd_abort_marking_v2(ndmpd_session_t *); 933*2654012fSReza Sabdar extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *); 934*2654012fSReza Sabdar extern ndmp_lbr_params_t *ndmp_get_nlp(void *); 935*2654012fSReza Sabdar 936*2654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter; 937*2654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort; 938*2654012fSReza Sabdar 939*2654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter; 940*2654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort; 941*2654012fSReza Sabdar 942*2654012fSReza Sabdar module_start_func_t ndmpd_tar_backup_starter_v3; 943*2654012fSReza Sabdar module_abort_func_t ndmpd_tar_backup_abort_v3; 944*2654012fSReza Sabdar 945*2654012fSReza Sabdar module_start_func_t ndmpd_tar_restore_starter_v3; 946*2654012fSReza Sabdar module_abort_func_t ndmpd_tar_restore_abort_v3; 947*2654012fSReza Sabdar 948*2654012fSReza Sabdar extern int ndmp_backup_extract_params(ndmpd_session_t *, 949*2654012fSReza Sabdar ndmpd_module_params_t *); 950*2654012fSReza Sabdar extern int ndmp_restore_extract_params(ndmpd_session_t *, 951*2654012fSReza Sabdar ndmpd_module_params_t *); 952*2654012fSReza Sabdar extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *); 953*2654012fSReza Sabdar 954*2654012fSReza Sabdar extern int tape_open(char *, int); 955*2654012fSReza Sabdar 956*2654012fSReza Sabdar extern void ndmp_session_ref(ndmpd_session_t *); 957*2654012fSReza Sabdar extern void ndmp_session_unref(ndmpd_session_t *); 958*2654012fSReza Sabdar 959*2654012fSReza Sabdar void ndmpd_get_file_entry_type(int, ndmp_file_type *); 960*2654012fSReza Sabdar 961*2654012fSReza Sabdar extern int tcp_accept(int, unsigned int *); 962*2654012fSReza Sabdar extern int tcp_get_peer(int, unsigned int *, int *); 963*2654012fSReza Sabdar 964*2654012fSReza Sabdar extern char *gethostaddr(void); 965*2654012fSReza Sabdar extern int tlm_init(void); 966*2654012fSReza Sabdar 967*2654012fSReza Sabdar extern int chkpnt_backup_successful(char *, char *); 968*2654012fSReza Sabdar extern int chkpnt_backup_prepare(char *, char *); 969*2654012fSReza Sabdar 970*2654012fSReza Sabdar extern boolean_t fs_is_chkpntvol(char *); 971*2654012fSReza Sabdar extern boolean_t fs_is_chkpnt_enabled(char *); 972*2654012fSReza Sabdar extern boolean_t fs_is_rdonly(char *); 973*2654012fSReza Sabdar extern boolean_t fs_volexist(char *); 974*2654012fSReza Sabdar extern boolean_t fs_is_valid_logvol(char *); 975*2654012fSReza Sabdar extern boolean_t rootfs_dot_or_dotdot(char *); 976*2654012fSReza Sabdar extern int dp_readdir(DIR *, unsigned long *, char *, 977*2654012fSReza Sabdar int *, unsigned long *); 978*2654012fSReza Sabdar 979*2654012fSReza Sabdar extern void scsi_find_sid_lun(); 980*2654012fSReza Sabdar extern char *sasd_slink_name(); 981*2654012fSReza Sabdar extern int scsi_dev_exists(char *, int, int); 982*2654012fSReza Sabdar extern int scsi_get_devtype(char *, int, int); 983*2654012fSReza Sabdar extern struct open_list *ndmp_open_list_find(char *, int, int); 984*2654012fSReza Sabdar extern int filecopy(char *, char *); 985*2654012fSReza Sabdar 986*2654012fSReza Sabdar extern void ndmp_stop_local_reader(); 987*2654012fSReza Sabdar extern void ndmp_stop_remote_reader(); 988*2654012fSReza Sabdar 989*2654012fSReza Sabdar extern boolean_t match(char *, char *); 990*2654012fSReza Sabdar extern char *trim_whitespace(char *); 991*2654012fSReza Sabdar extern int fs_getstat(char *, struct fs_fhandle *, struct stat64 *, 992*2654012fSReza Sabdar path_list_t *); 993*2654012fSReza Sabdar extern int fs_readdir(struct fs_fhandle *, char *, long *, 994*2654012fSReza Sabdar char *, int *, struct fs_fhandle *, struct stat64 *, 995*2654012fSReza Sabdar path_list_t *); 996*2654012fSReza Sabdar extern int iscreated(ndmp_lbr_params_t *nlp, char *name, tlm_acls_t *tacl, 997*2654012fSReza Sabdar time_t t); 998*2654012fSReza Sabdar 999*2654012fSReza Sabdar extern int sasd_dev_count(void); 1000*2654012fSReza Sabdar extern struct scsi_link *sasd_dev_slink(int); 1001*2654012fSReza Sabdar extern struct sasd_drive *sasd_drive(int); 1002*2654012fSReza Sabdar extern void *ndmp_malloc(size_t size); 1003*2654012fSReza Sabdar 1004*2654012fSReza Sabdar extern ndmp_plugin_t *ndmp_pl; 1005*2654012fSReza Sabdar #endif /* _NDMPD_H */ 1006