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 37 extern "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 */ 82 typedef struct cfsd_logelem_setattr_object { 83 struct cfs_dlog_setattr *i_up; 84 } cfsd_logelem_setattr_object_t; 85 86 /* setsecattr */ 87 typedef 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 */ 93 typedef 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 */ 99 typedef 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 */ 105 typedef 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 */ 111 typedef 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 */ 117 typedef 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 */ 123 typedef 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 */ 130 typedef 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 */ 137 typedef struct cfsd_logelem_modified_object { 138 struct cfs_dlog_modify *i_up; 139 } cfsd_logelem_modified_object_t; 140 141 /* mapfid */ 142 typedef 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 148 typedef 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 173 cfsd_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); 177 void cfsd_logelem_destroy(cfsd_logelem_object_t *logelem_object_p); 178 void logelem_print_cred(dl_cred_t *credp); 179 void logelem_print_attr(vattr_t *vp); 180 void logelem_format_fid(cfsd_logelem_object_t *logelem_object_p, fid_t *fidp); 181 int 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); 186 void logelem_problem(cfsd_logelem_object_t *logelem_object_p, 187 char *strp); 188 void logelem_resolution(cfsd_logelem_object_t *logelem_object_p, 189 char *strp); 190 void logelem_message_append(char *strp1, char *strp2); 191 void logelem_message(cfsd_logelem_object_t *logelem_object_p, 192 char *prefix, char *strp); 193 void logelem_log_opfailed(cfsd_logelem_object_t *logelem_object_p, 194 char *opp, char *info, const char *namep, int xx); 195 void logelem_log_opskipped(cfsd_logelem_object_t *logelem_object_p, 196 const char *namep); 197 void logelem_log_timelogmesg(cfsd_logelem_object_t *logelem_object_p, 198 char *opp, const char *namep, char *mesgp, int time_log); 199 200 201 cfsd_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 206 cfsd_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 211 cfsd_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 216 cfsd_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 221 cfsd_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 226 cfsd_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 231 cfsd_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 236 cfsd_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 241 cfsd_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 246 cfsd_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 251 cfsd_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 256 int logelem_roll(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 257 258 int logelem_roll_setattr(cfsd_logelem_object_t *logelem_object_p, 259 ulong_t *seqp); 260 int logelem_roll_setsecattr(cfsd_logelem_object_t *logelem_object_p, 261 ulong_t *seqp); 262 int logelem_roll_create(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 263 int logelem_roll_remove(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 264 int logelem_roll_rmdir(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 265 int logelem_roll_mkdir(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 266 int logelem_roll_link(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 267 int logelem_roll_symlink(cfsd_logelem_object_t *logelem_object_p, 268 ulong_t *seqp); 269 int logelem_roll_rename(cfsd_logelem_object_t *logelem_object_p, ulong_t *seqp); 270 int logelem_roll_modified(cfsd_logelem_object_t *logelem_object_p, 271 ulong_t *seqp); 272 int logelem_roll_mapfid(cfsd_logelem_object_t *logelem_object_p); 273 274 void logelem_dump(cfsd_logelem_object_t *logelem_object_p); 275 void logelem_dump_setattr(cfsd_logelem_object_t *logelem_object_p); 276 void logelem_dump_setsecattr(cfsd_logelem_object_t *logelem_object_p); 277 void logelem_dump_create(cfsd_logelem_object_t *logelem_object_p); 278 void logelem_dump_remove(cfsd_logelem_object_t *logelem_object_p); 279 void logelem_dump_rmdir(cfsd_logelem_object_t *logelem_object_p); 280 void logelem_dump_mkdir(cfsd_logelem_object_t *logelem_object_p); 281 void logelem_dump_link(cfsd_logelem_object_t *logelem_object_p); 282 void logelem_dump_symlink(cfsd_logelem_object_t *logelem_object_p); 283 void logelem_dump_rename(cfsd_logelem_object_t *logelem_object_p); 284 void logelem_dump_modified(cfsd_logelem_object_t *logelem_object_p); 285 void logelem_dump_mapfid(cfsd_logelem_object_t *logelem_object_p); 286 287 #ifdef __cplusplus 288 } 289 #endif 290 291 #endif /* _CFSD_LOGELEM_H */