libndmp.h revision 42ed7838f131b8f58d6c95db1c7e3a6a3e6ea7e4
42ed7838f131b8f58d6c95db1c7e3a6a3e6ea7e4Reza Sabdar * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Use is subject to license terms.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * BSD 3 Clause License
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Redistribution and use in source and binary forms, with or without
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * modification, are permitted provided that the following conditions
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions of source code must retain the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions in binary form must reproduce the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the documentation and/or other materials provided with the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * distribution.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * nor the names of its contributors may be used to endorse or promote
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * products derived from this software without specific prior written
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * permission.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * POSSIBILITY OF SUCH DAMAGE.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP supported versions */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Device type */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP plugin module API */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_context {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_plugin {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *np_pldata; /* for private use by the plugin */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* Plugin entry points */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*np_pre_backup)(struct ndmp_plugin *, ndmp_context_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar const char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*np_post_backup)(struct ndmp_plugin *, ndmp_context_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*np_pre_restore)(struct ndmp_plugin *, ndmp_context_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar const char *, const char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*np_post_restore)(struct ndmp_plugin *, ndmp_context_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* libndmp error codes */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Tape device open mode */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Mover state */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Mover mode */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Mover pause reson */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Mover halt reason */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Address type */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP data operation */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP data state */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP data halt reason */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Device information structure */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_devinfo {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Scsi device info sturcture */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_scsi {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* -1 if not open */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_valid_target_set; /* Scsi valid target */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* scsi_id and lun are set only if valid_target_set is set */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_tape {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* The data below is set only if "fd" is not -1 */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t nt_rec_count; /* Number of records written */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_tp_open_mode_t nt_mode; /* Tape device open mode */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP mover info structure */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_mover {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_mv_pause_reason_t nm_pause_reason; /* Current reason */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_mv_halt_reason_t nm_halt_reason; /* Current reason */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nm_mov_pos; /* Current data stream pos */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nm_window_offset; /* Valid data window begin */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nm_window_length; /* Valid data window length */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* Filled in V3 and V4 only */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int nm_listen_sock; /* Data conn listen socket */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_ad_type_t nm_addr_type; /* Current address type */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *nm_tcp_addr; /* Only if addr_type is tcp */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_dt_name {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP name/value pair structure */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_dt_pval {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_dt_name_v3 {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_dt_v3 {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_dt_name_v3_t *dv3_nlist; /* V3 recover file list */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP data structure */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_data {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_dt_operation_t nd_oper; /* Current operation */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_dt_halt_reason_t nd_halt_reason; /* Current reason */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_ad_type_t nd_addr_type; /* Current address type */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *nd_tcp_addr; /* Only if addr_type is tcp */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* 0 = No, otherwise Yes */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nd_read_offset; /* Data read seek offset */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nd_read_length; /* Data read length */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t nd_total_size; /* Backup data size */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_dt_pval_t *nd_env; /* Environment from backup */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* or recover request */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t nld_nlist_len; /* Recover file list length */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* Filled in V2 */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_dt_name_t *nld_nlist; /* Recover file list */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* Filled in V3 */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* NDMP session information */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_session_info {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int nsi_auth; /* Authorized ? 0="no", else "yes" */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* 0="no", else "yes" */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_scsi_t nsi_scsi; /* Scsi device information */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_tape_t nsi_tape; /* Tape device information */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Stats data */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_stat {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_trun; /* Number of worker threads running */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_twait; /* Number of blocked worker threads */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_nbk; /* Number of backups operations running */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_nrs; /* Number of restores operations running */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int ns_wfile; /* Number of files being written */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint64_t ns_rdisk; /* Number of disk blocks being read */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint64_t ns_wdisk; /* Number of disk blocks being written */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint64_t ns_rtape; /* Number of tape blocks being read */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint64_t ns_wtape; /* Number of tape blocks being written */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Common encode/decode functions used by door clients/servers. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_door_ctx {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_get_devinfo(ndmp_devinfo_t **, size_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_get_devinfo_free(ndmp_devinfo_t *, size_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_get_dbglevel(void);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_get_session_info(ndmp_session_info_t **, size_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_get_session_info_free(ndmp_session_info_t *, size_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_set_dbglevel(int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern const char *ndmp_strerror(int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_door_status(void);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_get_prop(char *, char **);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_set_prop(char *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_service_refresh(void);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *ndmp_base64_encode(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *ndmp_base64_decode(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern ndmp_door_ctx_t *ndmp_door_decode_start(char *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_door_decode_finish(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern ndmp_door_ctx_t *ndmp_door_encode_start(char *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_door_encode_finish(ndmp_door_ctx_t *, unsigned int *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int32_t ndmp_door_get_int32(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern uint32_t ndmp_door_get_uint32(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *ndmp_door_get_string(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_int32(ndmp_door_ctx_t *, int32_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_uint32(ndmp_door_ctx_t *, uint32_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_string(ndmp_door_ctx_t *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_free_string(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int64_t ndmp_door_get_int64(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern uint64_t ndmp_door_get_uint64(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_uint64(ndmp_door_ctx_t *, uint64_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_short(ndmp_door_ctx_t *, short);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern short ndmp_door_get_short(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_ushort(ndmp_door_ctx_t *, unsigned short);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern unsigned short ndmp_door_get_ushort(ndmp_door_ctx_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_door_put_buf(ndmp_door_ctx_t *, unsigned char *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_door_get_buf(ndmp_door_ctx_t *, unsigned char *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_include_zfs(ndmp_context_t *, const char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_iter_zfs(ndmp_context_t *, int (*)(nvlist_t *, void *), void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern uint_t ndmp_context_get_version(ndmp_context_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_context_set_specific(ndmp_context_t *, void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void *ndmp_context_get_specific(ndmp_context_t *);
42ed7838f131b8f58d6c95db1c7e3a6a3e6ea7e4Reza Sabdarvoid ndmp_log_dma(ndmp_context_t *, ndmp_log_dma_type_t, const char *, ...);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#endif /* _LIBNDMP_H */