xref: /titanic_50/usr/src/lib/libndmp/common/libndmp.h (revision 42ed7838f131b8f58d6c95db1c7e3a6a3e6ea7e4)
12654012fSReza Sabdar /*
2*42ed7838SReza Sabdar  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
32654012fSReza Sabdar  * Use is subject to license terms.
42654012fSReza Sabdar  */
52654012fSReza Sabdar 
62654012fSReza Sabdar /*
72654012fSReza Sabdar  * BSD 3 Clause License
82654012fSReza Sabdar  *
92654012fSReza Sabdar  * Copyright (c) 2007, The Storage Networking Industry Association.
102654012fSReza Sabdar  *
112654012fSReza Sabdar  * Redistribution and use in source and binary forms, with or without
122654012fSReza Sabdar  * modification, are permitted provided that the following conditions
132654012fSReza Sabdar  * are met:
142654012fSReza Sabdar  * 	- Redistributions of source code must retain the above copyright
152654012fSReza Sabdar  *	  notice, this list of conditions and the following disclaimer.
162654012fSReza Sabdar  *
172654012fSReza Sabdar  * 	- Redistributions in binary form must reproduce the above copyright
182654012fSReza Sabdar  *	  notice, this list of conditions and the following disclaimer in
192654012fSReza Sabdar  *	  the documentation and/or other materials provided with the
202654012fSReza Sabdar  *	  distribution.
212654012fSReza Sabdar  *
222654012fSReza Sabdar  *	- Neither the name of The Storage Networking Industry Association (SNIA)
232654012fSReza Sabdar  *	  nor the names of its contributors may be used to endorse or promote
242654012fSReza Sabdar  *	  products derived from this software without specific prior written
252654012fSReza Sabdar  *	  permission.
262654012fSReza Sabdar  *
272654012fSReza Sabdar  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
282654012fSReza Sabdar  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
292654012fSReza Sabdar  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
302654012fSReza Sabdar  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
312654012fSReza Sabdar  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
322654012fSReza Sabdar  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
332654012fSReza Sabdar  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
342654012fSReza Sabdar  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
352654012fSReza Sabdar  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
362654012fSReza Sabdar  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
372654012fSReza Sabdar  * POSSIBILITY OF SUCH DAMAGE.
382654012fSReza Sabdar  */
392654012fSReza Sabdar #ifndef	_LIBNDMP_H
402654012fSReza Sabdar #define	_LIBNDMP_H
412654012fSReza Sabdar 
422654012fSReza Sabdar #include <rpc/types.h>
432654012fSReza Sabdar #include <libscf.h>
442654012fSReza Sabdar #include <libnvpair.h>
452654012fSReza Sabdar 
462654012fSReza Sabdar #ifdef	__cplusplus
472654012fSReza Sabdar extern "C" {
482654012fSReza Sabdar #endif
492654012fSReza Sabdar 
502654012fSReza Sabdar /* NDMP supported versions */
512654012fSReza Sabdar #define	NDMP_V2		2
522654012fSReza Sabdar #define	NDMP_V3		3
532654012fSReza Sabdar #define	NDMP_V4		4
542654012fSReza Sabdar 
552654012fSReza Sabdar /* Device type */
562654012fSReza Sabdar #define	NDMP_SINQ_SEQ_ACCESS_DEVICE	0x01
572654012fSReza Sabdar #define	NDMP_SINQ_TAPE_ROBOT		0x08
582654012fSReza Sabdar 
592654012fSReza Sabdar extern int ndmp_errno;
602654012fSReza Sabdar 
612654012fSReza Sabdar /* NDMP plugin module API */
622654012fSReza Sabdar #define	NDMP_PLUGIN_VERSION	1
632654012fSReza Sabdar 
642654012fSReza Sabdar typedef struct ndmp_context {
652654012fSReza Sabdar 	char *nc_plname;
662654012fSReza Sabdar 	uint_t nc_plversion;
672654012fSReza Sabdar 	void *nc_pldata;
682654012fSReza Sabdar 	void *nc_cmds;
69*42ed7838SReza Sabdar 	void *nc_params;
702654012fSReza Sabdar } ndmp_context_t;
712654012fSReza Sabdar 
722654012fSReza Sabdar typedef struct ndmp_plugin {
732654012fSReza Sabdar 	const char *np_plid;	/* plugin identifier */
742654012fSReza Sabdar 	uint_t np_plversion;	/* plugin version */
752654012fSReza Sabdar 	void *np_pldata;	/* for private use by the plugin */
762654012fSReza Sabdar 
772654012fSReza Sabdar 	/* Plugin entry points */
782654012fSReza Sabdar 	int (*np_pre_backup)(struct ndmp_plugin *, ndmp_context_t *,
792654012fSReza Sabdar 		const char *);
802654012fSReza Sabdar 	int (*np_post_backup)(struct ndmp_plugin *, ndmp_context_t *,
812654012fSReza Sabdar 		int);
822654012fSReza Sabdar 	int (*np_pre_restore)(struct ndmp_plugin *, ndmp_context_t *,
832654012fSReza Sabdar 		const char *, const char *);
842654012fSReza Sabdar 	int (*np_post_restore)(struct ndmp_plugin *, ndmp_context_t *,
852654012fSReza Sabdar 		int);
862654012fSReza Sabdar } ndmp_plugin_t;
872654012fSReza Sabdar 
88*42ed7838SReza Sabdar typedef enum ndmp_log_dma_type {
89*42ed7838SReza Sabdar 	NDMP_LOGD_NORMAL = 0,
90*42ed7838SReza Sabdar 	NDMP_LOGD_DEBUG = 1,
91*42ed7838SReza Sabdar 	NDMP_LOGD_ERROR = 2,
92*42ed7838SReza Sabdar 	NDMP_LOGD_WARNING = 3
93*42ed7838SReza Sabdar } ndmp_log_dma_type_t;
94*42ed7838SReza Sabdar 
952654012fSReza Sabdar /* libndmp error codes */
962654012fSReza Sabdar #define	ENDMP_BASE	2000
972654012fSReza Sabdar enum {
982654012fSReza Sabdar 	ENDMP_DOOR_SRV_TIMEOUT = ENDMP_BASE,
992654012fSReza Sabdar 	ENDMP_INVALID_ARG,
1002654012fSReza Sabdar 	ENDMP_DOOR_SRV_OPERATION,
1012654012fSReza Sabdar 	ENDMP_DOOR_OPEN,
1022654012fSReza Sabdar 	ENDMP_MEM_ALLOC,
1032654012fSReza Sabdar 	ENDMP_DOOR_ENCODE_START,
1042654012fSReza Sabdar 	ENDMP_DOOR_ENCODE_FINISH,
1052654012fSReza Sabdar 	ENDMP_DOOR_DECODE_FINISH,
1062654012fSReza Sabdar 	ENDMP_SMF_PERM,
1072654012fSReza Sabdar 	ENDMP_SMF_INTERNAL,
1082654012fSReza Sabdar 	ENDMP_SMF_PROP,
1092654012fSReza Sabdar 	ENDMP_SMF_PROP_GRP
1102654012fSReza Sabdar };
1112654012fSReza Sabdar 
1122654012fSReza Sabdar /* Tape device open mode */
1132654012fSReza Sabdar typedef enum ndmp_tp_open_mode {
1142654012fSReza Sabdar 	NDMP_TP_READ_MODE,
1152654012fSReza Sabdar 	NDMP_TP_WRITE_MODE,
1162654012fSReza Sabdar 	NDMP_TP_RAW_MODE,
1172654012fSReza Sabdar 	NDMP_TP_RAW1_MODE = 0x7fffffff,
1182654012fSReza Sabdar 	NDMP_TP_RAW2_MODE = NDMP_TP_RAW_MODE
1192654012fSReza Sabdar } ndmp_tp_open_mode_t;
1202654012fSReza Sabdar 
1212654012fSReza Sabdar /* Mover state */
1222654012fSReza Sabdar typedef enum ndmp_mv_state {
1232654012fSReza Sabdar 	NDMP_MV_STATE_IDLE,
1242654012fSReza Sabdar 	NDMP_MV_STATE_LISTEN,
1252654012fSReza Sabdar 	NDMP_MV_STATE_ACTIVE,
1262654012fSReza Sabdar 	NDMP_MV_STATE_PAUSED,
1272654012fSReza Sabdar 	NDMP_MV_STATE_HALTED
1282654012fSReza Sabdar } ndmp_mv_state_t;
1292654012fSReza Sabdar 
1302654012fSReza Sabdar /* Mover mode */
1312654012fSReza Sabdar typedef enum ndmp_mv_mode {
1322654012fSReza Sabdar 	NDMP_MV_MODE_READ,
1332654012fSReza Sabdar 	NDMP_MV_MODE_WRITE,
1342654012fSReza Sabdar 	NDMP_MV_MODE_NOACTION
1352654012fSReza Sabdar } ndmp_mv_mode_t;
1362654012fSReza Sabdar 
1372654012fSReza Sabdar /* Mover pause reson */
1382654012fSReza Sabdar typedef enum ndmp_mv_pause_reason {
1392654012fSReza Sabdar 	NDMP_MV_PAUSE_NA,
1402654012fSReza Sabdar 	NDMP_MV_PAUSE_EOM,
1412654012fSReza Sabdar 	NDMP_MV_PAUSE_EOF,
1422654012fSReza Sabdar 	NDMP_MV_PAUSE_SEEK,
1432654012fSReza Sabdar 	NDMP_MV_PAUSE_MEDIA_ERROR,
1442654012fSReza Sabdar 	NDMP_MV_PAUSE_EOW
1452654012fSReza Sabdar } ndmp_mv_pause_reason_t;
1462654012fSReza Sabdar 
1472654012fSReza Sabdar /* Mover halt reason */
1482654012fSReza Sabdar typedef enum ndmp_mv_halt_reason {
1492654012fSReza Sabdar 	NDMP_MV_HALT_NA,
1502654012fSReza Sabdar 	NDMP_MV_HALT_CONNECT_CLOSED,
1512654012fSReza Sabdar 	NDMP_MV_HALT_ABORTED,
1522654012fSReza Sabdar 	NDMP_MV_HALT_INTERNAL_ERROR,
1532654012fSReza Sabdar 	NDMP_MV_HALT_CONNECT_ERROR,
1542654012fSReza Sabdar 	NDMP_MV_HALT_MEDIA_ERROR
1552654012fSReza Sabdar } ndmp_mv_halt_reason_t;
1562654012fSReza Sabdar 
1572654012fSReza Sabdar /* Address type */
1582654012fSReza Sabdar typedef enum ndmp_ad_type {
1592654012fSReza Sabdar 	NDMP_AD_LOCAL,
1602654012fSReza Sabdar 	NDMP_AD_TCP,
1612654012fSReza Sabdar 	NDMP_AD_FC,
1622654012fSReza Sabdar 	NDMP_AD_IPC
1632654012fSReza Sabdar } ndmp_ad_type_t;
1642654012fSReza Sabdar 
1652654012fSReza Sabdar /* NDMP data operation */
1662654012fSReza Sabdar typedef enum ndmp_dt_operation {
1672654012fSReza Sabdar 	NDMP_DT_OP_NOACTION,
1682654012fSReza Sabdar 	NDMP_DT_OP_BACKUP,
1692654012fSReza Sabdar 	NDMP_DT_OP_RECOVER,
1702654012fSReza Sabdar 	NDMP_DT_OP_RECOVER_FILEHIST
1712654012fSReza Sabdar } ndmp_dt_operation_t;
1722654012fSReza Sabdar 
1732654012fSReza Sabdar /* NDMP data state */
1742654012fSReza Sabdar typedef enum ndmp_dt_state {
1752654012fSReza Sabdar 	NDMP_DT_STATE_IDLE,
1762654012fSReza Sabdar 	NDMP_DT_STATE_ACTIVE,
1772654012fSReza Sabdar 	NDMP_DT_STATE_HALTED,
1782654012fSReza Sabdar 	NDMP_DT_STATE_LISTEN,
1792654012fSReza Sabdar 	NDMP_DT_STATE_CONNECTED
1802654012fSReza Sabdar } ndmp_dt_state_t;
1812654012fSReza Sabdar 
1822654012fSReza Sabdar /* NDMP data halt reason */
1832654012fSReza Sabdar typedef enum ndmp_dt_halt_reason {
1842654012fSReza Sabdar 	NDMP_DT_HALT_NA,
1852654012fSReza Sabdar 	NDMP_DT_HALT_SUCCESSFUL,
1862654012fSReza Sabdar 	NDMP_DT_HALT_ABORTED,
1872654012fSReza Sabdar 	NDMP_DT_HALT_INTERNAL_ERROR,
1882654012fSReza Sabdar 	NDMP_DT_HALT_CONNECT_ERROR
1892654012fSReza Sabdar } ndmp_dt_halt_reason_t;
1902654012fSReza Sabdar 
1912654012fSReza Sabdar /* Device information structure */
1922654012fSReza Sabdar typedef struct ndmp_devinfo {
1932654012fSReza Sabdar 	uint_t nd_dev_type;	/* SCSI device type */
1942654012fSReza Sabdar 	char *nd_name;		/* Device name */
1952654012fSReza Sabdar 	uint_t nd_lun;		/* Lun number */
1962654012fSReza Sabdar 	uint_t nd_sid;		/* Scsi id */
1972654012fSReza Sabdar 	char *nd_vendor;	/* Vendor name */
1982654012fSReza Sabdar 	char *nd_product;	/* Product name */
1992654012fSReza Sabdar 	char *nd_revision;	/* Revision */
2007bc22e45SReza Sabdar 	char *nd_serial;	/* Serial */
2017bc22e45SReza Sabdar 	char *nd_wwn;		/* World wide name */
2022654012fSReza Sabdar } ndmp_devinfo_t;
2032654012fSReza Sabdar 
2042654012fSReza Sabdar /* Scsi device info sturcture */
2052654012fSReza Sabdar typedef struct ndmp_scsi {
2062654012fSReza Sabdar 	int ns_scsi_open;		/* Scsi device open */
2072654012fSReza Sabdar 					/* -1 if not open */
2082654012fSReza Sabdar 	char *ns_adapter_name;		/* Scsi adapter name */
2092654012fSReza Sabdar 	int ns_valid_target_set;	/* Scsi valid target */
2102654012fSReza Sabdar 	/* scsi_id and lun are set only if valid_target_set is set */
2112654012fSReza Sabdar 	int ns_scsi_id;			/* Scsi id */
2122654012fSReza Sabdar 	int ns_lun;			/* Scsi lun */
2132654012fSReza Sabdar } ndmp_scsi_t;
2142654012fSReza Sabdar 
2152654012fSReza Sabdar typedef struct ndmp_tape {
2162654012fSReza Sabdar 	int nt_fd;			/* Tape device file descriptor */
2172654012fSReza Sabdar 	/* The data below is set only if "fd" is not -1 */
2182654012fSReza Sabdar 	ulong_t nt_rec_count;		/* Number of records written */
2192654012fSReza Sabdar 	ndmp_tp_open_mode_t nt_mode;	/* Tape device open mode */
2202654012fSReza Sabdar 	char *nt_dev_name;		/* Device name */
2212654012fSReza Sabdar 	char *nt_adapter_name;		/* Adapter name */
2222654012fSReza Sabdar 	int nt_sid;			/* Scsi id	*/
2232654012fSReza Sabdar 	int nt_lun;			/* Lun number	*/
2242654012fSReza Sabdar } ndmp_tape_t;
2252654012fSReza Sabdar 
2262654012fSReza Sabdar /* NDMP mover info structure */
2272654012fSReza Sabdar typedef struct ndmp_mover {
2282654012fSReza Sabdar 	ndmp_mv_state_t nm_state;		/* Current state */
2292654012fSReza Sabdar 	ndmp_mv_mode_t nm_mode;			/* Current mode */
2302654012fSReza Sabdar 	ndmp_mv_pause_reason_t nm_pause_reason;	/* Current reason */
2312654012fSReza Sabdar 	ndmp_mv_halt_reason_t nm_halt_reason;	/* Current reason */
2322654012fSReza Sabdar 	ulong_t	nm_rec_size;			/* Tape I/O record size */
2332654012fSReza Sabdar 	ulong_t	nm_rec_num;			/* Current record num */
2342654012fSReza Sabdar 	u_longlong_t nm_mov_pos;		/* Current data stream pos */
2352654012fSReza Sabdar 	u_longlong_t nm_window_offset;		/* Valid data window begin */
2362654012fSReza Sabdar 	u_longlong_t nm_window_length;		/* Valid data window length */
2372654012fSReza Sabdar 	int nm_sock;				/* Data conn socket */
2382654012fSReza Sabdar 
2392654012fSReza Sabdar 	/* Filled in V3 and V4 only */
2402654012fSReza Sabdar 	int nm_listen_sock;			/* Data conn listen socket */
2412654012fSReza Sabdar 	ndmp_ad_type_t nm_addr_type;		/* Current address type */
2422654012fSReza Sabdar 	char *nm_tcp_addr;			/* Only if addr_type is tcp */
2432654012fSReza Sabdar } ndmp_mover_t;
2442654012fSReza Sabdar 
2452654012fSReza Sabdar typedef struct ndmp_dt_name {
2462654012fSReza Sabdar 	char *nn_name;
2472654012fSReza Sabdar 	char *nn_dest;
2482654012fSReza Sabdar } ndmp_dt_name_t;
2492654012fSReza Sabdar 
2502654012fSReza Sabdar /* NDMP name/value pair structure */
2512654012fSReza Sabdar typedef struct ndmp_dt_pval {
2522654012fSReza Sabdar 	char *np_name;
2532654012fSReza Sabdar 	char *np_value;
2542654012fSReza Sabdar } ndmp_dt_pval_t;
2552654012fSReza Sabdar 
2562654012fSReza Sabdar typedef struct ndmp_dt_name_v3 {
2572654012fSReza Sabdar 	char *nn3_opath;
2582654012fSReza Sabdar 	char *nn3_dpath;
2592654012fSReza Sabdar 	u_longlong_t nn3_node;
2602654012fSReza Sabdar 	u_longlong_t nn3_fh_info;
2612654012fSReza Sabdar } ndmp_dt_name_v3_t;
2622654012fSReza Sabdar 
2632654012fSReza Sabdar typedef struct ndmp_dt_v3 {
2642654012fSReza Sabdar 	int dv3_listen_sock;
2652654012fSReza Sabdar 	u_longlong_t dv3_bytes_processed;
2662654012fSReza Sabdar 	ndmp_dt_name_v3_t *dv3_nlist;		/* V3 recover file list */
2672654012fSReza Sabdar } ndmp_dt_v3_t;
2682654012fSReza Sabdar 
2692654012fSReza Sabdar /* NDMP data structure */
2702654012fSReza Sabdar typedef struct ndmp_data {
2712654012fSReza Sabdar 	ndmp_dt_operation_t nd_oper;		/* Current operation */
2722654012fSReza Sabdar 	ndmp_dt_state_t nd_state;		/* Current state */
2732654012fSReza Sabdar 	ndmp_dt_halt_reason_t nd_halt_reason;	/* Current reason */
2742654012fSReza Sabdar 	int nd_sock;				/* Listen and data socket */
2752654012fSReza Sabdar 	ndmp_ad_type_t nd_addr_type;		/* Current address type */
2762654012fSReza Sabdar 	char *nd_tcp_addr;			/* Only if addr_type is tcp */
2772654012fSReza Sabdar 	int nd_abort;				/* Abort operation flag */
2782654012fSReza Sabdar 						/* 0 = No, otherwise Yes */
2792654012fSReza Sabdar 	u_longlong_t nd_read_offset;		/* Data read seek offset */
2802654012fSReza Sabdar 	u_longlong_t nd_read_length;		/* Data read length */
2812654012fSReza Sabdar 	u_longlong_t nd_total_size;		/* Backup data size */
2822654012fSReza Sabdar 	ulong_t nd_env_len;			/* Environment length */
2832654012fSReza Sabdar 	ndmp_dt_pval_t *nd_env;			/* Environment from backup */
2842654012fSReza Sabdar 						/* or recover request */
2852654012fSReza Sabdar 	ulong_t nld_nlist_len;			/* Recover file list length */
2862654012fSReza Sabdar 	union {
2872654012fSReza Sabdar 		/* Filled in V2 */
2882654012fSReza Sabdar 		ndmp_dt_name_t *nld_nlist;	/* Recover file list */
2892654012fSReza Sabdar 		/* Filled in V3 */
2902654012fSReza Sabdar 		ndmp_dt_v3_t nld_dt_v3;		/* V3 data */
2912654012fSReza Sabdar 	} nd_nlist;
2922654012fSReza Sabdar } ndmp_data_t;
2932654012fSReza Sabdar 
2942654012fSReza Sabdar /* NDMP session information  */
2952654012fSReza Sabdar typedef struct ndmp_session_info {
2962654012fSReza Sabdar 	int nsi_sid;		/* Session id   */
2972654012fSReza Sabdar 	int nsi_pver;		/* NDMP protocol version */
2982654012fSReza Sabdar 	int nsi_auth;		/* Authorized ? 0="no", else "yes" */
2992654012fSReza Sabdar 	int nsi_eof;		/* Connection EOF flag */
3002654012fSReza Sabdar 				/* 0="no", else "yes" */
3012654012fSReza Sabdar 	char *nsi_cl_addr;	/* Client address */
3022654012fSReza Sabdar 	ndmp_scsi_t nsi_scsi;	/* Scsi device information */
3032654012fSReza Sabdar 	ndmp_tape_t nsi_tape;	/* Tape device information */
3042654012fSReza Sabdar 	ndmp_mover_t nsi_mover;	/* Mover information */
3052654012fSReza Sabdar 	ndmp_data_t nsi_data;	/* Data information */
3062654012fSReza Sabdar } ndmp_session_info_t;
3072654012fSReza Sabdar 
3082654012fSReza Sabdar /* Stats data */
3092654012fSReza Sabdar typedef struct ndmp_stat {
3102654012fSReza Sabdar 	int ns_trun;		/* Number of worker threads running */
3112654012fSReza Sabdar 	int ns_twait;		/* Number of blocked worker threads */
3122654012fSReza Sabdar 	int ns_nbk;		/* Number of backups operations running */
3132654012fSReza Sabdar 	int ns_nrs;		/* Number of restores operations running */
3142654012fSReza Sabdar 	int ns_rfile;		/* Number of files being read */
3152654012fSReza Sabdar 	int ns_wfile;		/* Number of files being written */
3162654012fSReza Sabdar 	uint64_t ns_rdisk;	/* Number of disk blocks being read */
3172654012fSReza Sabdar 	uint64_t ns_wdisk;	/* Number of disk blocks being written */
3182654012fSReza Sabdar 	uint64_t ns_rtape;	/* Number of tape blocks being read */
3192654012fSReza Sabdar 	uint64_t ns_wtape;	/* Number of tape blocks being written */
3202654012fSReza Sabdar } ndmp_stat_t;
3212654012fSReza Sabdar 
3222654012fSReza Sabdar /* Common encode/decode functions used by door clients/servers.  */
3232654012fSReza Sabdar typedef struct ndmp_door_ctx {
3242654012fSReza Sabdar 	char *ptr;
3252654012fSReza Sabdar 	char *start_ptr;
3262654012fSReza Sabdar 	char *end_ptr;
3272654012fSReza Sabdar 	int status;
3282654012fSReza Sabdar } ndmp_door_ctx_t;
3292654012fSReza Sabdar 
3302654012fSReza Sabdar extern int ndmp_get_devinfo(ndmp_devinfo_t **, size_t *);
3312654012fSReza Sabdar extern void ndmp_get_devinfo_free(ndmp_devinfo_t *, size_t);
3322654012fSReza Sabdar extern int ndmp_get_dbglevel(void);
3332654012fSReza Sabdar extern int ndmp_get_session_info(ndmp_session_info_t **, size_t *);
3342654012fSReza Sabdar extern void ndmp_get_session_info_free(ndmp_session_info_t *, size_t);
3352654012fSReza Sabdar extern int ndmp_get_stats(ndmp_stat_t *);
3362654012fSReza Sabdar extern int ndmp_terminate_session(int);
3372654012fSReza Sabdar extern int ndmp_set_dbglevel(int);
3382654012fSReza Sabdar extern const char *ndmp_strerror(int);
3392654012fSReza Sabdar extern int ndmp_door_status(void);
3402654012fSReza Sabdar extern int ndmp_get_prop(char *, char **);
3412654012fSReza Sabdar extern int ndmp_set_prop(char *, char *);
3422654012fSReza Sabdar extern int ndmp_service_refresh(void);
3432654012fSReza Sabdar extern char *ndmp_base64_encode(char *);
3442654012fSReza Sabdar extern char *ndmp_base64_decode(char *);
3452654012fSReza Sabdar extern ndmp_door_ctx_t *ndmp_door_decode_start(char *, int);
3462654012fSReza Sabdar extern int ndmp_door_decode_finish(ndmp_door_ctx_t *);
3472654012fSReza Sabdar extern ndmp_door_ctx_t *ndmp_door_encode_start(char *, int);
3482654012fSReza Sabdar extern int ndmp_door_encode_finish(ndmp_door_ctx_t *, unsigned int *);
3492654012fSReza Sabdar extern int32_t ndmp_door_get_int32(ndmp_door_ctx_t *);
3502654012fSReza Sabdar extern uint32_t ndmp_door_get_uint32(ndmp_door_ctx_t *);
3512654012fSReza Sabdar extern char *ndmp_door_get_string(ndmp_door_ctx_t *);
3522654012fSReza Sabdar extern void ndmp_door_put_int32(ndmp_door_ctx_t *, int32_t);
3532654012fSReza Sabdar extern void ndmp_door_put_uint32(ndmp_door_ctx_t *, uint32_t);
3542654012fSReza Sabdar extern void ndmp_door_put_string(ndmp_door_ctx_t *, char *);
3552654012fSReza Sabdar extern void ndmp_door_free_string(char *);
3562654012fSReza Sabdar extern int64_t ndmp_door_get_int64(ndmp_door_ctx_t *);
3572654012fSReza Sabdar extern uint64_t ndmp_door_get_uint64(ndmp_door_ctx_t *);
3582654012fSReza Sabdar extern void ndmp_door_put_uint64(ndmp_door_ctx_t *, uint64_t);
3592654012fSReza Sabdar extern void ndmp_door_put_short(ndmp_door_ctx_t *, short);
3602654012fSReza Sabdar extern short ndmp_door_get_short(ndmp_door_ctx_t *);
3612654012fSReza Sabdar extern void ndmp_door_put_ushort(ndmp_door_ctx_t *, unsigned short);
3622654012fSReza Sabdar extern unsigned short ndmp_door_get_ushort(ndmp_door_ctx_t *);
3632654012fSReza Sabdar extern void ndmp_door_put_buf(ndmp_door_ctx_t *, unsigned char *, int);
3642654012fSReza Sabdar extern int ndmp_door_get_buf(ndmp_door_ctx_t *, unsigned char *, int);
3652654012fSReza Sabdar 
3662654012fSReza Sabdar extern int ndmp_include_zfs(ndmp_context_t *, const char *);
3672654012fSReza Sabdar extern int ndmp_iter_zfs(ndmp_context_t *, int (*)(nvlist_t *, void *), void *);
3682654012fSReza Sabdar extern uint_t ndmp_context_get_version(ndmp_context_t *);
3692654012fSReza Sabdar extern void ndmp_context_set_specific(ndmp_context_t *, void *);
3702654012fSReza Sabdar extern void *ndmp_context_get_specific(ndmp_context_t *);
371*42ed7838SReza Sabdar void ndmp_log_dma(ndmp_context_t *, ndmp_log_dma_type_t, const char *, ...);
3722654012fSReza Sabdar 
3732654012fSReza Sabdar #ifdef	__cplusplus
3742654012fSReza Sabdar }
3752654012fSReza Sabdar #endif
3762654012fSReza Sabdar 
3772654012fSReza Sabdar #endif /* _LIBNDMP_H */
378