blob: c3132e778022debcd5f2f50e2e9a694f832e0510 [file] [log] [blame]
/*
* Copyright (c) 1995-2003 Silicon Graphics, Inc.
* All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it would be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef __DMAPI_H__
#define __DMAPI_H__
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __KERNEL__
#include <xfs/xfs.h>
#include <xfs/handle.h>
#endif
/**************************************************************************
* *
* The SGI implementation of DMAPI is based upon the X/Open document *
* Systems Management: Data Storage Managment (XDSM) API *
* dated February 1997. Not all DMAPI functions and structure fields *
* have been implemented. Most importantly, the DMAPI functions *
* dm_request_right, dm_release_right, dm_query_right, dm_upgrade_right *
* and dm_downgrade_right do not work as described in the specification. *
* *
* The XFS filesystem currently does not allow its locking mechanisms to *
* be externally accessed from user space. While the above-mentioned *
* dm_xxx_right functions exist and can be called by applications, they *
* always return successfully without actually obtaining any locks *
* within the filesystem. *
* *
* Applications which do not need full rights support and which only *
* make dm_xxx_right calls in order to satisfy the input requirements of *
* other DMAPI calls should be able to use these routines to avoid *
* having to implement special-case code for SGI platforms. Applications *
* which truely need the capabilities of a full implementation of rights *
* will unfortunately have to come up with alternate software solutions *
* until such time as rights can be completely implemented. *
* *
* Functions and structure fields defined within this file which are not *
* supported in the SGI implementation of DMAPI are indicated by comments *
* following their definitions such as "not supported", or "not *
* completely supported". Any function or field not so marked may be *
* assumed to work exactly according to the spec. *
* *
**************************************************************************/
/* The first portion of this file contains defines and typedefs that are
DMAPI implementation-dependent, and could be different on other platforms.
*/
typedef __s64 dm_attrloc_t;
typedef unsigned int dm_boolean_t;
typedef __u64 dm_eventset_t;
typedef __u64 dm_fsid_t;
typedef __u64 dm_ino_t;
typedef __u32 dm_igen_t;
typedef __s64 dm_off_t;
typedef unsigned int dm_sequence_t;
typedef int dm_sessid_t;
typedef __u64 dm_size_t;
typedef __s64 dm_ssize_t;
typedef int dm_token_t;
/* XXX dev_t, mode_t, and nlink_t are not the same size in kernel space
and user space. This affects the field offsets for dm_stat_t.
The following solution is temporary.
user space sizes: dev_t=8 mode_t=4 nlink_t=4
kernel space : dev_t=2 mode_t=2 nlink_t=2
*/
typedef __s64 dm_dev_t;
typedef int dm_mode_t;
typedef int dm_nlink_t;
#define DM_REGION_NOEVENT 0x0
#define DM_REGION_READ 0x1
#define DM_REGION_WRITE 0x2
#define DM_REGION_TRUNCATE 0x4
/* Values for the mask argument used with dm_get_fileattr, dm_get_bulkattr,
dm_get_dirattrs, and dm_set_fileattr.
*/
#define DM_AT_MODE 0x0001
#define DM_AT_UID 0x0002
#define DM_AT_GID 0x0004
#define DM_AT_ATIME 0x0008
#define DM_AT_MTIME 0x0010
#define DM_AT_CTIME 0x0020
#define DM_AT_SIZE 0x0040
#define DM_AT_DTIME 0x0080
#define DM_AT_HANDLE 0x0100
#define DM_AT_EMASK 0x0200
#define DM_AT_PMANR 0x0400
#define DM_AT_PATTR 0x0800
#define DM_AT_STAT 0x1000
#define DM_AT_CFLAG 0x2000
#define DM_EV_WAIT 0x1 /* used in dm_get_events() */
#define DM_MOUNT_RDONLY 0x1 /* me_mode field in dm_mount_event_t */
#define DM_RR_WAIT 0x1
#define DM_UNMOUNT_FORCE 0x1 /* ne_mode field in dm_namesp_event_t */
#define DM_WRITE_SYNC 0x1 /* used in dm_write_invis() */
#define DM_SESSION_INFO_LEN 256
#define DM_NO_SESSION 0
#define DM_TRUE 1
#define DM_FALSE 0
#define DM_INVALID_TOKEN 0
#define DM_NO_TOKEN (-1)
#define DM_INVALID_HANP NULL
#define DM_INVALID_HLEN 0
#define DM_GLOBAL_HANP ((void *)(1LL))
#define DM_GLOBAL_HLEN ((size_t)(1))
#define DM_VER_STR_CONTENTS "SGI DMAPI (XDSM) API, Release 1.1."
#define DMEV_SET(event_type, event_list) \
((event_list) |= (1 << (event_type)))
#define DMEV_CLR(event_type, event_list) \
((event_list) &= ~(1 << (event_type)))
#define DMEV_ISSET(event_type, event_list) \
(int)(((event_list) & (1 << (event_type))) != 0)
#define DMEV_ZERO(event_list) \
(event_list) = 0
typedef struct {
int vd_offset; /* offset from start of containing struct */
unsigned int vd_length; /* length of data starting at vd_offset */
} dm_vardata_t;
#define DM_GET_VALUE(p, field, type) \
((type) ((char *)(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))
/* The remainder of this include file contains defines, typedefs, and
structures which are strictly defined by the DMAPI 2.3 specification.
(The _link field which appears in several structures is an
implementation-specific way to implement DM_STEP_TO_NEXT, and
should not be referenced directly by application code.)
*/
#define DM_ATTR_NAME_SIZE 8
struct dm_attrname {
unsigned char an_chars[DM_ATTR_NAME_SIZE];
};
typedef struct dm_attrname dm_attrname_t;
struct dm_attrlist {
int _link;
dm_attrname_t al_name;
dm_vardata_t al_data;
};
typedef struct dm_attrlist dm_attrlist_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_t;
struct dm_dioinfo { /* non-standard SGI addition */
unsigned int d_mem;
unsigned int d_miniosz;
unsigned int d_maxiosz;
dm_boolean_t d_dio_only;
};
typedef struct dm_dioinfo dm_dioinfo_t;
struct dm_dispinfo {
int _link;
unsigned int di_pad1; /* reserved; do not reference */
dm_vardata_t di_fshandle;
dm_eventset_t di_eventset;
};
typedef struct dm_dispinfo dm_dispinfo_t;
#ifndef HAVE_DM_EVENTTYPE_T
#define HAVE_DM_EVENTTYPE_T
typedef enum {
DM_EVENT_INVALID = -1,
DM_EVENT_CANCEL = 0, /* not supported */
DM_EVENT_MOUNT = 1,
DM_EVENT_PREUNMOUNT = 2,
DM_EVENT_UNMOUNT = 3,
DM_EVENT_DEBUT = 4, /* not supported */
DM_EVENT_CREATE = 5,
DM_EVENT_CLOSE = 6, /* not supported */
DM_EVENT_POSTCREATE = 7,
DM_EVENT_REMOVE = 8,
DM_EVENT_POSTREMOVE = 9,
DM_EVENT_RENAME = 10,
DM_EVENT_POSTRENAME = 11,
DM_EVENT_LINK = 12,
DM_EVENT_POSTLINK = 13,
DM_EVENT_SYMLINK = 14,
DM_EVENT_POSTSYMLINK = 15,
DM_EVENT_READ = 16,
DM_EVENT_WRITE = 17,
DM_EVENT_TRUNCATE = 18,
DM_EVENT_ATTRIBUTE = 19,
DM_EVENT_DESTROY = 20,
DM_EVENT_NOSPACE = 21,
DM_EVENT_USER = 22,
DM_EVENT_MAX = 23
} dm_eventtype_t;
#endif
struct dm_eventmsg {
int _link;
dm_eventtype_t ev_type;
dm_token_t ev_token;
dm_sequence_t ev_sequence;
dm_vardata_t ev_data;
};
typedef struct dm_eventmsg dm_eventmsg_t;
struct dm_cancel_event { /* not supported */
dm_sequence_t ce_sequence;
dm_token_t ce_token;
};
typedef struct dm_cancel_event dm_cancel_event_t;
struct dm_data_event {
dm_vardata_t de_handle;
dm_off_t de_offset;
dm_size_t de_length;
};
typedef struct dm_data_event dm_data_event_t;
struct dm_destroy_event {
dm_vardata_t ds_handle;
dm_attrname_t ds_attrname;
dm_vardata_t ds_attrcopy;
};
typedef struct dm_destroy_event dm_destroy_event_t;
struct dm_mount_event {
dm_mode_t me_mode;
dm_vardata_t me_handle1;
dm_vardata_t me_handle2;
dm_vardata_t me_name1;
dm_vardata_t me_name2;
dm_vardata_t me_roothandle;
};
typedef struct dm_mount_event dm_mount_event_t;
struct dm_namesp_event {
dm_mode_t ne_mode;
dm_vardata_t ne_handle1;
dm_vardata_t ne_handle2;
dm_vardata_t ne_name1;
dm_vardata_t ne_name2;
int ne_retcode;
};
typedef struct dm_namesp_event dm_namesp_event_t;
typedef enum {
DM_EXTENT_INVALID,
DM_EXTENT_RES,
DM_EXTENT_HOLE
} dm_extenttype_t;
struct dm_extent {
dm_extenttype_t ex_type;
unsigned int ex_pad1; /* reserved; do not reference */
dm_off_t ex_offset;
dm_size_t ex_length;
};
typedef struct dm_extent dm_extent_t;
struct dm_fileattr {
dm_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;
unsigned int fa_pad1; /* reserved; do not reference */
dm_off_t fa_size;
};
typedef struct dm_fileattr dm_fileattr_t;
struct dm_inherit { /* not supported */
dm_attrname_t ih_name;
dm_mode_t ih_filetype;
};
typedef struct dm_inherit dm_inherit_t;
typedef enum {
DM_MSGTYPE_INVALID,
DM_MSGTYPE_SYNC,
DM_MSGTYPE_ASYNC
} dm_msgtype_t;
struct dm_region {
dm_off_t rg_offset;
dm_size_t rg_size;
unsigned int rg_flags;
unsigned int rg_pad1; /* reserved; do not reference */
};
typedef struct dm_region dm_region_t;
typedef enum {
DM_RESP_INVALID,
DM_RESP_CONTINUE,
DM_RESP_ABORT,
DM_RESP_DONTCARE
} dm_response_t;
#ifndef HAVE_DM_RIGHT_T
#define HAVE_DM_RIGHT_T
typedef enum {
DM_RIGHT_NULL,
DM_RIGHT_SHARED,
DM_RIGHT_EXCL
} dm_right_t;
#endif
struct dm_stat {
int _link;
dm_vardata_t dt_handle;
dm_vardata_t dt_compname;
int dt_nevents;
dm_eventset_t dt_emask;
int dt_pers; /* field not supported */
int dt_pmanreg;
time_t dt_dtime;
unsigned int dt_change; /* field not supported */
unsigned int dt_pad1; /* reserved; do not reference */
dm_dev_t dt_dev;
dm_ino_t dt_ino;
dm_mode_t dt_mode;
dm_nlink_t dt_nlink;
uid_t dt_uid;
gid_t dt_gid;
dm_dev_t dt_rdev;
unsigned int dt_pad2; /* reserved; do not reference */
dm_off_t dt_size;
time_t dt_atime;
time_t dt_mtime;
time_t dt_ctime;
unsigned int dt_blksize;
dm_size_t dt_blocks;
/* Non-standard filesystem-specific fields. Currently XFS is the only
supported filesystem type.
*/
__u64 dt_pad3; /* reserved; do not reference */
int dt_fstype; /* filesystem index; see sysfs(2) */
union {
struct {
dm_igen_t igen;
unsigned int xflags;
unsigned int extsize;
unsigned int extents;
unsigned short aextents;
unsigned short dmstate;
} sgi_xfs;
} fsys_dep;
};
typedef struct dm_stat dm_stat_t;
#define dt_xfs_igen fsys_dep.sgi_xfs.igen
#define dt_xfs_xflags fsys_dep.sgi_xfs.xflags
#define dt_xfs_extsize fsys_dep.sgi_xfs.extsize
#define dt_xfs_extents fsys_dep.sgi_xfs.extents
#define dt_xfs_aextents fsys_dep.sgi_xfs.aextents
#define dt_xfs_dmstate fsys_dep.sgi_xfs.dmstate
/* Flags for the non-standard dt_xfs_xflags field. */
#define DM_XFLAG_REALTIME 0x00000001
#define DM_XFLAG_PREALLOC 0x00000002
#define DM_XFLAG_IMMUTABLE 0x00000008
#define DM_XFLAG_APPEND 0x00000010
#define DM_XFLAG_SYNC 0x00000020
#define DM_XFLAG_NOATIME 0x00000040
#define DM_XFLAG_NODUMP 0x00000080
#define DM_XFLAG_HASATTR 0x80000000
struct dm_timestruct {
time_t dm_tv_sec;
int dm_tv_nsec;
};
typedef struct dm_timestruct dm_timestruct_t;
struct dm_xstat { /* not supported */
dm_stat_t dx_statinfo;
dm_vardata_t dx_attrdata;
};
typedef struct dm_xstat dm_xstat_t;
#define MAXDMFSFIDSZ 46
struct dm_fid {
__u16 dm_fid_len; /* length of remainder */
__u16 dm_fid_pad;
__u32 dm_fid_gen; /* generation number */
__u64 dm_fid_ino; /* 64 bits inode number */
};
typedef struct dm_fid dm_fid_t;
struct dm_handle {
union {
__s64 align; /* force alignment of ha_fid */
dm_fsid_t _ha_fsid; /* unique file system identifier */
} ha_u;
dm_fid_t ha_fid; /* file system specific file ID */
};
typedef struct dm_handle dm_handle_t;
#define ha_fsid ha_u._ha_fsid
#define DM_HSIZE(handle) (((char *) &(handle).ha_fid.dm_fid_pad \
- (char *) &(handle)) \
+ (handle).ha_fid.dm_fid_len)
#define DM_HANDLE_CMP(h1, h2) memcmp(h1, h2, sizeof(dm_handle_t))
#define DM_FSHSIZE sizeof(dm_fsid_t)
/* The following list provides the prototypes for all functions defined in
the DMAPI interface.
*/
extern int
dm_clear_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep);
extern int
dm_create_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname);
extern int
dm_create_session(
dm_sessid_t oldsid,
char *sessinfop,
dm_sessid_t *newsidp);
extern int
dm_create_userevent(
dm_sessid_t sid,
size_t msglen,
void *msgdatap,
dm_token_t *tokenp);
extern int
dm_destroy_session(
dm_sessid_t sid);
extern int
dm_downgrade_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_fd_to_handle(
int fd,
void **hanpp,
size_t *hlenp);
extern int
dm_find_eventmsg(
dm_sessid_t sid,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_allocinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t *offp,
unsigned int nelem,
dm_extent_t *extentp,
unsigned int *nelemp);
extern int
dm_get_bulkall( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrname_t *attrnamep,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_bulkattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_config(
void *hanp,
size_t hlen,
dm_config_t flagname,
dm_size_t *retvalp);
extern int
dm_get_config_events(
void *hanp,
size_t hlen,
unsigned int nelem,
dm_eventset_t *eventsetp,
unsigned int *nelemp);
extern int
dm_get_dirattrs(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_eventlist(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_eventset_t *eventsetp,
unsigned int *nelemp);
extern int
dm_get_events(
dm_sessid_t sid,
unsigned int maxmsgs,
unsigned int flags,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_fileattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_stat_t *statp);
extern int
dm_get_mountinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_region(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_region_t *regbufp,
unsigned int *nelemp);
extern int
dm_getall_disp(
dm_sessid_t sid,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_getall_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_getall_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_inherit_t *inheritbufp,
unsigned int *nelemp);
extern int
dm_getall_sessions(
unsigned int nelem,
dm_sessid_t *sidbufp,
unsigned int *nelemp);
extern int
dm_getall_tokens(
dm_sessid_t sid,
unsigned int nelem,
dm_token_t *tokenbufp,
unsigned int *nelemp);
extern int
dm_handle_cmp(
void *hanp1,
size_t hlen1,
void *hanp2,
size_t hlen2);
extern void
dm_handle_free(
void *hanp,
size_t hlen);
extern u_int
dm_handle_hash(
void *hanp,
size_t hlen);
extern dm_boolean_t
dm_handle_is_valid(
void *hanp,
size_t hlen);
extern int
dm_handle_to_fshandle(
void *hanp,
size_t hlen,
void **fshanpp,
size_t *fshlenp);
extern int
dm_handle_to_fsid(
void *hanp,
size_t hlen,
dm_fsid_t *fsidp);
extern int
dm_handle_to_igen(
void *hanp,
size_t hlen,
dm_igen_t *igenp);
extern int
dm_handle_to_ino(
void *hanp,
size_t hlen,
dm_ino_t *inop);
extern int
dm_handle_to_path(
void *dirhanp,
size_t dirhlen,
void *targhanp,
size_t targhlen,
size_t buflen,
char *pathbufp,
size_t *rlenp);
extern int
dm_init_attrloc(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrloc_t *locp);
extern int
dm_init_service(
char **versionstrpp);
extern int
dm_make_handle(
dm_fsid_t *fsidp,
dm_ino_t *inop,
dm_igen_t *igenp,
void **hanpp,
size_t *hlenp);
extern int
dm_make_fshandle(
dm_fsid_t *fsidp,
void **hanpp,
size_t *hlenp);
extern int
dm_mkdir_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname);
extern int
dm_move_event(
dm_sessid_t srcsid,
dm_token_t token,
dm_sessid_t targetsid,
dm_token_t *rtokenp);
extern int
dm_obj_ref_hold(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_obj_ref_query(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_obj_ref_rele(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_path_to_fshandle(
char *path,
void **hanpp,
size_t *hlenp);
extern int
dm_path_to_handle(
char *path,
void **hanpp,
size_t *hlenp);
extern int
dm_pending(
dm_sessid_t sid,
dm_token_t token,
dm_timestruct_t *delay);
extern int
dm_probe_hole(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len,
dm_off_t *roffp,
dm_size_t *rlenp);
extern int
dm_punch_hole(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len);
extern int
dm_query_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_right_t *rightp);
extern int
dm_query_session(
dm_sessid_t sid,
size_t buflen,
void *bufp,
size_t *rlenp);
extern dm_ssize_t
dm_read_invis(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len,
void *bufp);
extern int
dm_release_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_remove_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
int setdtime,
dm_attrname_t *attrnamep);
extern int
dm_request_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int flags,
dm_right_t right);
extern int
dm_respond_event(
dm_sessid_t sid,
dm_token_t token,
dm_response_t response,
int reterror,
size_t buflen,
void *respbufp);
extern int
dm_send_msg(
dm_sessid_t targetsid,
dm_msgtype_t msgtype,
size_t buflen,
void *bufp);
extern int
dm_set_disp(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_eventset_t *eventsetp,
unsigned int maxevent);
extern int
dm_set_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
int setdtime,
size_t buflen,
void *bufp);
extern int
dm_set_eventlist(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_eventset_t *eventsetp,
unsigned int maxevent);
extern int
dm_set_fileattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_fileattr_t *attrp);
extern int
dm_set_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
mode_t mode);
extern int
dm_set_region(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_region_t *regbufp,
dm_boolean_t *exactflagp);
extern int
dm_set_return_on_destroy(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
dm_boolean_t enable);
extern int
dm_symlink_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname,
char *path);
extern int
dm_sync_by_handle(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_upgrade_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern dm_ssize_t
dm_write_invis(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
int flags,
dm_off_t off,
dm_size_t len,
void *bufp);
/* Non-standard SGI additions to the DMAPI interface. */
int
dm_open_by_handle(
void *hanp,
size_t hlen,
int mode);
extern int
dm_get_dioinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_dioinfo_t *diop);
#ifdef __cplusplus
}
#endif
#endif /* __DMAPI_H__ */