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