/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos720 src/bos/kernel/kdm/dmapi.h 1.5 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* Restricted Materials of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 2000,2002 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)37 1.5 src/bos/kernel/kdm/dmapi.h, syskdm, bos720 12/18/02 17:55:58 */ /* * Copyright (c) 1998 VERITAS Software Corporation. ALL RIGHTS RESERVED. * UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT * LAWS OF THE UNITED STATES. USE OF A COPYRIGHT NOTICE * IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION * OR DISCLOSURE. * * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND * TRADE SECRETS OF VERITAS SOFTWARE. USE, DISCLOSURE, * OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR * EXPRESS WRITTEN PERMISSION OF VERITAS SOFTWARE. * * RESTRICTED RIGHTS LEGEND * USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS * SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBPARAGRAPH * (C) (1) (ii) OF THE RIGHTS IN TECHNICAL DATA AND * COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013. * VERITAS SOFTWARE * 1600 PLYMOUTH STREET, MOUNTAIN VIEW, CA 94043 */ #ifndef _H_KDM_DMAPI #define _H_KDM_DMAPI #include /* REQUIRED */ /* * maximum hsm name string */ #define DM_MAXNAME 256 /* * Definitions from DMAPI specification v2.0 Ch.5 */ typedef enum { DM_EVENT_INVALID, DM_EVENT_CLOSE, DM_EVENT_MOUNT, DM_EVENT_PREUNMOUNT, DM_EVENT_UNMOUNT, DM_EVENT_NOSPACE, DM_EVENT_DEBUT, DM_EVENT_CREATE, DM_EVENT_POSTCREATE, DM_EVENT_REMOVE, DM_EVENT_POSTREMOVE, DM_EVENT_RENAME, DM_EVENT_POSTRENAME, DM_EVENT_SYMLINK, DM_EVENT_POSTSYMLINK, DM_EVENT_LINK, DM_EVENT_POSTLINK, DM_EVENT_READ, DM_EVENT_WRITE, DM_EVENT_TRUNCATE, DM_EVENT_ATTRIBUTE, DM_EVENT_DESTROY, DM_EVENT_USER, DM_EVENT_MAX, DM_EVENT_CANCEL, /* not supported -- returns EINVAL */ /* NOTE: The standard defines DM_EVENT_MAX as "guaranteed to * be larger than the number of the largest valid event type * that can be represented in the dm_eventset_t type." The * pseudo-events defined below are not valid events in terms * of dm_eventset_t, thus are outside the DM_EVENT_MAX * boundary. They are intended for implementation convenience * only, which the KDM maps to standard-defined events. */ DM_EVENT_FCLEAR, DM_EVENT_MMAP } dm_eventtype_t; typedef enum { DM_EXTENT_INVALID, DM_EXTENT_RES, DM_EXTENT_HOLE } dm_extenttype_t; typedef enum { DM_MSGTYPE_INVALID, DM_MSGTYPE_SYNC, DM_MSGTYPE_ASYNC } dm_msgtype_t; typedef enum { DM_RETFLAG_INVALID, DM_RETFLAG_NOFLAG, DM_RETFLAG_FORCE } dm_namesp_retflag_t; typedef enum { DM_RESP_INVALID, DM_RESP_CONTINUE, DM_RESP_ABORT, DM_RESP_DONTCARE } dm_response_t; typedef enum { DM_RIGHT_NULL, DM_RIGHT_SHARED, DM_RIGHT_EXCL } dm_right_t; typedef enum { DM_CONFIG_INVALID, DM_CONFIG_BULKALL, DM_CONFIG_CREATE_BY_HANDLE, DM_CONFIG_DTIME_OVERLOAD, DM_CONFIG_LEGACY, DM_CONFIG_LOCK_UPGRADE, DM_CONFIG_MAX_ATTR_ON_DESTROY, DM_CONFIG_MAX_ATTRIBUTE_SIZE, DM_CONFIG_MAX_HANDLE_SIZE, DM_CONFIG_MAX_MANAGED_REGIONS, DM_CONFIG_MAX_MESSAGE_DATA, DM_CONFIG_OBJ_REF, DM_CONFIG_PENDING, DM_CONFIG_PERS_ATTRIBUTES, DM_CONFIG_PERS_EVENTS, DM_CONFIG_PERS_INHERIT_ATTRIBS, DM_CONFIG_PERS_MANAGED_REGIONS, DM_CONFIG_PUNCH_HOLE, DM_CONFIG_TOTAL_ATTRIBUTE_SPACE, DM_CONFIG_WILL_RETRY, DM_CONFIG_MAX } dm_config_t; typedef u_int dm_boolean_t; typedef int dm_sessid_t; typedef int dm_token_t; typedef dm_ino_t dm_attrloc_t; typedef int dm_ftype_t; typedef int dm_updtimes_t; typedef char dm_event_type_t; typedef int dm_event_disp_t; typedef int dm_eventset_t; typedef dm_u64_t dm_sequence_t; typedef dm_s64_t dm_igen_t; typedef dm_s64_t dm_fsid_t; typedef dm_u64_t dm_fset_index_t; struct dm_fileattr { mode_t fa_mode; uid_t fa_uid; gid_t fa_gid; time_t fa_atime; time_t fa_mtime; time_t fa_ctime; time_t fa_dtime; dm_off_t fa_size; }; typedef struct dm_fileattr dm_fileattr_t; /* * variable data length structure */ struct dm_vardata { dm_off_t vd_offset; dm_size_t vd_length; }; typedef struct dm_vardata dm_vardata_t; #define DM_GET_VALUE(p, field, type) \ ((type)((dm_off_t)(p) + (p)->field.vd_offset)) #define DM_GET_LEN(p, field) \ ((p)->field.vd_length) #define DM_STEP_TO_NEXT(p, type) \ ((type)((p)->_link ? (char *)(p) + (p)->_link : NULL)) typedef dm_vardata_t dm_handle_t; typedef dm_vardata_t dm_path_t; typedef dm_vardata_t dm_index_t; /* * DM global handle, invalid handle */ typedef struct kdm_handle dm_dummy_handle_t; extern dm_dummy_handle_t hsmfs_global_handle; #define DM_GLOBAL_HANP (void *)&hsmfs_global_handle #define DM_GLOBAL_HLEN sizeof (dm_dummy_handle_t) extern dm_dummy_handle_t hsmfs_invalid_handle; #define DM_INVALID_HANP (void *)&hsmfs_invalid_handle #define DM_INVALID_HLEN sizeof (dm_dummy_handle_t) #define DM_ATTR_NAME_SIZE 8 /* for dm_attrname_t */ struct dm_attrname { u_char an_chars[DM_ATTR_NAME_SIZE]; }; typedef struct dm_attrname dm_attrname_t; struct dm_attrlist { dm_attrname_t al_name; dm_vardata_t al_data; }; typedef struct dm_attrlist dm_attrlist_t; struct dm_data_event { dm_handle_t de_handle; dm_off_t de_offset; dm_size_t de_length; }; typedef struct dm_data_event dm_data_event_t; struct dm_namesp_event { mode_t ne_mode; dm_handle_t ne_handle1; dm_handle_t ne_handle2; dm_path_t ne_name1; dm_path_t ne_name2; int ne_retcode; }; typedef struct dm_namesp_event dm_namesp_event_t; struct dm_mount_event { mode_t me_mode; dm_handle_t me_handle1; dm_handle_t me_handle2; dm_path_t me_name1; dm_path_t me_name2; dm_handle_t me_roothandle; int me_retcode; }; typedef struct dm_mount_event dm_mount_event_t; struct dm_destroy_event { dm_handle_t ds_handle; dm_attrname_t ds_attrname; dm_vardata_t ds_attrdata; }; typedef struct dm_destroy_event dm_destroy_event_t; struct dm_inherit { dm_attrname_t ih_name; mode_t ih_filetype; }; typedef struct dm_inherit dm_inherit_t; struct dm_dispinfo { dm_ssize_t _link; dm_vardata_t di_fshandle; dm_eventset_t di_eventset; }; typedef struct dm_dispinfo dm_dispinfo_t; struct dm_eventmsg { dm_ssize_t _link; dm_eventtype_t ev_type; dm_token_t ev_token; dm_sequence_t ev_sequence; dm_vardata_t ev_data; char ev_body[8]; }; typedef struct dm_eventmsg dm_eventmsg_t; struct dm_cancel_event { dm_sequence_t ce_sequence; dm_token_t ce_token; }; typedef struct dm_cancel_event dm_cancel_event_t; struct dm_region { dm_off_t rg_offset; /* start offset in file */ dm_size_t rg_size; /* region length */ u_int rg_flags; /* flags - read/write/trunc */ }; typedef struct dm_region dm_region_t; struct dm_extent { dm_extenttype_t ex_type; dm_off_t ex_offset; dm_size_t ex_length; }; typedef struct dm_extent dm_extent_t; #define DM_REGION_NOEVENT 0x00 #define DM_REGION_READ 0x01 #define DM_REGION_WRITE 0x02 #define DM_REGION_TRUNCATE 0x04 #define DM_REGION_VALIDFLAG 0x07 /* * Misc defines */ #define DM_SESSION_INFO_LEN 256 #define DM_NO_SESSION -1 #define DM_TRUE 1 #define DM_FALSE 0 #define DM_INVALID_TOKEN -1 #define DM_NO_TOKEN 0 /* * Wait flags */ #define DM_EV_WAIT 0x01 #define DM_RR_WAIT 0x01 /* * mount option flags -- delivered with mount event in the * me_mode field */ #define DM_MOUNT_RDONLY 0x01 #define DM_MOUNT_SNAPSHOT 0x02 #define DM_MOUNT_REMOUNT 0x04 /* * unmount flag */ #define DM_UNMOUNT_FORCE 0x001 /* * dm_invis_write() option */ #define DM_WRITE_SYNC 0x01 /* * Attribute mask flags for dm_stat structure */ #define DM_AT_ATIME 0x0001 #define DM_AT_CFLAG 0x0002 #define DM_AT_CTIME 0x0004 #define DM_AT_DTIME 0x0008 #define DM_AT_EMASK 0x0010 #define DM_AT_GID 0x0020 #define DM_AT_HANDLE 0x0040 #define DM_AT_MODE 0x0080 #define DM_AT_MTIME 0x0100 #define DM_AT_PATTR 0x0200 #define DM_AT_PMANR 0x0400 #define DM_AT_SIZE 0x0800 #define DM_AT_STAT 0x1000 #define DM_AT_UID 0x2000 #ifdef __64BIT__ #define TIME_T time_t #else #define TIME_T uint :32; time_t #endif #ifdef __64BIT__ #define DEV_T dev_t #else #define DEV_T uint :32; dev_t #endif /* Don't even think about changing this structure. It is carefully * constructed so that all the members come out in the right spots * when accounting for 32/64-bit process/kernel combinations without * having to go through all the mind-bending craziness in kdm_copy.c. * If you feel you must change it (or even any of the dm* typedefs * defined elsewhere) all 32/64-bit combinations must be throughly * tested. Twice. Then change your mind and leave it alone. */ struct dm_stat { dm_ssize_t _link; dm_vardata_t dt_handle; dm_vardata_t dt_compname; dm_eventset_t dt_emask; int dt_nevents; int dt_pers; int dt_pmanreg; TIME_T dt_dtime; u_int dt_change; #ifndef __64BIT__ uint :32; #endif /* 1170 fields */ DEV_T dt_dev; dm_ino_t dt_ino; mode_t dt_mode; nlink_t dt_nlink; uid_t dt_uid; gid_t dt_gid; DEV_T dt_rdev; dm_off_t dt_size; TIME_T dt_atime; TIME_T dt_mtime; TIME_T dt_ctime; u_int dt_blksize; dm_size_t dt_blocks; }; typedef struct dm_stat dm_stat_t; /* * dm_xstat -- same as dm_stat but includes data for one named * DM attribute */ struct dm_xstat { dm_ssize_t _link; dm_stat_t dx_statinfo; dm_vardata_t dx_attrdata; }; typedef struct dm_xstat dm_xstat_t; /* * Macros for setting/resetting event set list. */ #define DMEV_SET(ev, evlist) ((evlist) |= (1 << (ev))) #define DMEV_CLR(ev, evlist) ((evlist) &= ~(1 << (ev))) #define DMEV_ISSET(ev, evlist) ((evlist) & (1 << (ev))) #define DMEV_ZERO(evlist) (evlist) = 0 /* * NFS server thread starvation avoidance. */ #ifdef NFS3ERR_JUKEBOX #define DM_EJUKEBOX NFS3ERR_JUKEBOX #else #define DM_EJUKEBOX 10008 #endif typedef unsigned int dm_eventquery_t; #define DM_OK_TO_PEND 1 struct dm_timestruct { time_t dm_tv_sec; int32 dm_tv_nsec; }; typedef struct dm_timestruct dm_timestruct_t; #endif /* _H_KDM_DMAPI */