ndmpd_common.h revision 2654012f83cec5dc15b61dfe3e4a4915f186e7a6
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Use is subject to license terms.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * BSD 3 Clause License
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar *
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar *
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 * are met:
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions of source code must retain the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar *
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 *
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 *
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 */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Copyright (c) 2007, The Storage Networking Industry Association. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#ifndef _NDMP_COMMON_H
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define _NDMP_COMMON_H
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <thread.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <synch.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include "ndmpd_log.h"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include "ndmp.h"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <unistd.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <sys/types.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <rpc/rpc.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <sys/stat.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <stdio.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <bsm/adt.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <bsm/adt_event.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define XDR_AND_SIZE(func) (bool_t(*)(XDR*, ...))xdr_##func, sizeof (func)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define AUTH_REQUIRED TRUE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define AUTH_NOT_REQUIRED FALSE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define NDMP_EOM_MAGIC "PRCMEOM"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define KILOBYTE 1024
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define INT_MAXCMD 12
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern mutex_t log_lock;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* Connection data structure. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct msg_info {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_header mi_hdr;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar struct ndmp_msg_handler *mi_handler;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *mi_body;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} msg_info_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_connection {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int conn_sock;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar XDR conn_xdrs;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t conn_my_sequence;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar boolean_t conn_authorized;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar boolean_t conn_eof;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar msg_info_t conn_msginfo; /* received request or reply message */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ushort_t conn_version;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *conn_client_data;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar mutex_t conn_lock;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar adt_session_data_t *conn_ah;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} ndmp_connection_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef void (*ndmp_con_handler_func_t) (struct ndmp_connection *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef void ndmp_msg_handler_func_t(struct ndmp_connection *, void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_msg_handler {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_msg_handler_func_t *mh_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar bool_t(*mh_xdr_request) (XDR *xdrs, ...);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int mh_sizeof_request;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar bool_t(*mh_xdr_reply) (XDR *xdrs, ...);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int mh_sizeof_reply;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} ndmp_msg_handler_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmp_handler {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int hd_cnt;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar struct hd_messages {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_message hm_message;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar boolean_t hm_auth_required;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_msg_handler_t hm_msg_v[3];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar } hd_msgs[INT_MAXCMD];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} ndmp_handler_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Function prototypes.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern ndmp_connection_t *ndmp_create_connection(void);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_destroy_connection(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_close(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_connect(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_run(ulong_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_con_handler_func_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_process_requests(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_send_response(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_error,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_send_request(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_message,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_error,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void **);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_send_request_lock(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_message,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_error,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void **);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_free_message(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_get_fd(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_set_client_data(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void *ndmp_get_client_data(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_set_version(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ushort_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern ushort_t ndmp_get_version(ndmp_connection_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void ndmp_set_authorized(ndmp_connection_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar boolean_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * NDMP daemon callback functions.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Called by backup/recover modules.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef char *ndmpd_get_env_func_t(void *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_add_env_func_t(void *, char *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef void *ndmpd_get_name_func_t(void *, ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_dispatch_func_t(void *, boolean_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef void ndmpd_done_func_t(void *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_log_func_t(void *, char *, ...);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_log_func_v3_t(void *, ndmp_log_type, ulong_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *, ...);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define NDMPD_SELECT_MODE_READ 1
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define NDMPD_SELECT_MODE_WRITE 2
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define NDMPD_SELECT_MODE_EXCEPTION 4
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef void ndmpd_file_handler_func_t(void *, int, ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_add_file_handler_func_t(void *, void *, int, ulong_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_file_handler_func_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_remove_file_handler_func_t(void *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_write_func_t(void *, char *, ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_file_history_path_func_t(void *, char *, struct stat64 *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_file_history_dir_func_t(void *, char *, ulong_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_file_history_node_func_t(void *, ulong_t, struct stat64 *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_seek_func_t(void *, u_longlong_t, u_longlong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_read_func_t(void *, char *, ulong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int ndmpd_file_recovered_func_t(void *, char *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmpd_module_stats {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t ms_bytes_processed;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t ms_est_bytes_remaining;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ulong_t ms_est_time_remaining;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} ndmpd_module_stats;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Parameter structure passed to module start function.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct ndmpd_module_params {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *mp_daemon_cookie;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void **mp_module_cookie;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ushort_t mp_protocol_version;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_data_operation mp_operation;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_module_stats *mp_stats;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_get_env_func_t *mp_get_env_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_add_env_func_t *mp_add_env_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_add_env_func_t *mp_set_env_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_get_name_func_t *mp_get_name_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_dispatch_func_t *mp_dispatch_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_done_func_t *mp_done_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_log_func_t *mp_log_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_add_file_handler_func_t *mp_add_file_handler_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_remove_file_handler_func_t *mp_remove_file_handler_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_write_func_t *mp_write_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_file_history_path_func_t *mp_file_history_path_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_file_history_dir_func_t *mp_file_history_dir_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_file_history_node_func_t *mp_file_history_node_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_read_func_t *mp_read_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_seek_func_t *mp_seek_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_file_recovered_func_t *mp_file_recovered_func;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * NDMP V3 params.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmpd_log_func_v3_t *mp_log_func_v3;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} ndmpd_module_params_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_SETENV(m, n, v) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_set_env_func)((m)->mp_daemon_cookie, n, v)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_GETENV(m, e) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_get_env_func)((m)->mp_daemon_cookie, e)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_GETNAME(m, i) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_get_name_func)((m)->mp_daemon_cookie, i)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_LOG(m, ...) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_log_func)((m)->mp_daemon_cookie, __VA_ARGS__)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_READ(m, b, s) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_read_func)((m)->mp_daemon_cookie, b, s)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_WRITE(m, b, s) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_write_func)((m)->mp_daemon_cookie, b, s)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_DONE(m, e) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_done_func)((m)->mp_daemon_cookie, e)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_FILERECOVERD(m, n, e) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_file_recovered_func)((m)->mp_daemon_cookie, n, e)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int ndmp_log_msg_id;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_LOGV3(m, t, ...) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_log_func_v3)((m)->mp_daemon_cookie, (t), \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ++ndmp_log_msg_id, __VA_ARGS__)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define MOD_LOGCONTV3(m, t, ...) \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (*(m)->mp_log_func_v3)((m)->mp_daemon_cookie, \
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (t), ndmp_log_msg_id, __VA_ARGS__)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Module function prototypes.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int module_start_func_t(ndmpd_module_params_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int module_abort_func_t(void *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#endif /* _NDMP_COMMON_H */