xref: /onnv-gate/usr/src/cmd/ndmpd/include/tlm_buffers.h (revision 7917:5c4442486198)
1*7917SReza.Sabdar@Sun.COM /*
2*7917SReza.Sabdar@Sun.COM  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3*7917SReza.Sabdar@Sun.COM  * Use is subject to license terms.
4*7917SReza.Sabdar@Sun.COM  */
5*7917SReza.Sabdar@Sun.COM 
6*7917SReza.Sabdar@Sun.COM /*
7*7917SReza.Sabdar@Sun.COM  * BSD 3 Clause License
8*7917SReza.Sabdar@Sun.COM  *
9*7917SReza.Sabdar@Sun.COM  * Copyright (c) 2007, The Storage Networking Industry Association.
10*7917SReza.Sabdar@Sun.COM  *
11*7917SReza.Sabdar@Sun.COM  * Redistribution and use in source and binary forms, with or without
12*7917SReza.Sabdar@Sun.COM  * modification, are permitted provided that the following conditions
13*7917SReza.Sabdar@Sun.COM  * are met:
14*7917SReza.Sabdar@Sun.COM  * 	- Redistributions of source code must retain the above copyright
15*7917SReza.Sabdar@Sun.COM  *	  notice, this list of conditions and the following disclaimer.
16*7917SReza.Sabdar@Sun.COM  *
17*7917SReza.Sabdar@Sun.COM  * 	- Redistributions in binary form must reproduce the above copyright
18*7917SReza.Sabdar@Sun.COM  *	  notice, this list of conditions and the following disclaimer in
19*7917SReza.Sabdar@Sun.COM  *	  the documentation and/or other materials provided with the
20*7917SReza.Sabdar@Sun.COM  *	  distribution.
21*7917SReza.Sabdar@Sun.COM  *
22*7917SReza.Sabdar@Sun.COM  *	- Neither the name of The Storage Networking Industry Association (SNIA)
23*7917SReza.Sabdar@Sun.COM  *	  nor the names of its contributors may be used to endorse or promote
24*7917SReza.Sabdar@Sun.COM  *	  products derived from this software without specific prior written
25*7917SReza.Sabdar@Sun.COM  *	  permission.
26*7917SReza.Sabdar@Sun.COM  *
27*7917SReza.Sabdar@Sun.COM  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28*7917SReza.Sabdar@Sun.COM  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29*7917SReza.Sabdar@Sun.COM  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30*7917SReza.Sabdar@Sun.COM  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31*7917SReza.Sabdar@Sun.COM  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32*7917SReza.Sabdar@Sun.COM  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33*7917SReza.Sabdar@Sun.COM  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34*7917SReza.Sabdar@Sun.COM  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35*7917SReza.Sabdar@Sun.COM  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36*7917SReza.Sabdar@Sun.COM  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37*7917SReza.Sabdar@Sun.COM  * POSSIBILITY OF SUCH DAMAGE.
38*7917SReza.Sabdar@Sun.COM  */
39*7917SReza.Sabdar@Sun.COM /*
40*7917SReza.Sabdar@Sun.COM  * This defines structures used to pass information between threads
41*7917SReza.Sabdar@Sun.COM  * for both local-backup and NDMP.
42*7917SReza.Sabdar@Sun.COM  *
43*7917SReza.Sabdar@Sun.COM  */
44*7917SReza.Sabdar@Sun.COM 
45*7917SReza.Sabdar@Sun.COM #ifndef	_TLM_BUFFERS_H_
46*7917SReza.Sabdar@Sun.COM #define	_TLM_BUFFERS_H_
47*7917SReza.Sabdar@Sun.COM 
48*7917SReza.Sabdar@Sun.COM #include <sys/types.h>
49*7917SReza.Sabdar@Sun.COM #include <stdlib.h>
50*7917SReza.Sabdar@Sun.COM #include <limits.h>
51*7917SReza.Sabdar@Sun.COM #include <sys/stat.h>
52*7917SReza.Sabdar@Sun.COM #include <thread.h>
53*7917SReza.Sabdar@Sun.COM #include "tlm.h"
54*7917SReza.Sabdar@Sun.COM 
55*7917SReza.Sabdar@Sun.COM #ifndef RECORDSIZE
56*7917SReza.Sabdar@Sun.COM #define	RECORDSIZE	512
57*7917SReza.Sabdar@Sun.COM #endif /* !RECORDSIZE */
58*7917SReza.Sabdar@Sun.COM 
59*7917SReza.Sabdar@Sun.COM #define	DOTDOT_DIR	".."
60*7917SReza.Sabdar@Sun.COM #define	IS_DOTDOT(s)	(strcmp(s, DOTDOT_DIR) == 0)
61*7917SReza.Sabdar@Sun.COM #define	SLASH	'/'
62*7917SReza.Sabdar@Sun.COM 
63*7917SReza.Sabdar@Sun.COM #define	NDMP_MAX_SELECTIONS	64
64*7917SReza.Sabdar@Sun.COM 
65*7917SReza.Sabdar@Sun.COM /*
66*7917SReza.Sabdar@Sun.COM  * List of files/directories to be excluded from backup list.
67*7917SReza.Sabdar@Sun.COM  */
68*7917SReza.Sabdar@Sun.COM #define	EXCL_PROC	"/proc"
69*7917SReza.Sabdar@Sun.COM #define	EXCL_TMP	"/tmp"
70*7917SReza.Sabdar@Sun.COM 
71*7917SReza.Sabdar@Sun.COM 
72*7917SReza.Sabdar@Sun.COM typedef struct	tlm_buffer {
73*7917SReza.Sabdar@Sun.COM 	char	*tb_buffer_data;	/* area to be used for I/O */
74*7917SReza.Sabdar@Sun.COM 	long	tb_buffer_size;	/* number of valid bytes in the buffer */
75*7917SReza.Sabdar@Sun.COM 	long	tb_buffer_spot;	/* current location in the I/O buffer */
76*7917SReza.Sabdar@Sun.COM 	longlong_t tb_seek_spot;	/* for BACKUP */
77*7917SReza.Sabdar@Sun.COM 				/* where in the file this buffer stops. */
78*7917SReza.Sabdar@Sun.COM 				/* this is used for the Multi Volume */
79*7917SReza.Sabdar@Sun.COM 				/* Header record. */
80*7917SReza.Sabdar@Sun.COM 	longlong_t tb_file_size;	/* for BACKUP */
81*7917SReza.Sabdar@Sun.COM 					/* how much of the file is left. */
82*7917SReza.Sabdar@Sun.COM 	long	tb_full	: 1,
83*7917SReza.Sabdar@Sun.COM 		tb_eot	: 1,
84*7917SReza.Sabdar@Sun.COM 		tb_eof	: 1;
85*7917SReza.Sabdar@Sun.COM 	int	tb_errno;	/* I/O error values */
86*7917SReza.Sabdar@Sun.COM } tlm_buffer_t;
87*7917SReza.Sabdar@Sun.COM 
88*7917SReza.Sabdar@Sun.COM 
89*7917SReza.Sabdar@Sun.COM /*
90*7917SReza.Sabdar@Sun.COM  * Flags for tlm_buffers.
91*7917SReza.Sabdar@Sun.COM  */
92*7917SReza.Sabdar@Sun.COM #define	TLM_BUF_IN_READY	0x00000001
93*7917SReza.Sabdar@Sun.COM #define	TLM_BUF_OUT_READY	0x00000002
94*7917SReza.Sabdar@Sun.COM 
95*7917SReza.Sabdar@Sun.COM typedef struct	tlm_buffers {
96*7917SReza.Sabdar@Sun.COM 	int	tbs_ref;	/* number of threads using this */
97*7917SReza.Sabdar@Sun.COM 	short	tbs_buffer_in;	/* buffer to be filled */
98*7917SReza.Sabdar@Sun.COM 	short	tbs_buffer_out;	/* buffer to be emptied */
99*7917SReza.Sabdar@Sun.COM 				/* these are indexes into tlm_buffers */
100*7917SReza.Sabdar@Sun.COM 	mutex_t	tbs_mtx;
101*7917SReza.Sabdar@Sun.COM 	cond_t	tbs_in_cv;
102*7917SReza.Sabdar@Sun.COM 	cond_t	tbs_out_cv;
103*7917SReza.Sabdar@Sun.COM 	uint32_t	tbs_flags;
104*7917SReza.Sabdar@Sun.COM 	long	tbs_data_transfer_size;	/* max size of read/write buffer */
105*7917SReza.Sabdar@Sun.COM 	longlong_t tbs_offset;
106*7917SReza.Sabdar@Sun.COM 	tlm_buffer_t tbs_buffer[TLM_TAPE_BUFFERS];
107*7917SReza.Sabdar@Sun.COM } tlm_buffers_t;
108*7917SReza.Sabdar@Sun.COM 
109*7917SReza.Sabdar@Sun.COM typedef struct	tlm_cmd {
110*7917SReza.Sabdar@Sun.COM 	int	tc_ref;			/* number of threads using this */
111*7917SReza.Sabdar@Sun.COM 	mutex_t	tc_mtx;
112*7917SReza.Sabdar@Sun.COM 	cond_t	tc_cv;
113*7917SReza.Sabdar@Sun.COM 	uint32_t	tc_flags;
114*7917SReza.Sabdar@Sun.COM 	int	tc_reader;		/* writer to reader */
115*7917SReza.Sabdar@Sun.COM 	int	tc_writer;		/* reader to writer */
116*7917SReza.Sabdar@Sun.COM 	char	tc_file_name[TLM_MAX_PATH_NAME]; /* name of last file */
117*7917SReza.Sabdar@Sun.COM 						/* for restore */
118*7917SReza.Sabdar@Sun.COM 	tlm_buffers_t *tc_buffers; /* reader-writer speedup buffers */
119*7917SReza.Sabdar@Sun.COM } tlm_cmd_t;
120*7917SReza.Sabdar@Sun.COM 
121*7917SReza.Sabdar@Sun.COM typedef struct	tlm_commands {
122*7917SReza.Sabdar@Sun.COM 	int	tcs_reader;	/* commands to all readers */
123*7917SReza.Sabdar@Sun.COM 	int	tcs_writer;	/* commands to all writers */
124*7917SReza.Sabdar@Sun.COM 	int	tcs_reader_count;	/* number of active readers */
125*7917SReza.Sabdar@Sun.COM 	int	tcs_writer_count;	/* number of active writers */
126*7917SReza.Sabdar@Sun.COM 	int	tcs_error;	/* worker errors */
127*7917SReza.Sabdar@Sun.COM 	char	tcs_message[TLM_LINE_SIZE]; /* worker message back to user */
128*7917SReza.Sabdar@Sun.COM 	tlm_cmd_t *tcs_command;	/* IPC area between read-write */
129*7917SReza.Sabdar@Sun.COM } tlm_commands_t;
130*7917SReza.Sabdar@Sun.COM 
131*7917SReza.Sabdar@Sun.COM 
132*7917SReza.Sabdar@Sun.COM typedef struct	tlm_job_stats {
133*7917SReza.Sabdar@Sun.COM 	char	js_job_name[TLM_MAX_BACKUP_JOB_NAME];
134*7917SReza.Sabdar@Sun.COM 	longlong_t js_bytes_total;	/* tape bytes in or out so far */
135*7917SReza.Sabdar@Sun.COM 	longlong_t js_bytes_in_file;	/* remaining data in a file */
136*7917SReza.Sabdar@Sun.COM 	longlong_t js_files_so_far;	/* files backed up so far */
137*7917SReza.Sabdar@Sun.COM 	longlong_t js_files_total;	/* number of files to be backed up */
138*7917SReza.Sabdar@Sun.COM 	int	js_errors;
139*7917SReza.Sabdar@Sun.COM 	time_t	js_start_time;		/* start time (GMT time) */
140*7917SReza.Sabdar@Sun.COM 	time_t	js_start_ltime;		/* start time (local time) */
141*7917SReza.Sabdar@Sun.COM 	time_t	js_stop_time;		/* stop time (local time) */
142*7917SReza.Sabdar@Sun.COM 	time_t	js_chkpnt_time;		/* checkpoint creation (GMT time) */
143*7917SReza.Sabdar@Sun.COM 	void	*js_callbacks;
144*7917SReza.Sabdar@Sun.COM } tlm_job_stats_t;
145*7917SReza.Sabdar@Sun.COM 
146*7917SReza.Sabdar@Sun.COM 
147*7917SReza.Sabdar@Sun.COM struct full_dir_info {
148*7917SReza.Sabdar@Sun.COM 	fs_fhandle_t fd_dir_fh;
149*7917SReza.Sabdar@Sun.COM 	char fd_dir_name[TLM_MAX_PATH_NAME];
150*7917SReza.Sabdar@Sun.COM };
151*7917SReza.Sabdar@Sun.COM 
152*7917SReza.Sabdar@Sun.COM /*
153*7917SReza.Sabdar@Sun.COM  * For more info please refer to
154*7917SReza.Sabdar@Sun.COM  * "Functional Specification Document: Usgin new LBR engine in NDMP",
155*7917SReza.Sabdar@Sun.COM  * Revision: 0.2
156*7917SReza.Sabdar@Sun.COM  * Document No.: 101438.
157*7917SReza.Sabdar@Sun.COM  * the "File history of backup" section
158*7917SReza.Sabdar@Sun.COM  */
159*7917SReza.Sabdar@Sun.COM typedef struct lbr_fhlog_call_backs {
160*7917SReza.Sabdar@Sun.COM 	void *fh_cookie;
161*7917SReza.Sabdar@Sun.COM 	int (*fh_logpname)();
162*7917SReza.Sabdar@Sun.COM 	int (*fh_log_dir)();
163*7917SReza.Sabdar@Sun.COM 	int (*fh_log_node)();
164*7917SReza.Sabdar@Sun.COM } lbr_fhlog_call_backs_t;
165*7917SReza.Sabdar@Sun.COM 
166*7917SReza.Sabdar@Sun.COM 
167*7917SReza.Sabdar@Sun.COM typedef struct bk_selector {
168*7917SReza.Sabdar@Sun.COM 	void *bs_cookie;
169*7917SReza.Sabdar@Sun.COM 	int bs_level;
170*7917SReza.Sabdar@Sun.COM 	int bs_ldate;
171*7917SReza.Sabdar@Sun.COM 	boolean_t (*bs_fn)(struct bk_selector *bks, struct stat64 *s);
172*7917SReza.Sabdar@Sun.COM } bk_selector_t;
173*7917SReza.Sabdar@Sun.COM 
174*7917SReza.Sabdar@Sun.COM 
175*7917SReza.Sabdar@Sun.COM /*
176*7917SReza.Sabdar@Sun.COM  * Call back structure to create new name for objects at restore time.
177*7917SReza.Sabdar@Sun.COM  */
178*7917SReza.Sabdar@Sun.COM struct rs_name_maker;
179*7917SReza.Sabdar@Sun.COM typedef char *(*rsm_fp_t)(struct rs_name_maker *,
180*7917SReza.Sabdar@Sun.COM 	char *buf,
181*7917SReza.Sabdar@Sun.COM 	int pos,
182*7917SReza.Sabdar@Sun.COM 	char *path);
183*7917SReza.Sabdar@Sun.COM 
184*7917SReza.Sabdar@Sun.COM struct rs_name_maker {
185*7917SReza.Sabdar@Sun.COM 	rsm_fp_t rn_fp;
186*7917SReza.Sabdar@Sun.COM 	void *rn_nlp;
187*7917SReza.Sabdar@Sun.COM };
188*7917SReza.Sabdar@Sun.COM 
189*7917SReza.Sabdar@Sun.COM 
190*7917SReza.Sabdar@Sun.COM /*
191*7917SReza.Sabdar@Sun.COM  *  RSFLG_OVR_*: overwriting policies.  Refer to LBR FSD for more info.
192*7917SReza.Sabdar@Sun.COM  *  RSFLG_MATCH_WCARD: should wildcards be supported in the selection list.
193*7917SReza.Sabdar@Sun.COM  *  RSFLG_IGNORE_CASE: should the compare be case-insensetive.  NDMP needs
194*7917SReza.Sabdar@Sun.COM  *  	case-sensetive name comparison.
195*7917SReza.Sabdar@Sun.COM  */
196*7917SReza.Sabdar@Sun.COM #define	RSFLG_OVR_ALWAYS	0x00000001
197*7917SReza.Sabdar@Sun.COM #define	RSFLG_OVR_NEVER		0x00000002
198*7917SReza.Sabdar@Sun.COM #define	RSFLG_OVR_UPDATE	0x00000004
199*7917SReza.Sabdar@Sun.COM #define	RSFLG_MATCH_WCARD	0x00000008
200*7917SReza.Sabdar@Sun.COM #define	RSFLG_IGNORE_CASE	0x00000010
201*7917SReza.Sabdar@Sun.COM 
202*7917SReza.Sabdar@Sun.COM 
203*7917SReza.Sabdar@Sun.COM /*
204*7917SReza.Sabdar@Sun.COM  * Different cases where two paths can match with each other.
205*7917SReza.Sabdar@Sun.COM  * Parent means that the current path, is parent of an entry in
206*7917SReza.Sabdar@Sun.COM  * the selection list.
207*7917SReza.Sabdar@Sun.COM  * Child means that the current path, is child of an entry in the
208*7917SReza.Sabdar@Sun.COM  * selection list.
209*7917SReza.Sabdar@Sun.COM  */
210*7917SReza.Sabdar@Sun.COM #define	PM_NONE		0
211*7917SReza.Sabdar@Sun.COM #define	PM_EXACT	1
212*7917SReza.Sabdar@Sun.COM #define	PM_PARENT	2
213*7917SReza.Sabdar@Sun.COM #define	PM_CHILD	3
214*7917SReza.Sabdar@Sun.COM 
215*7917SReza.Sabdar@Sun.COM extern tlm_job_stats_t *tlm_new_job_stats(char *);
216*7917SReza.Sabdar@Sun.COM extern tlm_job_stats_t *tlm_ref_job_stats(char *);
217*7917SReza.Sabdar@Sun.COM extern void tlm_un_ref_job_stats(char *);
218*7917SReza.Sabdar@Sun.COM extern boolean_t tlm_is_excluded(char *, char *, char **);
219*7917SReza.Sabdar@Sun.COM extern char *tlm_build_snapshot_name(char *, char *, char *);
220*7917SReza.Sabdar@Sun.COM extern char *tlm_remove_checkpoint(char *, char *);
221*7917SReza.Sabdar@Sun.COM extern tlm_buffers_t *tlm_allocate_buffers(boolean_t, long);
222*7917SReza.Sabdar@Sun.COM extern tlm_buffer_t *tlm_buffer_advance_in_idx(tlm_buffers_t *);
223*7917SReza.Sabdar@Sun.COM extern tlm_buffer_t *tlm_buffer_advance_out_idx(tlm_buffers_t *);
224*7917SReza.Sabdar@Sun.COM extern tlm_buffer_t *tlm_buffer_in_buf(tlm_buffers_t *, int *);
225*7917SReza.Sabdar@Sun.COM extern tlm_buffer_t *tlm_buffer_out_buf(tlm_buffers_t *, int *);
226*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_mark_empty(tlm_buffer_t *);
227*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_release_in_buf(tlm_buffers_t *);
228*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_release_out_buf(tlm_buffers_t *);
229*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_in_buf_wait(tlm_buffers_t *);
230*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_out_buf_wait(tlm_buffers_t *);
231*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_in_buf_timed_wait(tlm_buffers_t *, unsigned);
232*7917SReza.Sabdar@Sun.COM extern void tlm_buffer_out_buf_timed_wait(tlm_buffers_t *, unsigned);
233*7917SReza.Sabdar@Sun.COM extern char *tlm_get_write_buffer(long, long *, tlm_buffers_t *, int);
234*7917SReza.Sabdar@Sun.COM extern char *tlm_get_read_buffer(int, int *, tlm_buffers_t *, int *);
235*7917SReza.Sabdar@Sun.COM extern void tlm_unget_read_buffer(tlm_buffers_t *, int);
236*7917SReza.Sabdar@Sun.COM extern void tlm_unget_write_buffer(tlm_buffers_t *, int);
237*7917SReza.Sabdar@Sun.COM extern void tlm_release_buffers(tlm_buffers_t *);
238*7917SReza.Sabdar@Sun.COM extern tlm_cmd_t *tlm_create_reader_writer_ipc(boolean_t, long);
239*7917SReza.Sabdar@Sun.COM extern void tlm_release_reader_writer_ipc(tlm_cmd_t *);
240*7917SReza.Sabdar@Sun.COM 
241*7917SReza.Sabdar@Sun.COM extern void tlm_cmd_wait(tlm_cmd_t *, uint32_t);
242*7917SReza.Sabdar@Sun.COM extern void tlm_cmd_signal(tlm_cmd_t *, uint32_t);
243*7917SReza.Sabdar@Sun.COM 
244*7917SReza.Sabdar@Sun.COM typedef int (*path_hist_func_t)(lbr_fhlog_call_backs_t *,
245*7917SReza.Sabdar@Sun.COM     char *,
246*7917SReza.Sabdar@Sun.COM     struct stat64 *,
247*7917SReza.Sabdar@Sun.COM     u_longlong_t);
248*7917SReza.Sabdar@Sun.COM 
249*7917SReza.Sabdar@Sun.COM typedef int (*dir_hist_func_t)(lbr_fhlog_call_backs_t *,
250*7917SReza.Sabdar@Sun.COM     char *,
251*7917SReza.Sabdar@Sun.COM     struct stat64 *);
252*7917SReza.Sabdar@Sun.COM 
253*7917SReza.Sabdar@Sun.COM typedef int (*node_hist_func_t)(lbr_fhlog_call_backs_t *,
254*7917SReza.Sabdar@Sun.COM     char *,
255*7917SReza.Sabdar@Sun.COM     char *,
256*7917SReza.Sabdar@Sun.COM     struct stat64 *,
257*7917SReza.Sabdar@Sun.COM     u_longlong_t);
258*7917SReza.Sabdar@Sun.COM 
259*7917SReza.Sabdar@Sun.COM lbr_fhlog_call_backs_t *lbrlog_callbacks_init(void *,
260*7917SReza.Sabdar@Sun.COM     path_hist_func_t,
261*7917SReza.Sabdar@Sun.COM     dir_hist_func_t,
262*7917SReza.Sabdar@Sun.COM     node_hist_func_t);
263*7917SReza.Sabdar@Sun.COM 
264*7917SReza.Sabdar@Sun.COM typedef struct {
265*7917SReza.Sabdar@Sun.COM 	tlm_commands_t *ba_commands;
266*7917SReza.Sabdar@Sun.COM 	tlm_cmd_t *ba_cmd;
267*7917SReza.Sabdar@Sun.COM 	char *ba_job;
268*7917SReza.Sabdar@Sun.COM 	char *ba_dir;
269*7917SReza.Sabdar@Sun.COM 	char *ba_sels[NDMP_MAX_SELECTIONS];
270*7917SReza.Sabdar@Sun.COM 	pthread_barrier_t ba_barrier;
271*7917SReza.Sabdar@Sun.COM } tlm_backup_restore_arg_t;
272*7917SReza.Sabdar@Sun.COM 
273*7917SReza.Sabdar@Sun.COM extern void lbrlog_callbacks_done(lbr_fhlog_call_backs_t *);
274*7917SReza.Sabdar@Sun.COM 
275*7917SReza.Sabdar@Sun.COM extern boolean_t tlm_cat_path(char *, char *, char *);
276*7917SReza.Sabdar@Sun.COM 
277*7917SReza.Sabdar@Sun.COM extern char *trim_name(char *);
278*7917SReza.Sabdar@Sun.COM 
279*7917SReza.Sabdar@Sun.COM extern struct full_dir_info *dup_dir_info(struct full_dir_info *);
280*7917SReza.Sabdar@Sun.COM extern void write_tar_eof(tlm_cmd_t *);
281*7917SReza.Sabdar@Sun.COM extern int tlm_get_chkpnt_time(char *, int, time_t *, char *);
282*7917SReza.Sabdar@Sun.COM extern struct full_dir_info *tlm_new_dir_info(fs_fhandle_t *,
283*7917SReza.Sabdar@Sun.COM     char *,
284*7917SReza.Sabdar@Sun.COM     char *);
285*7917SReza.Sabdar@Sun.COM extern void tlm_release_list(char **);
286*7917SReza.Sabdar@Sun.COM extern longlong_t tlm_get_data_offset(tlm_cmd_t *);
287*7917SReza.Sabdar@Sun.COM extern int tlm_tarhdr_size(void);
288*7917SReza.Sabdar@Sun.COM 
289*7917SReza.Sabdar@Sun.COM #endif	/* _TLM_BUFFERS_H_ */
290