xref: /titanic_44/usr/src/cmd/ndmpd/ndmp/ndmpd.h (revision 2654012f83cec5dc15b61dfe3e4a4915f186e7a6)
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