1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 1994-2003 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	_CFSD_LOGELEM_H
28#define	_CFSD_LOGELEM_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32/*
33 * Include file for the logelem class.
34 */
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40/* typedefs for logelem type */
41#define	NO_OBJECT_TYPE		0
42#define	SETATTR_OBJECT_TYPE	1
43#define	SETSECATTR_OBJECT_TYPE	2
44#define	CREATE_OBJECT_TYPE	3
45#define	REMOVE_OBJECT_TYPE	4
46#define	RMDIR_OBJECT_TYPE	5
47#define	MKDIR_OBJECT_TYPE	6
48#define	LINK_OBJECT_TYPE	7
49#define	SYMLINK_OBJECT_TYPE	8
50#define	RENAME_OBJECT_TYPE	9
51#define	MODIFIED_OBJECT_TYPE	10
52#define	MAPFID_OBJECT_TYPE	11
53
54#define	CFSDMesgMax		4096
55/* BEGIN CSTYLED */
56/* defines for refrencing objects */
57#define	SETATTR_OBJECT(ptr)		ptr->i_operation.i_setattr_object
58#define	SETATTR_OBJECT_PTR(ptr)		&(ptr->i_operation.i_setattr_object)
59#define	SETSECATTR_OBJECT(ptr)		ptr->i_operation.i_setsecattr_object
60#define	SETSECATTR_OBJECT_PTR(ptr)	&(ptr->i_operation.i_setsecattr_object)
61#define	CREATE_OBJECT(ptr)		ptr->i_operation.i_create_object
62#define	CREATE_OBJECT_PTR(ptr)		&(ptr->i_operation.i_create_object)
63#define	REMOVE_OBJECT(ptr)		ptr->i_operation.i_remove_object
64#define	REMOVE_OBJECT_PTR(ptr)		&(ptr->i_operation.i_remove_object)
65#define	RMDIR_OBJECT(ptr)		ptr->i_operation.i_rmdir_object
66#define	RMDIR_OBJECT_PTR(ptr)		&(ptr->i_operation.i_rmdir_object)
67#define	MKDIR_OBJECT(ptr)		ptr->i_operation.i_mkdir_object
68#define	MKDIR_OBJECT_PTR(ptr)		&(ptr->i_operation.i_mkdir_object)
69#define	LINK_OBJECT(ptr)		ptr->i_operation.i_link_object
70#define	LINK_OBJECT_PTR(ptr)		&(ptr->i_operation.i_link_object)
71#define	SYMLINK_OBJECT(ptr)		ptr->i_operation.i_symlink_object
72#define	SYMLINK_OBJECT_PTR(ptr)		&(ptr->i_operation.i_symlink_object)
73#define	RENAME_OBJECT(ptr)		ptr->i_operation.i_rename_object
74#define	RENAME_OBJECT_PTR(ptr)		&(ptr->i_operation.i_rename_object)
75#define	MODIFIED_OBJECT(ptr)		ptr->i_operation.i_modified_object
76#define	MODIFIED_OBJECT_PTR(ptr)	&(ptr->i_operation.i_modified_object)
77#define	MAPFID_OBJECT(ptr)		ptr->i_operation.i_mapfid_object
78#define	MAPFID_OBJECT_PTR(ptr)		&(ptr->i_operation.i_mapfid_object)
79/* END CSTYLED */
80
81/* setattr */
82typedef struct cfsd_logelem_setattr_object {
83	struct cfs_dlog_setattr	*i_up;
84} cfsd_logelem_setattr_object_t;
85
86/* setsecattr */
87typedef struct cfsd_logelem_setsecattr_oject {
88	struct cfs_dlog_setsecattr	*i_up;
89	const aclent_t			*i_acl;
90} cfsd_logelem_setsecattr_object_t;
91
92/* create */
93typedef struct cfsd_logelem_create_object {
94	struct cfs_dlog_create	*i_up;
95	const char		*i_namep;	/* name of file to create */
96} cfsd_logelem_create_object_t;
97
98/* remove */
99typedef struct cfsd_logelem_remove_object {
100	struct cfs_dlog_remove	*i_up;
101	const char		*i_namep;	/* name of file to remove */
102} cfsd_logelem_remove_object_t;
103
104/* rmdir */
105typedef struct cfsd_logelem_rmdir_object {
106	struct cfs_dlog_rmdir	*i_up;
107	const char		*i_namep;	/* name of dir to rmdir */
108} cfsd_logelem_rmdir_object_t;
109
110/* mkdir */
111typedef struct cfsd_logelem_mkdir_object {
112	struct cfs_dlog_mkdir	*i_up;
113	const char		*i_namep;	/* name of dir to mkdir */
114} cfsd_logelem_mkdir_object_t;
115
116/* link */
117typedef struct cfsd_logelem_link_object {
118	struct cfs_dlog_link	*i_up;
119	const char		*i_namep;	/* name of link */
120} cfsd_logelem_link_object_t;
121
122/* symlink */
123typedef struct cfsd_logelem_symlink_object {
124	struct cfs_dlog_symlink	*i_up;
125	const char		*i_namep;	/* name of symlink */
126	const char		*i_contentsp;	/* contents of symlink */
127} cfsd_logelem_symlink_object_t;
128
129/* rename */
130typedef struct cfsd_logelem_rename_object {
131	struct cfs_dlog_rename	*i_up;
132	const char		*i_orignamep;	/* original name */
133	const char		*i_newnamep;	/* new name */
134} cfsd_logelem_rename_object_t;
135
136/* modify */
137typedef struct cfsd_logelem_modified_object {
138	struct cfs_dlog_modify	*i_up;
139} cfsd_logelem_modified_object_t;
140
141/* mapfid */
142typedef struct cfsd_logelem_mapfid_object {
143	struct cfs_dlog_mapfid	*i_up;
144} cfsd_logelem_mapfid_object_t;
145
146/* Abstract base class used by the other logelem classes. */
147#define	LOGELM_FIDBUFLEN	1024
148typedef struct cfsd_logelem_object {
149
150	cfsd_maptbl_object_t	*i_maptbl_object_p;
151	cfsd_logfile_object_t	*i_logfile_object_p;
152	cfsd_kmod_object_t	*i_kmod_object_p;
153	char			 i_messagep[CFSDMesgMax];	/* message */
154	char			 i_fidbuf[LOGELM_FIDBUFLEN];	/* debugging */
155	cfs_dlog_entry_t	*i_entp;
156	off_t			 i_offset;
157	int			 i_type;
158	union {
159		cfsd_logelem_setattr_object_t	i_setattr_object;
160		cfsd_logelem_setsecattr_object_t	i_setsecattr_object;
161		cfsd_logelem_create_object_t	i_create_object;
162		cfsd_logelem_remove_object_t	i_remove_object;
163		cfsd_logelem_rmdir_object_t	i_rmdir_object;
164		cfsd_logelem_mkdir_object_t	i_mkdir_object;
165		cfsd_logelem_link_object_t	i_link_object;
166		cfsd_logelem_symlink_object_t	i_symlink_object;
167		cfsd_logelem_rename_object_t	i_rename_object;
168		cfsd_logelem_modified_object_t	i_modified_object;
169		cfsd_logelem_mapfid_object_t	i_mapfid_object;
170	}i_operation;
171}cfsd_logelem_object_t;
172
173cfsd_logelem_object_t *cfsd_logelem_create(
174    cfsd_maptbl_object_t *maptbl_object_p,
175    cfsd_logfile_object_t *logfile_object_p,
176    cfsd_kmod_object_t *kmod_object_p);
177void cfsd_logelem_destroy(cfsd_logelem_object_t *logelem_object_p);
178void logelem_print_cred(dl_cred_t *credp);
179void logelem_print_attr(vattr_t *vp);
180void logelem_format_fid(cfsd_logelem_object_t *logelem_object_p, fid_t *fidp);
181int logelem_lostfound(cfsd_logelem_object_t *logelem_object_p,
182    cfs_cid_t *cidp,
183    cfs_cid_t *pcidp,
184    const char *namep,
185    dl_cred_t *cred);
186void logelem_problem(cfsd_logelem_object_t *logelem_object_p,
187	char *strp);
188void logelem_resolution(cfsd_logelem_object_t *logelem_object_p,
189	char *strp);
190void logelem_message_append(char *strp1, char *strp2);
191void logelem_message(cfsd_logelem_object_t *logelem_object_p,
192	char *prefix, char *strp);
193void logelem_log_opfailed(cfsd_logelem_object_t *logelem_object_p,
194	char *opp, char *info, const char *namep, int xx);
195void logelem_log_opskipped(cfsd_logelem_object_t *logelem_object_p,
196	const char *namep);
197void logelem_log_timelogmesg(cfsd_logelem_object_t *logelem_object_p,
198	char *opp, const char *namep, char *mesgp, int time_log);
199
200
201cfsd_logelem_object_t *cfsd_logelem_setattr_create(
202    cfsd_maptbl_object_t *maptbl_object_p,
203    cfsd_logfile_object_t *logfile_object_p,
204    cfsd_kmod_object_t *kmod_object_p);
205
206cfsd_logelem_object_t *cfsd_logelem_setsecattr_create(
207    cfsd_maptbl_object_t *maptbl_object_p,
208    cfsd_logfile_object_t *logfile_object_p,
209    cfsd_kmod_object_t *kmod_object_p);
210
211cfsd_logelem_object_t *cfsd_logelem_create_create(
212    cfsd_maptbl_object_t *maptbl_object_p,
213    cfsd_logfile_object_t *logfile_object_p,
214    cfsd_kmod_object_t *kmod_object_p);
215
216cfsd_logelem_object_t *cfsd_logelem_remove_create(
217    cfsd_maptbl_object_t *maptbl_object_p,
218    cfsd_logfile_object_t *logfile_object_p,
219    cfsd_kmod_object_t *kmod_object_p);
220
221cfsd_logelem_object_t *cfsd_logelem_rmdir_create(
222    cfsd_maptbl_object_t *maptbl_object_p,
223    cfsd_logfile_object_t *logfile_object_p,
224    cfsd_kmod_object_t *kmod_object_p);
225
226cfsd_logelem_object_t *cfsd_logelem_mkdir_create(
227    cfsd_maptbl_object_t *maptbl_object_p,
228    cfsd_logfile_object_t *logfile_object_p,
229    cfsd_kmod_object_t *kmod_object_p);
230
231cfsd_logelem_object_t *cfsd_logelem_link_create(
232    cfsd_maptbl_object_t *maptbl_object_p,
233    cfsd_logfile_object_t *logfile_object_p,
234    cfsd_kmod_object_t *kmod_object_p);
235
236cfsd_logelem_object_t *cfsd_logelem_symlink_create(
237    cfsd_maptbl_object_t *maptbl_object_p,
238    cfsd_logfile_object_t *logfile_object_p,
239    cfsd_kmod_object_t *kmod_object_p);
240
241cfsd_logelem_object_t *cfsd_logelem_rename_create(
242    cfsd_maptbl_object_t *maptbl_object_p,
243    cfsd_logfile_object_t *logfile_object_p,
244    cfsd_kmod_object_t *kmod_object_p);
245
246cfsd_logelem_object_t *cfsd_logelem_modified_create(
247    cfsd_maptbl_object_t *maptbl_object_p,
248    cfsd_logfile_object_t *logfile_object_p,
249    cfsd_kmod_object_t *kmod_object_p);
250
251cfsd_logelem_object_t *cfsd_logelem_mapfid_create(
252    cfsd_maptbl_object_t *maptbl_object_p,
253    cfsd_logfile_object_t *logfile_object_p,
254    cfsd_kmod_object_t *kmod_object_p);
255
256int logelem_roll(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
257
258int logelem_roll_setattr(cfsd_logelem_object_t *logelem_object_p,
259    ulong_t *seqp);
260int logelem_roll_setsecattr(cfsd_logelem_object_t *logelem_object_p,
261    ulong_t *seqp);
262int logelem_roll_create(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
263int logelem_roll_remove(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
264int logelem_roll_rmdir(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
265int logelem_roll_mkdir(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
266int logelem_roll_link(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
267int logelem_roll_symlink(cfsd_logelem_object_t *logelem_object_p,
268    ulong_t *seqp);
269int logelem_roll_rename(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp);
270int logelem_roll_modified(cfsd_logelem_object_t *logelem_object_p,
271    ulong_t *seqp);
272int logelem_roll_mapfid(cfsd_logelem_object_t *logelem_object_p);
273
274void logelem_dump(cfsd_logelem_object_t *logelem_object_p);
275void logelem_dump_setattr(cfsd_logelem_object_t *logelem_object_p);
276void logelem_dump_setsecattr(cfsd_logelem_object_t *logelem_object_p);
277void logelem_dump_create(cfsd_logelem_object_t *logelem_object_p);
278void logelem_dump_remove(cfsd_logelem_object_t *logelem_object_p);
279void logelem_dump_rmdir(cfsd_logelem_object_t *logelem_object_p);
280void logelem_dump_mkdir(cfsd_logelem_object_t *logelem_object_p);
281void logelem_dump_link(cfsd_logelem_object_t *logelem_object_p);
282void logelem_dump_symlink(cfsd_logelem_object_t *logelem_object_p);
283void logelem_dump_rename(cfsd_logelem_object_t *logelem_object_p);
284void logelem_dump_modified(cfsd_logelem_object_t *logelem_object_p);
285void logelem_dump_mapfid(cfsd_logelem_object_t *logelem_object_p);
286
287#ifdef __cplusplus
288}
289#endif
290
291#endif /* _CFSD_LOGELEM_H */
292