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