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