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/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * This defines structures used to pass information between threads
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * for both local-backup and NDMP.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar *
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#ifndef _TLM_BUFFERS_H_
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define _TLM_BUFFERS_H_
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <sys/types.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <stdlib.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <limits.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <sys/stat.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include <thread.h>
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#include "tlm.h"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#ifndef RECORDSIZE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RECORDSIZE 512
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#endif /* !RECORDSIZE */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define DOTDOT_DIR ".."
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define IS_DOTDOT(s) (strcmp(s, DOTDOT_DIR) == 0)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define SLASH '/'
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define NDMP_MAX_SELECTIONS 64
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * List of files/directories to be excluded from backup list.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define EXCL_PROC "/proc"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define EXCL_TMP "/tmp"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct tlm_buffer {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *tb_buffer_data; /* area to be used for I/O */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar long tb_buffer_size; /* number of valid bytes in the buffer */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar long tb_buffer_spot; /* current location in the I/O buffer */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t tb_seek_spot; /* for BACKUP */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* where in the file this buffer stops. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* this is used for the Multi Volume */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* Header record. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t tb_file_size; /* for BACKUP */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* how much of the file is left. */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar long tb_full : 1,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tb_eot : 1,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tb_eof : 1;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tb_errno; /* I/O error values */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_buffer_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Flags for tlm_buffers.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define TLM_BUF_IN_READY 0x00000001
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define TLM_BUF_OUT_READY 0x00000002
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct tlm_buffers {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tbs_ref; /* number of threads using this */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar short tbs_buffer_in; /* buffer to be filled */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar short tbs_buffer_out; /* buffer to be emptied */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* these are indexes into tlm_buffers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar mutex_t tbs_mtx;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar cond_t tbs_in_cv;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar cond_t tbs_out_cv;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint32_t tbs_flags;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar long tbs_data_transfer_size; /* max size of read/write buffer */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t tbs_offset;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_buffer_t tbs_buffer[TLM_TAPE_BUFFERS];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_buffers_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct tlm_cmd {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tc_ref; /* number of threads using this */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar mutex_t tc_mtx;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar cond_t tc_cv;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar uint32_t tc_flags;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tc_reader; /* writer to reader */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tc_writer; /* reader to writer */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char tc_file_name[TLM_MAX_PATH_NAME]; /* name of last file */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar /* for restore */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_buffers_t *tc_buffers; /* reader-writer speedup buffers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_cmd_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct tlm_commands {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tcs_reader; /* commands to all readers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tcs_writer; /* commands to all writers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tcs_reader_count; /* number of active readers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tcs_writer_count; /* number of active writers */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int tcs_error; /* worker errors */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char tcs_message[TLM_LINE_SIZE]; /* worker message back to user */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_cmd_t *tcs_command; /* IPC area between read-write */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_commands_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct tlm_job_stats {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char js_job_name[TLM_MAX_BACKUP_JOB_NAME];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t js_bytes_total; /* tape bytes in or out so far */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t js_bytes_in_file; /* remaining data in a file */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t js_files_so_far; /* files backed up so far */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar longlong_t js_files_total; /* number of files to be backed up */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int js_errors;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar time_t js_start_time; /* start time (GMT time) */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar time_t js_start_ltime; /* start time (local time) */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar time_t js_stop_time; /* stop time (local time) */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar time_t js_chkpnt_time; /* checkpoint creation (GMT time) */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *js_callbacks;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_job_stats_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarstruct full_dir_info {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar fs_fhandle_t fd_dir_fh;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char fd_dir_name[TLM_MAX_PATH_NAME];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar};
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * For more info please refer to
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * "Functional Specification Document: Usgin new LBR engine in NDMP",
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Revision: 0.2
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Document No.: 101438.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the "File history of backup" section
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct lbr_fhlog_call_backs {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *fh_cookie;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*fh_logpname)();
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*fh_log_dir)();
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int (*fh_log_node)();
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} lbr_fhlog_call_backs_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct bk_selector {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *bs_cookie;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int bs_level;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int bs_ldate;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar boolean_t (*bs_fn)(struct bk_selector *bks, struct stat64 *s);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} bk_selector_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Call back structure to create new name for objects at restore time.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarstruct rs_name_maker;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef char *(*rsm_fp_t)(struct rs_name_maker *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *buf,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar int pos,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *path);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarstruct rs_name_maker {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar rsm_fp_t rn_fp;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar void *rn_nlp;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar};
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * RSFLG_OVR_*: overwriting policies. Refer to LBR FSD for more info.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * RSFLG_MATCH_WCARD: should wildcards be supported in the selection list.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * RSFLG_IGNORE_CASE: should the compare be case-insensetive. NDMP needs
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * case-sensetive name comparison.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RSFLG_OVR_ALWAYS 0x00000001
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RSFLG_OVR_NEVER 0x00000002
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RSFLG_OVR_UPDATE 0x00000004
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RSFLG_MATCH_WCARD 0x00000008
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define RSFLG_IGNORE_CASE 0x00000010
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/*
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Different cases where two paths can match with each other.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Parent means that the current path, is parent of an entry in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the selection list.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Child means that the current path, is child of an entry in the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * selection list.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define PM_NONE 0
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define PM_EXACT 1
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define PM_PARENT 2
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#define PM_CHILD 3
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_job_stats_t *tlm_new_job_stats(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_job_stats_t *tlm_ref_job_stats(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_un_ref_job_stats(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern boolean_t tlm_is_excluded(char *, char *, char **);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *tlm_build_snapshot_name(char *, char *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *tlm_remove_checkpoint(char *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_buffers_t *tlm_allocate_buffers(boolean_t, long);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_buffer_t *tlm_buffer_advance_in_idx(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_buffer_t *tlm_buffer_advance_out_idx(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_buffer_t *tlm_buffer_in_buf(tlm_buffers_t *, int *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_buffer_t *tlm_buffer_out_buf(tlm_buffers_t *, int *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_mark_empty(tlm_buffer_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_release_in_buf(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_release_out_buf(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_in_buf_wait(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_out_buf_wait(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_in_buf_timed_wait(tlm_buffers_t *, unsigned);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_buffer_out_buf_timed_wait(tlm_buffers_t *, unsigned);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *tlm_get_write_buffer(long, long *, tlm_buffers_t *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *tlm_get_read_buffer(int, int *, tlm_buffers_t *, int *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_unget_read_buffer(tlm_buffers_t *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_unget_write_buffer(tlm_buffers_t *, int);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_release_buffers(tlm_buffers_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_cmd_t *tlm_create_reader_writer_ipc(boolean_t, long);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_release_reader_writer_ipc(tlm_cmd_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_cmd_wait(tlm_cmd_t *, uint32_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_cmd_signal(tlm_cmd_t *, uint32_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int (*path_hist_func_t)(lbr_fhlog_call_backs_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar struct stat64 *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int (*dir_hist_func_t)(lbr_fhlog_call_backs_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar struct stat64 *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef int (*node_hist_func_t)(lbr_fhlog_call_backs_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar struct stat64 *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar u_longlong_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarlbr_fhlog_call_backs_t *lbrlog_callbacks_init(void *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar path_hist_func_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar dir_hist_func_t,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar node_hist_func_t);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartypedef struct {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_commands_t *ba_commands;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_cmd_t *ba_cmd;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *ba_job;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *ba_dir;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *ba_sels[NDMP_MAX_SELECTIONS];
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar pthread_barrier_t ba_barrier;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar} tlm_backup_restore_arg_t;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void lbrlog_callbacks_done(lbr_fhlog_call_backs_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern boolean_t tlm_cat_path(char *, char *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern char *trim_name(char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern struct full_dir_info *dup_dir_info(struct full_dir_info *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void write_tar_eof(tlm_cmd_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int tlm_get_chkpnt_time(char *, int, time_t *, char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern struct full_dir_info *tlm_new_dir_info(fs_fhandle_t *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar char *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern void tlm_release_list(char **);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern longlong_t tlm_get_data_offset(tlm_cmd_t *);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern int tlm_tarhdr_size(void);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar#endif /* _TLM_BUFFERS_H_ */