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 */