xref: /titanic_50/usr/src/lib/libndmp/common/libndmp.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 #ifndef	_LIBNDMP_H
40*2654012fSReza Sabdar #define	_LIBNDMP_H
41*2654012fSReza Sabdar 
42*2654012fSReza Sabdar #include <rpc/types.h>
43*2654012fSReza Sabdar #include <libscf.h>
44*2654012fSReza Sabdar #include <libnvpair.h>
45*2654012fSReza Sabdar 
46*2654012fSReza Sabdar #ifdef	__cplusplus
47*2654012fSReza Sabdar extern "C" {
48*2654012fSReza Sabdar #endif
49*2654012fSReza Sabdar 
50*2654012fSReza Sabdar /* NDMP supported versions */
51*2654012fSReza Sabdar #define	NDMP_V2		2
52*2654012fSReza Sabdar #define	NDMP_V3		3
53*2654012fSReza Sabdar #define	NDMP_V4		4
54*2654012fSReza Sabdar 
55*2654012fSReza Sabdar /* Device type */
56*2654012fSReza Sabdar #define	NDMP_SINQ_SEQ_ACCESS_DEVICE	0x01
57*2654012fSReza Sabdar #define	NDMP_SINQ_TAPE_ROBOT		0x08
58*2654012fSReza Sabdar 
59*2654012fSReza Sabdar extern int ndmp_errno;
60*2654012fSReza Sabdar 
61*2654012fSReza Sabdar /* NDMP plugin module API */
62*2654012fSReza Sabdar #define	NDMP_PLUGIN_VERSION	1
63*2654012fSReza Sabdar 
64*2654012fSReza Sabdar typedef struct ndmp_context {
65*2654012fSReza Sabdar 	char *nc_plname;
66*2654012fSReza Sabdar 	uint_t nc_plversion;
67*2654012fSReza Sabdar 	void *nc_pldata;
68*2654012fSReza Sabdar 	void *nc_cmds;
69*2654012fSReza Sabdar } ndmp_context_t;
70*2654012fSReza Sabdar 
71*2654012fSReza Sabdar typedef struct ndmp_plugin {
72*2654012fSReza Sabdar 	const char *np_plid;	/* plugin identifier */
73*2654012fSReza Sabdar 	uint_t np_plversion;	/* plugin version */
74*2654012fSReza Sabdar 	void *np_pldata;	/* for private use by the plugin */
75*2654012fSReza Sabdar 
76*2654012fSReza Sabdar 	/* Plugin entry points */
77*2654012fSReza Sabdar 	int (*np_pre_backup)(struct ndmp_plugin *, ndmp_context_t *,
78*2654012fSReza Sabdar 		const char *);
79*2654012fSReza Sabdar 	int (*np_post_backup)(struct ndmp_plugin *, ndmp_context_t *,
80*2654012fSReza Sabdar 		int);
81*2654012fSReza Sabdar 	int (*np_pre_restore)(struct ndmp_plugin *, ndmp_context_t *,
82*2654012fSReza Sabdar 		const char *, const char *);
83*2654012fSReza Sabdar 	int (*np_post_restore)(struct ndmp_plugin *, ndmp_context_t *,
84*2654012fSReza Sabdar 		int);
85*2654012fSReza Sabdar } ndmp_plugin_t;
86*2654012fSReza Sabdar 
87*2654012fSReza Sabdar /* libndmp error codes */
88*2654012fSReza Sabdar #define	ENDMP_BASE	2000
89*2654012fSReza Sabdar enum {
90*2654012fSReza Sabdar 	ENDMP_DOOR_SRV_TIMEOUT = ENDMP_BASE,
91*2654012fSReza Sabdar 	ENDMP_INVALID_ARG,
92*2654012fSReza Sabdar 	ENDMP_DOOR_SRV_OPERATION,
93*2654012fSReza Sabdar 	ENDMP_DOOR_OPEN,
94*2654012fSReza Sabdar 	ENDMP_MEM_ALLOC,
95*2654012fSReza Sabdar 	ENDMP_DOOR_ENCODE_START,
96*2654012fSReza Sabdar 	ENDMP_DOOR_ENCODE_FINISH,
97*2654012fSReza Sabdar 	ENDMP_DOOR_DECODE_FINISH,
98*2654012fSReza Sabdar 	ENDMP_SMF_PERM,
99*2654012fSReza Sabdar 	ENDMP_SMF_INTERNAL,
100*2654012fSReza Sabdar 	ENDMP_SMF_PROP,
101*2654012fSReza Sabdar 	ENDMP_SMF_PROP_GRP
102*2654012fSReza Sabdar };
103*2654012fSReza Sabdar 
104*2654012fSReza Sabdar /* Tape device open mode */
105*2654012fSReza Sabdar typedef enum ndmp_tp_open_mode {
106*2654012fSReza Sabdar 	NDMP_TP_READ_MODE,
107*2654012fSReza Sabdar 	NDMP_TP_WRITE_MODE,
108*2654012fSReza Sabdar 	NDMP_TP_RAW_MODE,
109*2654012fSReza Sabdar 	NDMP_TP_RAW1_MODE = 0x7fffffff,
110*2654012fSReza Sabdar 	NDMP_TP_RAW2_MODE = NDMP_TP_RAW_MODE
111*2654012fSReza Sabdar } ndmp_tp_open_mode_t;
112*2654012fSReza Sabdar 
113*2654012fSReza Sabdar /* Mover state */
114*2654012fSReza Sabdar typedef enum ndmp_mv_state {
115*2654012fSReza Sabdar 	NDMP_MV_STATE_IDLE,
116*2654012fSReza Sabdar 	NDMP_MV_STATE_LISTEN,
117*2654012fSReza Sabdar 	NDMP_MV_STATE_ACTIVE,
118*2654012fSReza Sabdar 	NDMP_MV_STATE_PAUSED,
119*2654012fSReza Sabdar 	NDMP_MV_STATE_HALTED
120*2654012fSReza Sabdar } ndmp_mv_state_t;
121*2654012fSReza Sabdar 
122*2654012fSReza Sabdar /* Mover mode */
123*2654012fSReza Sabdar typedef enum ndmp_mv_mode {
124*2654012fSReza Sabdar 	NDMP_MV_MODE_READ,
125*2654012fSReza Sabdar 	NDMP_MV_MODE_WRITE,
126*2654012fSReza Sabdar 	NDMP_MV_MODE_NOACTION
127*2654012fSReza Sabdar } ndmp_mv_mode_t;
128*2654012fSReza Sabdar 
129*2654012fSReza Sabdar /* Mover pause reson */
130*2654012fSReza Sabdar typedef enum ndmp_mv_pause_reason {
131*2654012fSReza Sabdar 	NDMP_MV_PAUSE_NA,
132*2654012fSReza Sabdar 	NDMP_MV_PAUSE_EOM,
133*2654012fSReza Sabdar 	NDMP_MV_PAUSE_EOF,
134*2654012fSReza Sabdar 	NDMP_MV_PAUSE_SEEK,
135*2654012fSReza Sabdar 	NDMP_MV_PAUSE_MEDIA_ERROR,
136*2654012fSReza Sabdar 	NDMP_MV_PAUSE_EOW
137*2654012fSReza Sabdar } ndmp_mv_pause_reason_t;
138*2654012fSReza Sabdar 
139*2654012fSReza Sabdar /* Mover halt reason */
140*2654012fSReza Sabdar typedef enum ndmp_mv_halt_reason {
141*2654012fSReza Sabdar 	NDMP_MV_HALT_NA,
142*2654012fSReza Sabdar 	NDMP_MV_HALT_CONNECT_CLOSED,
143*2654012fSReza Sabdar 	NDMP_MV_HALT_ABORTED,
144*2654012fSReza Sabdar 	NDMP_MV_HALT_INTERNAL_ERROR,
145*2654012fSReza Sabdar 	NDMP_MV_HALT_CONNECT_ERROR,
146*2654012fSReza Sabdar 	NDMP_MV_HALT_MEDIA_ERROR
147*2654012fSReza Sabdar } ndmp_mv_halt_reason_t;
148*2654012fSReza Sabdar 
149*2654012fSReza Sabdar /* Address type */
150*2654012fSReza Sabdar typedef enum ndmp_ad_type {
151*2654012fSReza Sabdar 	NDMP_AD_LOCAL,
152*2654012fSReza Sabdar 	NDMP_AD_TCP,
153*2654012fSReza Sabdar 	NDMP_AD_FC,
154*2654012fSReza Sabdar 	NDMP_AD_IPC
155*2654012fSReza Sabdar } ndmp_ad_type_t;
156*2654012fSReza Sabdar 
157*2654012fSReza Sabdar /* NDMP data operation */
158*2654012fSReza Sabdar typedef enum ndmp_dt_operation {
159*2654012fSReza Sabdar 	NDMP_DT_OP_NOACTION,
160*2654012fSReza Sabdar 	NDMP_DT_OP_BACKUP,
161*2654012fSReza Sabdar 	NDMP_DT_OP_RECOVER,
162*2654012fSReza Sabdar 	NDMP_DT_OP_RECOVER_FILEHIST
163*2654012fSReza Sabdar } ndmp_dt_operation_t;
164*2654012fSReza Sabdar 
165*2654012fSReza Sabdar /* NDMP data state */
166*2654012fSReza Sabdar typedef enum ndmp_dt_state {
167*2654012fSReza Sabdar 	NDMP_DT_STATE_IDLE,
168*2654012fSReza Sabdar 	NDMP_DT_STATE_ACTIVE,
169*2654012fSReza Sabdar 	NDMP_DT_STATE_HALTED,
170*2654012fSReza Sabdar 	NDMP_DT_STATE_LISTEN,
171*2654012fSReza Sabdar 	NDMP_DT_STATE_CONNECTED
172*2654012fSReza Sabdar } ndmp_dt_state_t;
173*2654012fSReza Sabdar 
174*2654012fSReza Sabdar /* NDMP data halt reason */
175*2654012fSReza Sabdar typedef enum ndmp_dt_halt_reason {
176*2654012fSReza Sabdar 	NDMP_DT_HALT_NA,
177*2654012fSReza Sabdar 	NDMP_DT_HALT_SUCCESSFUL,
178*2654012fSReza Sabdar 	NDMP_DT_HALT_ABORTED,
179*2654012fSReza Sabdar 	NDMP_DT_HALT_INTERNAL_ERROR,
180*2654012fSReza Sabdar 	NDMP_DT_HALT_CONNECT_ERROR
181*2654012fSReza Sabdar } ndmp_dt_halt_reason_t;
182*2654012fSReza Sabdar 
183*2654012fSReza Sabdar /* Device information structure */
184*2654012fSReza Sabdar typedef struct ndmp_devinfo {
185*2654012fSReza Sabdar 	uint_t nd_dev_type;	/* SCSI device type */
186*2654012fSReza Sabdar 	char *nd_name;		/* Device name */
187*2654012fSReza Sabdar 	uint_t nd_lun;		/* Lun number */
188*2654012fSReza Sabdar 	uint_t nd_sid;		/* Scsi id */
189*2654012fSReza Sabdar 	char *nd_vendor;	/* Vendor name */
190*2654012fSReza Sabdar 	char *nd_product;	/* Product name */
191*2654012fSReza Sabdar 	char *nd_revision;	/* Revision */
192*2654012fSReza Sabdar } ndmp_devinfo_t;
193*2654012fSReza Sabdar 
194*2654012fSReza Sabdar /* Scsi device info sturcture */
195*2654012fSReza Sabdar typedef struct ndmp_scsi {
196*2654012fSReza Sabdar 	int ns_scsi_open;		/* Scsi device open */
197*2654012fSReza Sabdar 					/* -1 if not open */
198*2654012fSReza Sabdar 	char *ns_adapter_name;		/* Scsi adapter name */
199*2654012fSReza Sabdar 	int ns_valid_target_set;	/* Scsi valid target */
200*2654012fSReza Sabdar 	/* scsi_id and lun are set only if valid_target_set is set */
201*2654012fSReza Sabdar 	int ns_scsi_id;			/* Scsi id */
202*2654012fSReza Sabdar 	int ns_lun;			/* Scsi lun */
203*2654012fSReza Sabdar } ndmp_scsi_t;
204*2654012fSReza Sabdar 
205*2654012fSReza Sabdar typedef struct ndmp_tape {
206*2654012fSReza Sabdar 	int nt_fd;			/* Tape device file descriptor */
207*2654012fSReza Sabdar 	/* The data below is set only if "fd" is not -1 */
208*2654012fSReza Sabdar 	ulong_t nt_rec_count;		/* Number of records written */
209*2654012fSReza Sabdar 	ndmp_tp_open_mode_t nt_mode;	/* Tape device open mode */
210*2654012fSReza Sabdar 	char *nt_dev_name;		/* Device name */
211*2654012fSReza Sabdar 	char *nt_adapter_name;		/* Adapter name */
212*2654012fSReza Sabdar 	int nt_sid;			/* Scsi id	*/
213*2654012fSReza Sabdar 	int nt_lun;			/* Lun number	*/
214*2654012fSReza Sabdar } ndmp_tape_t;
215*2654012fSReza Sabdar 
216*2654012fSReza Sabdar /* NDMP mover info structure */
217*2654012fSReza Sabdar typedef struct ndmp_mover {
218*2654012fSReza Sabdar 	ndmp_mv_state_t nm_state;		/* Current state */
219*2654012fSReza Sabdar 	ndmp_mv_mode_t nm_mode;			/* Current mode */
220*2654012fSReza Sabdar 	ndmp_mv_pause_reason_t nm_pause_reason;	/* Current reason */
221*2654012fSReza Sabdar 	ndmp_mv_halt_reason_t nm_halt_reason;	/* Current reason */
222*2654012fSReza Sabdar 	ulong_t	nm_rec_size;			/* Tape I/O record size */
223*2654012fSReza Sabdar 	ulong_t	nm_rec_num;			/* Current record num */
224*2654012fSReza Sabdar 	u_longlong_t nm_mov_pos;		/* Current data stream pos */
225*2654012fSReza Sabdar 	u_longlong_t nm_window_offset;		/* Valid data window begin */
226*2654012fSReza Sabdar 	u_longlong_t nm_window_length;		/* Valid data window length */
227*2654012fSReza Sabdar 	int nm_sock;				/* Data conn socket */
228*2654012fSReza Sabdar 
229*2654012fSReza Sabdar 	/* Filled in V3 and V4 only */
230*2654012fSReza Sabdar 	int nm_listen_sock;			/* Data conn listen socket */
231*2654012fSReza Sabdar 	ndmp_ad_type_t nm_addr_type;		/* Current address type */
232*2654012fSReza Sabdar 	char *nm_tcp_addr;			/* Only if addr_type is tcp */
233*2654012fSReza Sabdar } ndmp_mover_t;
234*2654012fSReza Sabdar 
235*2654012fSReza Sabdar typedef struct ndmp_dt_name {
236*2654012fSReza Sabdar 	char *nn_name;
237*2654012fSReza Sabdar 	char *nn_dest;
238*2654012fSReza Sabdar } ndmp_dt_name_t;
239*2654012fSReza Sabdar 
240*2654012fSReza Sabdar /* NDMP name/value pair structure */
241*2654012fSReza Sabdar typedef struct ndmp_dt_pval {
242*2654012fSReza Sabdar 	char *np_name;
243*2654012fSReza Sabdar 	char *np_value;
244*2654012fSReza Sabdar } ndmp_dt_pval_t;
245*2654012fSReza Sabdar 
246*2654012fSReza Sabdar typedef struct ndmp_dt_name_v3 {
247*2654012fSReza Sabdar 	char *nn3_opath;
248*2654012fSReza Sabdar 	char *nn3_dpath;
249*2654012fSReza Sabdar 	u_longlong_t nn3_node;
250*2654012fSReza Sabdar 	u_longlong_t nn3_fh_info;
251*2654012fSReza Sabdar } ndmp_dt_name_v3_t;
252*2654012fSReza Sabdar 
253*2654012fSReza Sabdar typedef struct ndmp_dt_v3 {
254*2654012fSReza Sabdar 	int dv3_listen_sock;
255*2654012fSReza Sabdar 	u_longlong_t dv3_bytes_processed;
256*2654012fSReza Sabdar 	ndmp_dt_name_v3_t *dv3_nlist;		/* V3 recover file list */
257*2654012fSReza Sabdar } ndmp_dt_v3_t;
258*2654012fSReza Sabdar 
259*2654012fSReza Sabdar /* NDMP data structure */
260*2654012fSReza Sabdar typedef struct ndmp_data {
261*2654012fSReza Sabdar 	ndmp_dt_operation_t nd_oper;		/* Current operation */
262*2654012fSReza Sabdar 	ndmp_dt_state_t nd_state;		/* Current state */
263*2654012fSReza Sabdar 	ndmp_dt_halt_reason_t nd_halt_reason;	/* Current reason */
264*2654012fSReza Sabdar 	int nd_sock;				/* Listen and data socket */
265*2654012fSReza Sabdar 	ndmp_ad_type_t nd_addr_type;		/* Current address type */
266*2654012fSReza Sabdar 	char *nd_tcp_addr;			/* Only if addr_type is tcp */
267*2654012fSReza Sabdar 	int nd_abort;				/* Abort operation flag */
268*2654012fSReza Sabdar 						/* 0 = No, otherwise Yes */
269*2654012fSReza Sabdar 	u_longlong_t nd_read_offset;		/* Data read seek offset */
270*2654012fSReza Sabdar 	u_longlong_t nd_read_length;		/* Data read length */
271*2654012fSReza Sabdar 	u_longlong_t nd_total_size;		/* Backup data size */
272*2654012fSReza Sabdar 	ulong_t nd_env_len;			/* Environment length */
273*2654012fSReza Sabdar 	ndmp_dt_pval_t *nd_env;			/* Environment from backup */
274*2654012fSReza Sabdar 						/* or recover request */
275*2654012fSReza Sabdar 	ulong_t nld_nlist_len;			/* Recover file list length */
276*2654012fSReza Sabdar 	union {
277*2654012fSReza Sabdar 		/* Filled in V2 */
278*2654012fSReza Sabdar 		ndmp_dt_name_t *nld_nlist;	/* Recover file list */
279*2654012fSReza Sabdar 		/* Filled in V3 */
280*2654012fSReza Sabdar 		ndmp_dt_v3_t nld_dt_v3;		/* V3 data */
281*2654012fSReza Sabdar 	} nd_nlist;
282*2654012fSReza Sabdar } ndmp_data_t;
283*2654012fSReza Sabdar 
284*2654012fSReza Sabdar /* NDMP session information  */
285*2654012fSReza Sabdar typedef struct ndmp_session_info {
286*2654012fSReza Sabdar 	int nsi_sid;		/* Session id   */
287*2654012fSReza Sabdar 	int nsi_pver;		/* NDMP protocol version */
288*2654012fSReza Sabdar 	int nsi_auth;		/* Authorized ? 0="no", else "yes" */
289*2654012fSReza Sabdar 	int nsi_eof;		/* Connection EOF flag */
290*2654012fSReza Sabdar 				/* 0="no", else "yes" */
291*2654012fSReza Sabdar 	char *nsi_cl_addr;	/* Client address */
292*2654012fSReza Sabdar 	ndmp_scsi_t nsi_scsi;	/* Scsi device information */
293*2654012fSReza Sabdar 	ndmp_tape_t nsi_tape;	/* Tape device information */
294*2654012fSReza Sabdar 	ndmp_mover_t nsi_mover;	/* Mover information */
295*2654012fSReza Sabdar 	ndmp_data_t nsi_data;	/* Data information */
296*2654012fSReza Sabdar } ndmp_session_info_t;
297*2654012fSReza Sabdar 
298*2654012fSReza Sabdar /* Stats data */
299*2654012fSReza Sabdar typedef struct ndmp_stat {
300*2654012fSReza Sabdar 	int ns_trun;		/* Number of worker threads running */
301*2654012fSReza Sabdar 	int ns_twait;		/* Number of blocked worker threads */
302*2654012fSReza Sabdar 	int ns_nbk;		/* Number of backups operations running */
303*2654012fSReza Sabdar 	int ns_nrs;		/* Number of restores operations running */
304*2654012fSReza Sabdar 	int ns_rfile;		/* Number of files being read */
305*2654012fSReza Sabdar 	int ns_wfile;		/* Number of files being written */
306*2654012fSReza Sabdar 	uint64_t ns_rdisk;	/* Number of disk blocks being read */
307*2654012fSReza Sabdar 	uint64_t ns_wdisk;	/* Number of disk blocks being written */
308*2654012fSReza Sabdar 	uint64_t ns_rtape;	/* Number of tape blocks being read */
309*2654012fSReza Sabdar 	uint64_t ns_wtape;	/* Number of tape blocks being written */
310*2654012fSReza Sabdar } ndmp_stat_t;
311*2654012fSReza Sabdar 
312*2654012fSReza Sabdar /* Common encode/decode functions used by door clients/servers.  */
313*2654012fSReza Sabdar typedef struct ndmp_door_ctx {
314*2654012fSReza Sabdar 	char *ptr;
315*2654012fSReza Sabdar 	char *start_ptr;
316*2654012fSReza Sabdar 	char *end_ptr;
317*2654012fSReza Sabdar 	int status;
318*2654012fSReza Sabdar } ndmp_door_ctx_t;
319*2654012fSReza Sabdar 
320*2654012fSReza Sabdar extern int ndmp_get_devinfo(ndmp_devinfo_t **, size_t *);
321*2654012fSReza Sabdar extern void ndmp_get_devinfo_free(ndmp_devinfo_t *, size_t);
322*2654012fSReza Sabdar extern int ndmp_get_dbglevel(void);
323*2654012fSReza Sabdar extern int ndmp_get_session_info(ndmp_session_info_t **, size_t *);
324*2654012fSReza Sabdar extern void ndmp_get_session_info_free(ndmp_session_info_t *, size_t);
325*2654012fSReza Sabdar extern int ndmp_get_stats(ndmp_stat_t *);
326*2654012fSReza Sabdar extern int ndmp_terminate_session(int);
327*2654012fSReza Sabdar extern int ndmp_set_dbglevel(int);
328*2654012fSReza Sabdar extern const char *ndmp_strerror(int);
329*2654012fSReza Sabdar extern int ndmp_door_status(void);
330*2654012fSReza Sabdar extern int ndmp_get_prop(char *, char **);
331*2654012fSReza Sabdar extern int ndmp_set_prop(char *, char *);
332*2654012fSReza Sabdar extern int ndmp_service_refresh(void);
333*2654012fSReza Sabdar extern char *ndmp_base64_encode(char *);
334*2654012fSReza Sabdar extern char *ndmp_base64_decode(char *);
335*2654012fSReza Sabdar extern ndmp_door_ctx_t *ndmp_door_decode_start(char *, int);
336*2654012fSReza Sabdar extern int ndmp_door_decode_finish(ndmp_door_ctx_t *);
337*2654012fSReza Sabdar extern ndmp_door_ctx_t *ndmp_door_encode_start(char *, int);
338*2654012fSReza Sabdar extern int ndmp_door_encode_finish(ndmp_door_ctx_t *, unsigned int *);
339*2654012fSReza Sabdar extern int32_t ndmp_door_get_int32(ndmp_door_ctx_t *);
340*2654012fSReza Sabdar extern uint32_t ndmp_door_get_uint32(ndmp_door_ctx_t *);
341*2654012fSReza Sabdar extern char *ndmp_door_get_string(ndmp_door_ctx_t *);
342*2654012fSReza Sabdar extern void ndmp_door_put_int32(ndmp_door_ctx_t *, int32_t);
343*2654012fSReza Sabdar extern void ndmp_door_put_uint32(ndmp_door_ctx_t *, uint32_t);
344*2654012fSReza Sabdar extern void ndmp_door_put_string(ndmp_door_ctx_t *, char *);
345*2654012fSReza Sabdar extern void ndmp_door_free_string(char *);
346*2654012fSReza Sabdar extern int64_t ndmp_door_get_int64(ndmp_door_ctx_t *);
347*2654012fSReza Sabdar extern uint64_t ndmp_door_get_uint64(ndmp_door_ctx_t *);
348*2654012fSReza Sabdar extern void ndmp_door_put_uint64(ndmp_door_ctx_t *, uint64_t);
349*2654012fSReza Sabdar extern void ndmp_door_put_short(ndmp_door_ctx_t *, short);
350*2654012fSReza Sabdar extern short ndmp_door_get_short(ndmp_door_ctx_t *);
351*2654012fSReza Sabdar extern void ndmp_door_put_ushort(ndmp_door_ctx_t *, unsigned short);
352*2654012fSReza Sabdar extern unsigned short ndmp_door_get_ushort(ndmp_door_ctx_t *);
353*2654012fSReza Sabdar extern void ndmp_door_put_buf(ndmp_door_ctx_t *, unsigned char *, int);
354*2654012fSReza Sabdar extern int ndmp_door_get_buf(ndmp_door_ctx_t *, unsigned char *, int);
355*2654012fSReza Sabdar 
356*2654012fSReza Sabdar extern int ndmp_include_zfs(ndmp_context_t *, const char *);
357*2654012fSReza Sabdar extern int ndmp_iter_zfs(ndmp_context_t *, int (*)(nvlist_t *, void *), void *);
358*2654012fSReza Sabdar extern uint_t ndmp_context_get_version(ndmp_context_t *);
359*2654012fSReza Sabdar extern void ndmp_context_set_specific(ndmp_context_t *, void *);
360*2654012fSReza Sabdar extern void *ndmp_context_get_specific(ndmp_context_t *);
361*2654012fSReza Sabdar 
362*2654012fSReza Sabdar #ifdef	__cplusplus
363*2654012fSReza Sabdar }
364*2654012fSReza Sabdar #endif
365*2654012fSReza Sabdar 
366*2654012fSReza Sabdar #endif /* _LIBNDMP_H */
367