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
|