Print this page
NEX-13374 NDMP should be able to backup unmounted ZFS filesystems
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Revert "NEX-5801 Snapshots left over after failed backups"
This reverts commit f182fb95f09036db71fbfc6f0a6b90469b761f21.
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-894 Default location of NDMP log file should be under /var/log
NEX-727 Netbackup Catalog verification hangs waiting for NDMP server
NEX-799 past last file mark returned NDMP_IO_ERR, should be NDMP_EOM_ERR (V4+)
NEX-812 NDMP backup terminate after hit the EOM in Netbackup backup
NEX-559 NDMP cannot backup/restore a file which spans multiple tapes
OS-49 Switch back to illumos' version of wcwidth()
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-426 ndmp_config_get_ext_list failed


  21  *
  22  *      - Neither the name of The Storage Networking Industry Association (SNIA)
  23  *        nor the names of its contributors may be used to endorse or promote
  24  *        products derived from this software without specific prior written
  25  *        permission.
  26  *
  27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37  * POSSIBILITY OF SUCH DAMAGE.
  38  */
  39 /* Copyright (c) 2007, The Storage Networking Industry Association. */
  40 /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
  41 /* Copyright 2014 Nexenta Systems, Inc.  All rights reserved.  */
  42 
  43 #ifndef _NDMPD_H
  44 #define _NDMPD_H
  45 
  46 #include <sys/types.h>
  47 #include <libzfs.h>
  48 #include <ndmpd_door.h>
  49 #include <libndmp.h>
  50 #include "ndmpd_common.h"
  51 #include "tlm_buffers.h"
  52 #include <dirent.h>
  53 #include "ndmpd_prop.h"
  54 #include "traverse.h"
  55 #include <pthread.h>
  56 #include <libndmp.h>
  57 #include <atomic.h>
  58 
  59 #define MAX_RECORD_SIZE (126*512)
  60 #define REMOTE_RECORD_SIZE    (60*KILOBYTE)
  61 #define SCSI_MAX_NAME 32


 153         int bk_clevel;  /* current backup level */
 154         time_t bk_cdate; /* current backup date */
 155         int bk_map;
 156         int bk_dirino;
 157         char *bk_dmpnm;
 158         char **bk_exl; /* exlude list */
 159         char **bk_inc; /* include list */
 160 } ndmp_backup_params_t;
 161 
 162 
 163 typedef struct {
 164         ulong_t rs_nf;  /* number of files to restore */
 165         char *rs_path;
 166         char *rs_bkpath;
 167         int *rs_restored;
 168         int rs_bm;
 169         int rs_lastidx;
 170 } ndmp_restore_params_t;
 171 
 172 /*








 173  * Tar format archiving ops table
 174  */
 175 extern tm_ops_t tm_tar_ops;
 176 
 177 /*
 178  * IS_LBR_BKTYPE shows if the backup type is one of these
 179  * 'F' of 'f': 'Full' backup type.
 180  * 'A' of 'a': 'Archive' backup type.
 181  * 'I' of 'i': 'Incremental' backup type.
 182  * 'D' of 'd': 'Differntial' backup type.
 183  */
 184 #define IS_LBR_BKTYPE(t)        (((t) && strchr("FAID", toupper(t))) ? 1 : 0)
 185 
 186 
 187 /*
 188  * NLP flags.
 189  */
 190 #define NLPF_CHKPNTED_PATH      (1 << 0)
 191 #define NLPF_FH                 (1 << 1)
 192 #define NLPF_DIRECT             (1 << 2)


 216 #define NLP_IGNCTIME(n)         NLP_ISSET(n, NLPF_IGNCTIME)
 217 #define NLP_INCLMTIME(n)        NLP_ISSET(n, NLPF_INCLMTIME)
 218 
 219 /*
 220  * NDMP statistics
 221  */
 222 #define NS_INC(s)       (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s))
 223 #define NS_DEC(s)       (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s))
 224 #define NS_ADD(s, d)    (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \
 225         (uint64_t)d))
 226 #define NS_UPD(s, t)    { \
 227         atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \
 228         atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \
 229         }
 230 
 231 #define NLP_READY       1
 232 
 233 typedef struct ndmp_lbr_params {
 234         struct ndmpd_session *nlp_session;
 235         int nlp_flags;





 236 
 237         ndmp_backup_params_t bk_params;
 238         ndmp_restore_params_t rs_params;
 239 #define nlp_backup_path bk_params.bk_path
 240 #define nlp_llevel      bk_params.bk_llevel
 241 #define nlp_ldate       bk_params.bk_ldate
 242 #define nlp_clevel      bk_params.bk_clevel
 243 #define nlp_tokseq      nlp_clevel
 244 #define nlp_tokdate     nlp_ldate
 245 #define nlp_cdate       bk_params.bk_cdate
 246 #define nlp_bkmap       bk_params.bk_map
 247 #define nlp_bkdirino    bk_params.bk_dirino
 248 #define nlp_dmpnm       bk_params.bk_dmpnm
 249 #define nlp_exl         bk_params.bk_exl
 250 #define nlp_inc         bk_params.bk_inc
 251 
 252 #define nlp_nfiles      rs_params.rs_nf
 253 #define nlp_restore_path        rs_params.rs_path
 254 #define nlp_restore_bk_path     rs_params.rs_bkpath
 255 #define nlp_restored    rs_params.rs_restored


 674 ndmpd_log_func_v3_t ndmpd_api_log_v4;
 675 ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4;
 676 
 677 #ifndef NO_NDMP_API_LOG_PROTOTYPES
 678 ndmpd_log_func_t ndmpd_api_log_v2;
 679 ndmpd_log_func_v3_t ndmpd_api_log_v3;
 680 #endif /* NO_NDMP_API_LOG_PROTOTYPES */
 681 
 682 typedef void ndmpd_func_t(ndmp_connection_t *, void *);
 683 
 684 /*
 685  * pthread call arg parameters
 686  */
 687 typedef struct {
 688         int nw_sock;
 689         long nw_ipaddr;
 690         ndmp_con_handler_func_t nw_con_handler_func;
 691 } ndmpd_worker_arg_t;
 692 
 693 typedef struct {
 694         char *br_jname;
 695         ndmp_lbr_params_t *br_nlp;
 696         tlm_commands_t *br_cmds;
 697         pthread_barrier_t br_barrier;
 698 } backup_reader_arg_t;
 699 
 700 typedef struct {
 701         ndmpd_session_t *tr_session;
 702         ndmpd_module_params_t *tr_mod_params;
 703         tlm_commands_t *tr_cmds;
 704 } ndmp_tar_reader_arg_t;
 705 
 706 typedef struct {
 707         ndmpd_session_t *bs_session;
 708         char *bs_jname;
 709         char *bs_path;
 710 } ndmp_bkup_size_arg_t;
 711 
 712 /*
 713  * Variables from ndmpd_comm.c
 714  */
 715 extern int ndmp_ver;
 716 extern int ndmp_full_restore_path;
 717 extern int ndmp_dar_support;


 718 extern int ndmp_port;
 719 extern ndmp_stat_t ndstat;
 720 
 721 extern void ndmpd_main(void);
 722 extern void connection_handler(ndmp_connection_t *);
 723 extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path,
 724     int dest, char *local_path, int result);
 725 extern void ndmpd_audit_restore(ndmp_connection_t *conn,
 726     char *path, int dest, char *local_path, int result);
 727 extern void ndmpd_audit_connect(ndmp_connection_t *conn,
 728     int result);
 729 extern void ndmpd_audit_disconnect(ndmp_connection_t *conn);
 730 
 731 /* Variables from ndmpd_main.c */
 732 extern  libzfs_handle_t *zlibh;
 733 extern  mutex_t zlib_mtx;
 734 
 735 /*
 736  * Utility from ndmpd_connect.c.
 737  */


 908 extern void ndmp_execute_cdb(ndmpd_session_t *,
 909     char *,
 910     int,
 911     int,
 912     ndmp_execute_cdb_request *);
 913 
 914 extern scsi_adapter_t *scsi_get_adapter(int);
 915 extern boolean_t is_tape_unit_ready(char *, int);
 916 
 917 extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int);
 918 extern int ndmp_open_list_del(char *, int, int);
 919 extern void ndmp_open_list_release(ndmp_connection_t *);
 920 
 921 extern void ndmp_stop_buffer_worker(ndmpd_session_t *);
 922 extern void ndmp_stop_reader_thread(ndmpd_session_t *);
 923 extern void ndmp_stop_writer_thread(ndmpd_session_t *);
 924 extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *);
 925 extern void ndmp_waitfor_op(ndmpd_session_t *);
 926 
 927 extern char *cctime(time_t *);
 928 extern char *ndmp_new_job_name(char *);
 929 extern char *ndmpd_mk_temp(char *);
 930 extern char *ndmpd_make_bk_dir_path(char *, char *);
 931 extern boolean_t ndmp_is_chkpnt_root(char *);
 932 extern char **ndmpd_make_exc_list(void);
 933 extern void ndmp_sort_nlist_v3(ndmpd_session_t *);
 934 extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *);
 935 extern int ndmp_write_utf8magic(tlm_cmd_t *);
 936 extern int ndmp_tar_writer(ndmpd_session_t *,
 937     ndmpd_module_params_t *,
 938     tlm_commands_t *);
 939 extern void ndmp_wait_for_reader(tlm_commands_t *);
 940 extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *,
 941     ndmp_name_v3 *,
 942     ulong_t);
 943 extern void ndmpd_free_nlist_v3(ndmpd_session_t *);
 944 extern int ndmp_create_socket(ulong_t *, ushort_t *);
 945 extern int ndmp_connect_sock_v3(ulong_t, ushort_t);
 946 extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *);
 947 extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *);
 948 extern char *ndmp_addr2str_v3(ndmp_addr_type);
 949 extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type);
 950 extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *);
 951 extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *,
 952     time_t *, char *);
 953 extern char *ndmp_get_relative_path(char *, char *);
 954 
 955 extern boolean_t ndmp_fhinode;
 956 extern void ndmp_load_params(void);
 957 extern void randomize(unsigned char *, int);

 958 
 959 
 960 /*
 961  * Utility functions from ndmpd_tar3.c.
 962  */
 963 extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *,
 964     ndmpd_module_params_t *);
 965 extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *,
 966     ndmpd_module_params_t *);
 967 
 968 /*
 969  * door init and fini function from ndmpd_door_serv.c
 970  */
 971 extern int ndmp_door_init(void);
 972 extern void ndmp_door_fini(void);
 973 extern boolean_t ndmp_door_check(void);
 974 
 975 extern int ndmp_get_max_tok_seq(void);
 976 
 977 extern int get_zfsvolname(char *, int, char *);
 978 extern int ndmp_create_snapshot(char *, char *);
 979 extern int ndmp_remove_snapshot(char *, char *);
 980 extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *);
 981 extern void ndmpd_abort_marking_v2(ndmpd_session_t *);
 982 extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *);
 983 extern ndmp_lbr_params_t *ndmp_get_nlp(void *);

 984 
 985 module_start_func_t ndmpd_tar_backup_starter;
 986 module_abort_func_t ndmpd_tar_backup_abort;
 987 
 988 module_start_func_t ndmpd_tar_restore_starter;
 989 module_abort_func_t ndmpd_tar_restore_abort;
 990 
 991 module_start_func_t ndmpd_tar_backup_starter_v3;
 992 module_abort_func_t ndmpd_tar_backup_abort_v3;
 993 
 994 module_start_func_t ndmpd_tar_restore_starter_v3;
 995 module_abort_func_t ndmpd_tar_restore_abort_v3;
 996 
 997 extern int ndmp_backup_extract_params(ndmpd_session_t *,
 998     ndmpd_module_params_t *);
 999 extern int ndmp_restore_extract_params(ndmpd_session_t *,
1000     ndmpd_module_params_t *);
1001 extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *);
1002 
1003 extern int tape_open(char *, int);
1004 extern int tape_is_at_bot(ndmpd_session_t *);
1005 extern int tape_is_at_bof(ndmpd_session_t *);
1006 extern void fm_dance(ndmpd_session_t *);
1007 
1008 extern void ndmp_session_ref(ndmpd_session_t *);
1009 extern void ndmp_session_unref(ndmpd_session_t *);
1010 
1011 void ndmpd_get_file_entry_type(int, ndmp_file_type *);
1012 
1013 extern int tcp_accept(int, unsigned int *);
1014 extern int tcp_get_peer(int, unsigned int *, int *);
1015 
1016 extern char *gethostaddr(void);
1017 extern char *get_default_nic_addr(void);
1018 extern int tlm_init(void);
1019 
1020 extern int snapshot_create(char *, char *, boolean_t, boolean_t);
1021 extern int snapshot_destroy(char *, char *, boolean_t, boolean_t, int *);
1022 
1023 extern boolean_t fs_is_chkpntvol(char *);
1024 extern boolean_t fs_is_chkpnt_enabled(char *);
1025 extern boolean_t fs_is_rdonly(char *);
1026 extern boolean_t fs_volexist(char *);
1027 extern boolean_t fs_is_valid_logvol(char *);
1028 extern boolean_t rootfs_dot_or_dotdot(char *);
1029 extern int dp_readdir(DIR *, unsigned long *, char *,
1030     int *, unsigned long *);
1031 
1032 extern void scsi_find_sid_lun();
1033 extern char *sasd_slink_name();
1034 extern int scsi_dev_exists(char *, int, int);
1035 extern int scsi_get_devtype(char *, int, int);
1036 extern struct open_list *ndmp_open_list_find(char *, int, int);
1037 extern int filecopy(char *, char *);
1038 
1039 extern void ndmp_stop_local_reader();
1040 extern void ndmp_stop_remote_reader();
1041 




  21  *
  22  *      - Neither the name of The Storage Networking Industry Association (SNIA)
  23  *        nor the names of its contributors may be used to endorse or promote
  24  *        products derived from this software without specific prior written
  25  *        permission.
  26  *
  27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37  * POSSIBILITY OF SUCH DAMAGE.
  38  */
  39 /* Copyright (c) 2007, The Storage Networking Industry Association. */
  40 /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
  41 /* Copyright 2017 Nexenta Systems, Inc.  All rights reserved.  */
  42 
  43 #ifndef _NDMPD_H
  44 #define _NDMPD_H
  45 
  46 #include <sys/types.h>
  47 #include <libzfs.h>
  48 #include <ndmpd_door.h>
  49 #include <libndmp.h>
  50 #include "ndmpd_common.h"
  51 #include "tlm_buffers.h"
  52 #include <dirent.h>
  53 #include "ndmpd_prop.h"
  54 #include "traverse.h"
  55 #include <pthread.h>
  56 #include <libndmp.h>
  57 #include <atomic.h>
  58 
  59 #define MAX_RECORD_SIZE (126*512)
  60 #define REMOTE_RECORD_SIZE    (60*KILOBYTE)
  61 #define SCSI_MAX_NAME 32


 153         int bk_clevel;  /* current backup level */
 154         time_t bk_cdate; /* current backup date */
 155         int bk_map;
 156         int bk_dirino;
 157         char *bk_dmpnm;
 158         char **bk_exl; /* exlude list */
 159         char **bk_inc; /* include list */
 160 } ndmp_backup_params_t;
 161 
 162 
 163 typedef struct {
 164         ulong_t rs_nf;  /* number of files to restore */
 165         char *rs_path;
 166         char *rs_bkpath;
 167         int *rs_restored;
 168         int rs_bm;
 169         int rs_lastidx;
 170 } ndmp_restore_params_t;
 171 
 172 /*
 173  * Used to find latest snapshot in a dataset
 174  */
 175 typedef struct snap_data {
 176         time_t          creation_time;
 177         const char      *last_snapshot;
 178 } snap_data_t;
 179 
 180 /*
 181  * Tar format archiving ops table
 182  */
 183 extern tm_ops_t tm_tar_ops;
 184 
 185 /*
 186  * IS_LBR_BKTYPE shows if the backup type is one of these
 187  * 'F' of 'f': 'Full' backup type.
 188  * 'A' of 'a': 'Archive' backup type.
 189  * 'I' of 'i': 'Incremental' backup type.
 190  * 'D' of 'd': 'Differntial' backup type.
 191  */
 192 #define IS_LBR_BKTYPE(t)        (((t) && strchr("FAID", toupper(t))) ? 1 : 0)
 193 
 194 
 195 /*
 196  * NLP flags.
 197  */
 198 #define NLPF_CHKPNTED_PATH      (1 << 0)
 199 #define NLPF_FH                 (1 << 1)
 200 #define NLPF_DIRECT             (1 << 2)


 224 #define NLP_IGNCTIME(n)         NLP_ISSET(n, NLPF_IGNCTIME)
 225 #define NLP_INCLMTIME(n)        NLP_ISSET(n, NLPF_INCLMTIME)
 226 
 227 /*
 228  * NDMP statistics
 229  */
 230 #define NS_INC(s)       (atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s))
 231 #define NS_DEC(s)       (atomic_dec_32((volatile uint32_t *)&ndstat.ns_##s))
 232 #define NS_ADD(s, d)    (atomic_add_64((volatile uint64_t *)&ndstat.ns_##s, \
 233         (uint64_t)d))
 234 #define NS_UPD(s, t)    { \
 235         atomic_inc_32((volatile uint32_t *)&ndstat.ns_##s); \
 236         atomic_dec_32((volatile uint32_t *)&ndstat.ns_##t); \
 237         }
 238 
 239 #define NLP_READY       1
 240 
 241 typedef struct ndmp_lbr_params {
 242         struct ndmpd_session *nlp_session;
 243         int nlp_flags;
 244         char nlp_job_name[ZFS_MAX_DATASET_NAME_LEN];
 245         char nlp_vol[ZFS_MAX_DATASET_NAME_LEN];
 246         char nlp_snapname[ZFS_MAX_DATASET_NAME_LEN];
 247         char nlp_clonename[ZFS_MAX_DATASET_NAME_LEN];
 248         char nlp_mountpoint[ZFS_MAX_DATASET_NAME_LEN];
 249 
 250         ndmp_backup_params_t bk_params;
 251         ndmp_restore_params_t rs_params;
 252 #define nlp_backup_path bk_params.bk_path
 253 #define nlp_llevel      bk_params.bk_llevel
 254 #define nlp_ldate       bk_params.bk_ldate
 255 #define nlp_clevel      bk_params.bk_clevel
 256 #define nlp_tokseq      nlp_clevel
 257 #define nlp_tokdate     nlp_ldate
 258 #define nlp_cdate       bk_params.bk_cdate
 259 #define nlp_bkmap       bk_params.bk_map
 260 #define nlp_bkdirino    bk_params.bk_dirino
 261 #define nlp_dmpnm       bk_params.bk_dmpnm
 262 #define nlp_exl         bk_params.bk_exl
 263 #define nlp_inc         bk_params.bk_inc
 264 
 265 #define nlp_nfiles      rs_params.rs_nf
 266 #define nlp_restore_path        rs_params.rs_path
 267 #define nlp_restore_bk_path     rs_params.rs_bkpath
 268 #define nlp_restored    rs_params.rs_restored


 687 ndmpd_log_func_v3_t ndmpd_api_log_v4;
 688 ndmpd_file_recovered_func_t ndmpd_api_file_recovered_v4;
 689 
 690 #ifndef NO_NDMP_API_LOG_PROTOTYPES
 691 ndmpd_log_func_t ndmpd_api_log_v2;
 692 ndmpd_log_func_v3_t ndmpd_api_log_v3;
 693 #endif /* NO_NDMP_API_LOG_PROTOTYPES */
 694 
 695 typedef void ndmpd_func_t(ndmp_connection_t *, void *);
 696 
 697 /*
 698  * pthread call arg parameters
 699  */
 700 typedef struct {
 701         int nw_sock;
 702         long nw_ipaddr;
 703         ndmp_con_handler_func_t nw_con_handler_func;
 704 } ndmpd_worker_arg_t;
 705 
 706 typedef struct {

 707         ndmp_lbr_params_t *br_nlp;
 708         tlm_commands_t *br_cmds;
 709         pthread_barrier_t br_barrier;
 710 } backup_reader_arg_t;
 711 
 712 typedef struct {
 713         ndmpd_session_t *tr_session;
 714         ndmpd_module_params_t *tr_mod_params;
 715         tlm_commands_t *tr_cmds;
 716 } ndmp_tar_reader_arg_t;
 717 
 718 typedef struct {
 719         ndmpd_session_t *bs_session;
 720         char *bs_jname;
 721         char *bs_path;
 722 } ndmp_bkup_size_arg_t;
 723 
 724 /*
 725  * Variables from ndmpd_comm.c
 726  */
 727 extern int ndmp_ver;
 728 extern int ndmp_full_restore_path;
 729 extern int ndmp_dar_support;
 730 extern int ndmp_autosync_support;
 731 extern int ndmp_hpr_support;
 732 extern int ndmp_port;
 733 extern ndmp_stat_t ndstat;
 734 
 735 extern void ndmpd_main(void);
 736 extern void connection_handler(ndmp_connection_t *);
 737 extern void ndmpd_audit_backup(ndmp_connection_t *conn, char *path,
 738     int dest, char *local_path, int result);
 739 extern void ndmpd_audit_restore(ndmp_connection_t *conn,
 740     char *path, int dest, char *local_path, int result);
 741 extern void ndmpd_audit_connect(ndmp_connection_t *conn,
 742     int result);
 743 extern void ndmpd_audit_disconnect(ndmp_connection_t *conn);
 744 
 745 /* Variables from ndmpd_main.c */
 746 extern  libzfs_handle_t *zlibh;
 747 extern  mutex_t zlib_mtx;
 748 
 749 /*
 750  * Utility from ndmpd_connect.c.
 751  */


 922 extern void ndmp_execute_cdb(ndmpd_session_t *,
 923     char *,
 924     int,
 925     int,
 926     ndmp_execute_cdb_request *);
 927 
 928 extern scsi_adapter_t *scsi_get_adapter(int);
 929 extern boolean_t is_tape_unit_ready(char *, int);
 930 
 931 extern int ndmp_open_list_add(ndmp_connection_t *, char *, int, int, int);
 932 extern int ndmp_open_list_del(char *, int, int);
 933 extern void ndmp_open_list_release(ndmp_connection_t *);
 934 
 935 extern void ndmp_stop_buffer_worker(ndmpd_session_t *);
 936 extern void ndmp_stop_reader_thread(ndmpd_session_t *);
 937 extern void ndmp_stop_writer_thread(ndmpd_session_t *);
 938 extern void ndmp_free_reader_writer_ipc(ndmpd_session_t *);
 939 extern void ndmp_waitfor_op(ndmpd_session_t *);
 940 
 941 extern char *cctime(time_t *);
 942 extern int ndmp_new_job_name(char *, size_t);
 943 extern char *ndmpd_mk_temp(char *, char *);
 944 extern char *ndmpd_make_bk_dir_path(char *, char *);
 945 extern boolean_t ndmp_is_chkpnt_root(char *);
 946 extern char **ndmpd_make_exc_list(void);
 947 extern void ndmp_sort_nlist_v3(ndmpd_session_t *);
 948 extern int ndmp_get_bk_dir_ino(ndmp_lbr_params_t *);
 949 extern int ndmp_write_utf8magic(tlm_cmd_t *);
 950 extern int ndmp_tar_writer(ndmpd_session_t *,
 951     ndmpd_module_params_t *,
 952     tlm_commands_t *);
 953 extern void ndmp_wait_for_reader(tlm_commands_t *);
 954 extern ndmp_error ndmpd_save_nlist_v3(ndmpd_session_t *,
 955     ndmp_name_v3 *,
 956     ulong_t);
 957 extern void ndmpd_free_nlist_v3(ndmpd_session_t *);
 958 extern int ndmp_create_socket(ulong_t *, ushort_t *);
 959 extern int ndmp_connect_sock_v3(ulong_t, ushort_t);
 960 extern void ndmp_copy_addr_v3(ndmp_addr_v3 *, ndmp_addr_v3 *);
 961 extern void ndmp_copy_addr_v4(ndmp_addr_v4 *, ndmp_addr_v4 *);
 962 extern char *ndmp_addr2str_v3(ndmp_addr_type);
 963 extern boolean_t ndmp_valid_v3addr_type(ndmp_addr_type);
 964 extern boolean_t ndmp_check_utf8magic(tlm_cmd_t *);
 965 extern int ndmp_get_cur_bk_time(ndmp_lbr_params_t *,
 966     time_t *);
 967 extern char *ndmp_get_relative_path(char *, char *);
 968 
 969 extern boolean_t ndmp_fhinode;
 970 extern void ndmp_load_params(void);
 971 extern void randomize(unsigned char *, int);
 972 extern int ndmp_find_latest_autosync(zfs_handle_t *, void *);
 973 
 974 
 975 /*
 976  * Utility functions from ndmpd_tar3.c.
 977  */
 978 extern ndmp_error ndmp_restore_get_params_v3(ndmpd_session_t *,
 979     ndmpd_module_params_t *);
 980 extern ndmp_error ndmp_backup_get_params_v3(ndmpd_session_t *,
 981     ndmpd_module_params_t *);
 982 
 983 /*
 984  * door init and fini function from ndmpd_door_serv.c
 985  */
 986 extern int ndmp_door_init(void);
 987 extern void ndmp_door_fini(void);
 988 extern boolean_t ndmp_door_check(void);
 989 
 990 extern int ndmp_get_max_tok_seq(void);
 991 
 992 extern int get_zfsvolname(char *, int, char *);
 993 extern int ndmp_create_snapshot(char *, char *);
 994 extern int ndmp_remove_snapshot(ndmp_bkup_size_arg_t *);
 995 extern int ndmpd_mark_inodes_v2(ndmpd_session_t *, ndmp_lbr_params_t *);
 996 extern void ndmpd_abort_marking_v2(ndmpd_session_t *);
 997 extern int ndmpd_mark_inodes_v3(ndmpd_session_t *, ndmp_lbr_params_t *);
 998 extern ndmp_lbr_params_t *ndmp_get_nlp(void *);
 999 extern int ndmp_clone_snapshot(ndmp_lbr_params_t *);
1000 
1001 module_start_func_t ndmpd_tar_backup_starter;
1002 module_abort_func_t ndmpd_tar_backup_abort;
1003 
1004 module_start_func_t ndmpd_tar_restore_starter;
1005 module_abort_func_t ndmpd_tar_restore_abort;
1006 
1007 module_start_func_t ndmpd_tar_backup_starter_v3;
1008 module_abort_func_t ndmpd_tar_backup_abort_v3;
1009 
1010 module_start_func_t ndmpd_tar_restore_starter_v3;
1011 module_abort_func_t ndmpd_tar_restore_abort_v3;
1012 
1013 extern int ndmp_backup_extract_params(ndmpd_session_t *,
1014     ndmpd_module_params_t *);
1015 extern int ndmp_restore_extract_params(ndmpd_session_t *,
1016     ndmpd_module_params_t *);
1017 extern int ndmp_tar_reader(ndmp_tar_reader_arg_t *);
1018 
1019 extern int tape_open(char *, int);
1020 extern int tape_is_at_bot(ndmpd_session_t *);
1021 extern int tape_is_at_bof(ndmpd_session_t *);
1022 extern void fm_dance(ndmpd_session_t *);
1023 
1024 extern void ndmp_session_ref(ndmpd_session_t *);
1025 extern void ndmp_session_unref(ndmpd_session_t *);
1026 
1027 void ndmpd_get_file_entry_type(int, ndmp_file_type *);
1028 
1029 extern int tcp_accept(int, unsigned int *);
1030 extern int tcp_get_peer(int, unsigned int *, int *);
1031 
1032 extern char *gethostaddr(void);
1033 extern char *get_default_nic_addr(void);
1034 extern int tlm_init(void);
1035 
1036 extern int backup_dataset_create(ndmp_lbr_params_t *);
1037 extern int backup_dataset_destroy(ndmp_lbr_params_t *);
1038 
1039 extern boolean_t fs_is_chkpntvol(char *);
1040 extern boolean_t fs_is_chkpnt_enabled(char *);
1041 extern boolean_t fs_is_rdonly(char *);
1042 extern boolean_t fs_volexist(char *);
1043 extern boolean_t fs_is_valid_logvol(char *);
1044 extern boolean_t rootfs_dot_or_dotdot(char *);
1045 extern int dp_readdir(DIR *, unsigned long *, char *,
1046     int *, unsigned long *);
1047 
1048 extern void scsi_find_sid_lun();
1049 extern char *sasd_slink_name();
1050 extern int scsi_dev_exists(char *, int, int);
1051 extern int scsi_get_devtype(char *, int, int);
1052 extern struct open_list *ndmp_open_list_find(char *, int, int);
1053 extern int filecopy(char *, char *);
1054 
1055 extern void ndmp_stop_local_reader();
1056 extern void ndmp_stop_remote_reader();
1057