Update copyright dates (again)
[xfstests-dev.git] / dmapi / src / common / lib / dmport.h
1 /*
2  * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
3  * 
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of version 2 of the GNU General Public License as
6  * published by the Free Software Foundation.
7  * 
8  * This program is distributed in the hope that it would be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * 
12  * Further, this software is distributed without any warranty that it is
13  * free of the rightful claim of any third person regarding infringement
14  * or the like.  Any license provided herein, whether implied or
15  * otherwise, applies only to this software file.  Patent licenses, if
16  * any, provided herein do not apply to combinations of this program with
17  * other software, or any other product whatsoever.
18  * 
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write the Free Software Foundation, Inc., 59
21  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
22  * 
23  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24  * Mountain View, CA  94043, or:
25  * 
26  * http://www.sgi.com 
27  * 
28  * For further information regarding this notice, see: 
29  * 
30  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
31  */
32
33 #ifndef _DMFSAPI_DMPORT_H
34 #define _DMFSAPI_DMPORT_H
35
36 #ifdef  __cplusplus
37 extern  "C" {
38 #endif
39
40 /**************************************************************************
41  *                                                                        *
42  * DMF's use of DMAPI is based upon the X/Open document                   *
43  *      Systems Management: Data Storage Managment (XDSM) API             *
44  * dated February 1997.  However, no implementation of DMAPI perfectly    *
45  * matches the spec.  Each implementation has some functions that it      *
46  * didn't implement, non-standard functions that it added, differences    *
47  * in function parameter types, return value types, number and order of   *
48  * parameters, etc.  There are also differences in the formats of some    *
49  * of the DMAPI structures used by those functions.  Finally, there are   *
50  * many scalar values for which DMAPI assigned no particular size.  For   *
51  * example, a dm_fsid_t is 32 bits under Veritas and 64 bits under SGI.   *
52  *                                                                        *
53  * To hide the differences as much as possible, this include file tries   *
54  * to shoehorn each DMAPI implementation into the XDSM mold as much as    *
55  * possible.  Functions which are not compatible with the XDSM spec are   *
56  * redefined using wrapper routines to make them conform to the spec.     *
57  * Functions which were not implemented have stubs defined which return   *
58  * ENOSYS (see file stubs.c for all wrappers and stubs).  In dmport.h,    *
59  * missing structures and scalers are defined, incompatible typedefs are  *
60  * redefined, etc.                                                        *
61  *                                                                        *
62  * The goal is to reduce as much as possible the number of #ifdefs that   *
63  * have to be added to DMF to handle specific DMAPI implementations.      *
64  * Some #ifdefs may still be required because of semantic differences     *
65  * between the XDSM spec definition and the actual implementation.        *
66  *                                                                        *
67  * Following all the implementation-specific definitions, dmport.h        *
68  * includes a complete set of prototypes for all functions that are part  *
69  * of  the XDSM specification.  This is done as a double-check.  Should   *
70  * any of the actual implementations change, the compiler should tip us   *
71  * off by complaining about imcompatible function redefinitions.          *
72  *                                                                        *
73  **************************************************************************/
74
75
76 /* ---------------- Veritas-specific hack documentation -----------------
77
78 The following functions have no prototypes in the Veritas include file
79 <sys/dmapi/dmapi.h>.  They do not link either.
80
81 extern int dm_handle_is_valid(void *, size_t);
82
83
84 The following functions have prototypes in <sys/dmapi/dmapi.h>, but
85 they do not link.
86
87 extern int dm_getall_disp(dm_sessid_t, size_t, void *, size_t *);
88 extern int dm_getall_dmattr(dm_sessid_t, void *, size_t, 
89                 dm_token_t, size_t, void *, size_t *);
90
91
92 The following functions have no prototypes in <sys/dmapi/dmapi.h> but do link.
93
94 extern int dm_obj_ref_hold(dm_sessid_t, dm_token_t, void *, size_t);
95 extern int dm_obj_ref_rele(dm_sessid_t, dm_token_t, void *, size_t);
96 extern int dm_obj_ref_query(dm_sessid_t, dm_token_t, void *, size_t);
97
98
99 The following Veritas prototypes are different in some way from the
100 spec prototypes, either in parameter types, return value types, or in
101 some semantic way.  Look below to see the spec versions of the prototypes.
102
103 extern int dm_downgrade_right(dm_sessid_t, void *, size_t, 
104                 dm_token_t, int, dm_right_t);
105 extern int dm_get_config_events(void *, size_t, u_int,
106                 dm_eventset_t *, u_int *);
107 extern int dm_get_events(dm_sessid_t, u_int, int, size_t, void *, size_t *);
108 extern int dm_get_mountinfo(dm_sessid_t, dm_token_t, void *, size_t, 
109                 size_t, void *, size_t *);
110 extern int dm_init_service(void);
111 extern int dm_make_handle(dev_t , long, long, void **, size_t *);
112 extern int dm_make_fshandle(dev_t , void **, size_t *);
113 extern dev_t dm_handle_to_dev(void *, size_t);
114 extern long dm_handle_to_fgen(void *, size_t);
115 extern long dm_handle_to_ino(void *, size_t);
116 extern int dm_pending(dm_sessid_t, void *, size_t, dm_token_t, int);
117 extern dm_ssize_t dm_read_invis(dm_sessid_t, void *, size_t,
118                 dm_token_t, dm_off_t, dm_ssize_t, void *);
119 extern dm_ssize_t dm_write_invis(dm_sessid_t, void *, size_t,
120                 dm_token_t, dm_off_t, dm_ssize_t, void *, int);
121 extern int dm_request_right(dm_sessid_t, void *, size_t, 
122                 dm_token_t, int, dm_right_t);
123 extern int dm_set_inherit(dm_sessid_t, void *, size_t,
124                 dm_token_t, dm_attrname_t *, u_int);
125 extern int dm_set_return_ondestroy(dm_sessid_t, void *, size_t,
126                 dm_token_t,  dm_attrname_t *, int);
127 extern int dm_upgrade_right(dm_sessid_t, void *, size_t, 
128                 dm_token_t, int, dm_right_t);
129 extern int dm_set_region(dm_sessid_t, void *, size_t,
130                 dm_token_t, u_int, dm_region_t *, u_int *);
131 extern dm_ssize_t dm_sync_by_handle(dm_sessid_t, void *, size_t, dm_token_t);
132
133
134 The following Veritas prototype exists in <sys/dmapi/dmapi.h> but
135 does not appear in the spec.
136
137 extern void dm_attach_event(dm_sessid_t, dm_token_t);
138
139 The following functions exist in the Veritas library libdmi.a, but have no
140 prototypes within <sys/dmapi/dmapi.h>.  Their function is unknown.
141
142 dm_attach_event_nofork
143 dm_event_query
144 dm_event_valid
145 dm_get_disp
146 dm_set_resident
147 dmregion_compare
148 kdm_get_eventinfo
149 kdm_get_sessioninfo
150
151 -------------- end of Veritas-specific hack documentation --------------- */
152
153 #ifdef  VERITAS_21
154
155 #include <sys/types.h>
156
157 #include <sys/dmapi/dmapi.h>
158
159 /* Rename functions whose prototypes clash with the XDSM standard.  (Library
160    routines map from XDSM functions back to Veritas functions.)
161 */
162
163 #define dm_downgrade_right      xvfs_dm_downgrade_right
164 #define dm_fd_to_handle         xvfs_dm_fd_to_handle
165 #define dm_get_events           xvfs_dm_get_events
166 #define dm_get_mountinfo        xvfs_dm_get_mountinfo
167 #define dm_handle_to_ino        xvfs_dm_handle_to_ino
168 #define dm_init_service         xvfs_dm_init_service
169 #define dm_make_fshandle        xvfs_dm_make_fshandle
170 #define dm_make_handle          xvfs_dm_make_handle
171 #define dm_path_to_fshandle     xvfs_dm_path_to_fshandle
172 #define dm_path_to_handle       xvfs_dm_path_to_handle
173 #define dm_pending              xvfs_dm_pending
174 #define dm_read_invis           xvfs_dm_read_invis
175 #define dm_write_invis          xvfs_dm_write_invis
176 #define dm_request_right        xvfs_dm_request_right
177 #define dm_set_inherit          xvfs_dm_set_inherit
178 #define dm_set_region           xvfs_dm_set_region
179 #define dm_sync_by_handle       xvfs_dm_sync_by_handle
180 #define dm_upgrade_right        xvfs_dm_upgrade_right
181
182
183 #define DM_ATTR_NAME_SIZE       8
184 #undef  DM_ATTRNAME_SIZE
185 #define DM_VER_STR_CONTENTS     "Veritas DMAPI V1.0"
186
187 #define DM_EV_WAIT      0x1
188 #define DM_RR_WAIT      0x1
189 #undef  DM_WAIT
190 #undef  DM_NOWAIT
191 #undef  DM_EVENT_NOWAIT
192
193 #define DM_CONFIG_INHERIT_ATTRIBS       (DM_CONFIG_LOCK_UPGRADE + 1)
194 #undef  DM_CONFIG_INHERIT
195 #define DM_CONFIG_MAX_HANDLE_SIZE       (DM_CONFIG_INHERIT_ATTRIBS + 1)
196 #undef  DM_CONFIG_MAX_FILE_HANDLE_SIZE
197 #define DM_CONFIG_MAX_ATTR_ON_DESTROY   (DM_CONFIG_MAX_HANDLE_SIZE + 1)
198 #undef  DM_CONFIG_MAX_ATTR_BYTES_ON_DESTROY
199 #define DM_CONFIG_OBJ_REF               (DM_CONFIG_MAX_ATTR_ON_DESTROY + 1)
200 #define DM_CONFIG_DTIME_OVERLOAD        (DM_CONFIG_OBJ_REF + 1)
201 #undef  DM_CONFIG_MAX
202
203 #define DM_AT_DTIME     DM_AT_DTIMES
204
205 /* In the dm_fileattr_t structure, Veritas used 'timeval' structures for all
206    the time fields while XDSM uses 'time_t' structures.  Define some symbols
207    that can be used for the time fields with all implementation types.
208 */
209
210 #define FA_ATIME        fa_atime.tv_sec
211 #define FA_MTIME        fa_atime.tv_sec
212 #define FA_CTIME        fa_ctime.tv_sec
213 #define FA_DTIME        fa_dtime.tv_sec
214
215 #define DM_WRITE_SYNC   0x1     /* used in dm_write_invis() */
216
217 #define DM_UNMOUNT_FORCE 0x1    /* ne_mode field in dm_namesp_event_t */
218
219 /* Rename one event to match the XDSM standard. */
220
221 #define DM_EVENT_CLOSE          (DM_EVENT_DESTROY + 1)
222 #undef  DM_EVENT_CLOSED
223
224 /* DM_EVENT_CANCEL is defined above DM_EVENT_MAX, and is unsupported. */
225
226 #undef  DM_REGION_VALIDFLAG
227
228 /* Add missing typedefs */
229
230 typedef u_int   dm_boolean_t;
231 typedef dev_t   dm_fsid_t;      /* This could be made a uint64_t with work! */
232 typedef long    dm_igen_t;
233 typedef long    dm_ino_t;
234 typedef u_int   dm_sequence_t;
235
236
237 /* Define missing fields within the various event structures. */
238
239 #define ev_sequence     ev_token        /* for compilation only!  Won't work! */
240
241 #define ds_handle       te_handle       /* fix fields in dm_destroy_event_t */
242 #define ds_attrname     te_attrname
243 #define ds_attrcopy     te_attrdata
244
245
246 struct  dm_cancel_event {               /* define missing dm_cancel_event_t */
247         dm_sequence_t   ce_sequence;
248         dm_token_t      ce_token;
249 };
250 typedef struct dm_cancel_event  dm_cancel_event_t;
251
252
253 struct  dm_mount_event {                /* define missing dm_mount_event_t */
254         mode_t          me_mode;
255         dm_vardata_t    me_handle1;
256         dm_vardata_t    me_handle2;
257         dm_vardata_t    me_name1;
258         dm_vardata_t    me_name2;
259         dm_vardata_t    me_roothandle;
260 };
261 typedef struct dm_mount_event   dm_mount_event_t;
262
263
264 /* Add the missing dm_timestruct_t structure used by dm_pending. */
265
266 struct  dm_timestruct {
267         time_t          dm_tv_sec;
268         int             dm_tv_nsec;
269 };
270 typedef struct dm_timestruct dm_timestruct_t;
271
272 #endif
273
274
275
276 /* -------------------- SGI-specific hack documentation -------------------
277
278    There are various fields within DMAPI structures that are not supported.
279    Fill in this information someday.
280
281    The following functions have prototypes defined in <sys/dmi.h> and have
282    entry points defined in libdm.so, but they are not actually implemented
283    within the kernel.  They all return ENOSYS if called.
284
285         dm_clear_inherit
286         dm_create_by_handle
287         dm_get_bulkall
288         dm_getall_inherit
289         dm_mkdir_by_handle
290         dm_set_inherit
291         dm_symlink_by_handle
292
293    The DMAPI functions which deal with rights do not work as described in
294    the specification.  While the functions exist and are callable, they
295    always return successfully without actually obtaining any locks within
296    the filesystem.                        
297
298         dm_downgrade_right
299         dm_query_right
300         dm_release_right
301         dm_request_right
302         dm_upgrade_right
303
304    The following non-standard SGI prototype is added to the DMAPI interface
305    so that real-time files may be migrated and recalled.
306
307         dm_get_dioinfo
308
309 -------------- end of SGI-specific hack documentation --------------- */
310
311 #ifdef  __sgi
312
313 #include <sys/dmi.h>
314
315 /* In the dm_fileattr_t structure, Veritas used 'timeval' structures for all
316    the time fields while XDSM uses 'time_t' structures.  Define some symbols
317    that can be used for the time fields with all implementation types.
318 */
319
320 #define FA_ATIME        fa_atime
321 #define FA_MTIME        fa_mtime
322 #define FA_CTIME        fa_ctime
323 #define FA_DTIME        fa_dtime
324
325 #endif /* __sgi */
326
327 #ifdef  linux
328
329 #include <dmapi.h>
330
331 /* In the dm_fileattr_t structure, Veritas used 'timeval' structures for all
332    the time fields while XDSM uses 'time_t' structures.  Define some symbols
333    that can be used for the time fields with all implementation types.
334 */
335
336 #define FA_ATIME        fa_atime
337 #define FA_MTIME        fa_mtime
338 #define FA_CTIME        fa_ctime
339 #define FA_DTIME        fa_dtime
340
341 #endif /* linux */
342
343 /* ----------------------- XDSM standard prototypes ----------------------- */
344
345 /* The following list provides the prototypes for all functions defined in
346    the DMAPI interface spec from X/Open (XDSM) dated February 1997.  They
347    are here to force compiler errors in case the Veritas or SGI DMAPI
348    prototypes should ever change without our knowing about it.
349 */
350
351 extern int
352 dm_clear_inherit(
353         dm_sessid_t     sid,
354         void            *hanp,
355         size_t          hlen,
356         dm_token_t      token,
357         dm_attrname_t   *attrnamep);
358
359 extern int
360 dm_create_by_handle(
361         dm_sessid_t     sid,
362         void            *dirhanp,
363         size_t          dirhlen,
364         dm_token_t      token,
365         void            *hanp,
366         size_t          hlen,
367         char            *cname);
368
369 extern int
370 dm_create_session(
371         dm_sessid_t     oldsid,
372         char            *sessinfop,
373         dm_sessid_t     *newsidp);
374
375 extern int
376 dm_create_userevent(
377         dm_sessid_t     sid,
378         size_t          msglen,
379         void            *msgdatap,
380         dm_token_t      *tokenp);
381
382 extern int
383 dm_destroy_session(
384         dm_sessid_t     sid);
385
386 extern int
387 dm_downgrade_right(
388         dm_sessid_t     sid,
389         void            *hanp,
390         size_t          hlen,
391         dm_token_t      token);
392
393 extern int
394 dm_fd_to_handle(
395         int             fd,
396         void            **hanpp,
397         size_t          *hlenp);
398
399 extern int
400 dm_find_eventmsg(
401         dm_sessid_t     sid,
402         dm_token_t      token,
403         size_t          buflen,
404         void            *bufp,
405         size_t          *rlenp);
406
407 extern int
408 dm_get_allocinfo(
409         dm_sessid_t     sid,
410         void            *hanp,
411         size_t          hlen,
412         dm_token_t      token,
413         dm_off_t        *offp,
414         u_int           nelem,
415         dm_extent_t     *extentp,
416         u_int           *nelemp);
417
418 extern int
419 dm_get_bulkall(
420         dm_sessid_t     sid,
421         void            *hanp,
422         size_t          hlen,
423         dm_token_t      token,
424         u_int           mask,
425         dm_attrname_t   *attrnamep,
426         dm_attrloc_t    *locp,
427         size_t          buflen,
428         void            *bufp,
429         size_t          *rlenp);
430
431 extern int
432 dm_get_bulkattr(
433         dm_sessid_t     sid,
434         void            *hanp,
435         size_t          hlen,
436         dm_token_t      token,
437         u_int           mask,
438         dm_attrloc_t    *locp,
439         size_t          buflen,
440         void            *bufp,
441         size_t          *rlenp);
442
443 extern int
444 dm_get_config(
445         void            *hanp,
446         size_t          hlen,
447         dm_config_t     flagname,
448         dm_size_t       *retvalp);
449
450 extern int
451 dm_get_config_events(
452         void            *hanp,
453         size_t          hlen,
454         u_int           nelem,
455         dm_eventset_t   *eventsetp,
456         u_int           *nelemp);
457
458 extern int
459 dm_get_dirattrs(
460         dm_sessid_t     sid,
461         void            *hanp,
462         size_t          hlen,
463         dm_token_t      token,
464         u_int           mask,
465         dm_attrloc_t    *locp,
466         size_t          buflen,
467         void            *bufp,
468         size_t          *rlenp);
469
470 extern int
471 dm_get_dmattr(
472         dm_sessid_t     sid,
473         void            *hanp,
474         size_t          hlen,
475         dm_token_t      token,
476         dm_attrname_t   *attrnamep,
477         size_t          buflen,
478         void            *bufp,
479         size_t          *rlenp);
480
481 extern int
482 dm_get_eventlist(
483         dm_sessid_t     sid,
484         void            *hanp,
485         size_t          hlen,
486         dm_token_t      token,
487         u_int           nelem,
488         dm_eventset_t   *eventsetp,
489         u_int           *nelemp);
490
491 extern int
492 dm_get_events(
493         dm_sessid_t     sid,
494         u_int           maxmsgs,
495         u_int           flags,
496         size_t          buflen,
497         void            *bufp,
498         size_t          *rlenp);
499
500 extern int
501 dm_get_fileattr(
502         dm_sessid_t     sid,
503         void            *hanp,
504         size_t          hlen,
505         dm_token_t      token,
506         u_int           mask,
507         dm_stat_t       *statp);
508
509 extern int
510 dm_get_mountinfo(
511         dm_sessid_t     sid,
512         void            *hanp,
513         size_t          hlen,
514         dm_token_t      token,
515         size_t          buflen,
516         void            *bufp,
517         size_t          *rlenp);
518
519 extern int
520 dm_get_region(
521         dm_sessid_t     sid,
522         void            *hanp,
523         size_t          hlen,
524         dm_token_t      token,
525         u_int           nelem,
526         dm_region_t     *regbufp,
527         u_int           *nelemp);
528
529 extern int
530 dm_getall_disp(
531         dm_sessid_t     sid,
532         size_t          buflen,
533         void            *bufp,
534         size_t          *rlenp);
535
536 extern int
537 dm_getall_dmattr(
538         dm_sessid_t     sid,
539         void            *hanp,
540         size_t          hlen,
541         dm_token_t      token,
542         size_t          buflen,
543         void            *bufp,
544         size_t          *rlenp);
545
546 extern int
547 dm_getall_inherit(
548         dm_sessid_t     sid,
549         void            *hanp,
550         size_t          hlen,
551         dm_token_t      token,
552         u_int           nelem,
553         dm_inherit_t    *inheritbufp,
554         u_int           *nelemp);
555
556 extern int
557 dm_getall_sessions(
558         u_int           nelem,
559         dm_sessid_t     *sidbufp,
560         u_int           *nelemp);
561
562 extern int
563 dm_getall_tokens(
564         dm_sessid_t     sid,
565         u_int           nelem,
566         dm_token_t      *tokenbufp,
567         u_int           *nelemp);
568
569 extern int
570 dm_handle_cmp(
571         void            *hanp1,
572         size_t          hlen1,
573         void            *hanp2,
574         size_t          hlen2);
575
576 extern void
577 dm_handle_free(
578         void            *hanp,
579         size_t          hlen);
580
581 extern u_int
582 dm_handle_hash(
583         void            *hanp,
584         size_t          hlen);
585
586 extern dm_boolean_t
587 dm_handle_is_valid(
588         void            *hanp,
589         size_t          hlen);
590
591 extern int
592 dm_handle_to_fshandle(
593         void            *hanp,
594         size_t          hlen,
595         void            **fshanpp,
596         size_t          *fshlenp);
597
598 extern int
599 dm_handle_to_fsid(
600         void            *hanp,
601         size_t          hlen,
602         dm_fsid_t       *fsidp);
603
604 extern int
605 dm_handle_to_igen(
606         void            *hanp,
607         size_t          hlen,
608         dm_igen_t       *igenp);
609
610 extern int
611 dm_handle_to_ino(
612         void            *hanp,
613         size_t          hlen,
614         dm_ino_t        *inop);
615
616 extern int
617 dm_handle_to_path(
618         void            *dirhanp,
619         size_t          dirhlen,
620         void            *targhanp,
621         size_t          targhlen,
622         size_t          buflen,
623         char            *pathbufp,
624         size_t          *rlenp);
625
626 extern int
627 dm_init_attrloc(
628         dm_sessid_t     sid,
629         void            *hanp,
630         size_t          hlen,
631         dm_token_t      token,
632         dm_attrloc_t    *locp);
633
634 extern int
635 dm_init_service(
636         char            **versionstrpp);
637
638 extern int
639 dm_make_fshandle(
640         dm_fsid_t       *fsidp,
641         void            **hanpp,
642         size_t          *hlenp);
643
644 extern int
645 dm_make_handle(
646         dm_fsid_t       *fsidp,
647         dm_ino_t        *inop,
648         dm_igen_t       *igenp,
649         void            **hanpp,
650         size_t          *hlenp);
651
652 extern int
653 dm_mkdir_by_handle(
654         dm_sessid_t     sid,
655         void            *dirhanp,
656         size_t          dirhlen,
657         dm_token_t      token,
658         void            *hanp,
659         size_t          hlen,
660         char            *cname);
661
662 extern int
663 dm_move_event(
664         dm_sessid_t     srcsid,
665         dm_token_t      token,
666         dm_sessid_t     targetsid,
667         dm_token_t      *rtokenp);
668
669 extern int
670 dm_obj_ref_hold(
671         dm_sessid_t     sid,
672         dm_token_t      token,
673         void            *hanp,
674         size_t          hlen);
675
676 extern int
677 dm_obj_ref_query(
678         dm_sessid_t     sid,
679         dm_token_t      token,
680         void            *hanp,
681         size_t          hlen);
682
683 extern int
684 dm_obj_ref_rele(
685         dm_sessid_t     sid,
686         dm_token_t      token,
687         void            *hanp,
688         size_t          hlen);
689
690 extern int
691 dm_path_to_fshandle(
692         char            *path,
693         void            **hanpp,
694         size_t          *hlenp);
695
696 extern int
697 dm_path_to_handle(
698         char            *path,
699         void            **hanpp,
700         size_t          *hlenp);
701
702 extern int
703 dm_pending(
704         dm_sessid_t     sid,
705         dm_token_t      token,
706         dm_timestruct_t *delay);
707
708 extern int
709 dm_probe_hole(
710         dm_sessid_t     sid,
711         void            *hanp,
712         size_t          hlen,
713         dm_token_t      token,
714         dm_off_t        off,
715         dm_size_t       len,
716         dm_off_t        *roffp,
717         dm_size_t       *rlenp);
718
719 extern int
720 dm_punch_hole(
721         dm_sessid_t     sid,
722         void            *hanp,
723         size_t          hlen,
724         dm_token_t      token,
725         dm_off_t        off,
726         dm_size_t       len);
727
728 extern int
729 dm_query_right(
730         dm_sessid_t     sid,
731         void            *hanp,
732         size_t          hlen,
733         dm_token_t      token,
734         dm_right_t      *rightp);
735
736 extern int
737 dm_query_session(
738         dm_sessid_t     sid,
739         size_t          buflen,
740         void            *bufp,
741         size_t          *rlenp);
742
743 extern dm_ssize_t
744 dm_read_invis(
745         dm_sessid_t     sid,
746         void            *hanp,
747         size_t          hlen,
748         dm_token_t      token,
749         dm_off_t        off,
750         dm_size_t       len,
751         void            *bufp);
752
753 extern int
754 dm_release_right(
755         dm_sessid_t     sid,
756         void            *hanp,
757         size_t          hlen,
758         dm_token_t      token);
759
760 extern int
761 dm_remove_dmattr(
762         dm_sessid_t     sid,
763         void            *hanp,
764         size_t          hlen,
765         dm_token_t      token,
766         int             setdtime,
767         dm_attrname_t   *attrnamep);
768
769 extern int
770 dm_request_right(
771         dm_sessid_t     sid,
772         void            *hanp,
773         size_t          hlen,
774         dm_token_t      token,
775         u_int           flags,
776         dm_right_t      right);
777
778 extern int
779 dm_respond_event(
780         dm_sessid_t     sid,
781         dm_token_t      token,
782         dm_response_t   response,
783         int             reterror,
784         size_t          buflen,
785         void            *respbufp);
786
787 extern int
788 dm_send_msg(
789         dm_sessid_t     targetsid,
790         dm_msgtype_t    msgtype,
791         size_t          buflen,
792         void            *bufp);
793
794 extern int
795 dm_set_disp(
796         dm_sessid_t     sid,
797         void            *hanp,
798         size_t          hlen,
799         dm_token_t      token,
800         dm_eventset_t   *eventsetp,
801         u_int           maxevent);
802
803 extern int
804 dm_set_dmattr(
805         dm_sessid_t     sid,
806         void            *hanp,
807         size_t          hlen,
808         dm_token_t      token,
809         dm_attrname_t   *attrnamep,
810         int             setdtime,
811         size_t          buflen,
812         void            *bufp);
813
814 extern int
815 dm_set_eventlist(
816         dm_sessid_t     sid,
817         void            *hanp,
818         size_t          hlen,
819         dm_token_t      token,
820         dm_eventset_t   *eventsetp,
821         u_int           maxevent);
822
823 extern int
824 dm_set_fileattr(
825         dm_sessid_t     sid,
826         void            *hanp,
827         size_t          hlen,
828         dm_token_t      token,
829         u_int           mask,
830         dm_fileattr_t   *attrp);
831
832 extern int
833 dm_set_inherit(
834         dm_sessid_t     sid,
835         void            *hanp,
836         size_t          hlen,
837         dm_token_t      token,
838         dm_attrname_t   *attrnamep,
839         mode_t          mode);
840
841 extern int
842 dm_set_region(
843         dm_sessid_t     sid,
844         void            *hanp,
845         size_t          hlen,
846         dm_token_t      token,
847         u_int           nelem,
848         dm_region_t     *regbufp,
849         dm_boolean_t    *exactflagp);
850
851 extern int
852 dm_set_return_on_destroy(
853         dm_sessid_t     sid,
854         void            *hanp,
855         size_t          hlen,
856         dm_token_t      token,
857         dm_attrname_t   *attrnamep,
858         dm_boolean_t    enable);
859
860 extern int
861 dm_symlink_by_handle(
862         dm_sessid_t     sid,
863         void            *dirhanp,
864         size_t          dirhlen,
865         dm_token_t      token,
866         void            *hanp,
867         size_t          hlen,
868         char            *cname,
869         char            *path);
870
871 extern int
872 dm_sync_by_handle(
873         dm_sessid_t     sid,
874         void            *hanp,
875         size_t          hlen,
876         dm_token_t      token);
877
878 extern int
879 dm_upgrade_right(
880         dm_sessid_t     sid,
881         void            *hanp,
882         size_t          hlen,
883         dm_token_t      token);
884
885 extern dm_ssize_t
886 dm_write_invis(
887         dm_sessid_t     sid,
888         void            *hanp,
889         size_t          hlen,
890         dm_token_t      token,
891         int             flags,
892         dm_off_t        off,
893         dm_size_t       len,
894         void            *bufp);
895
896
897 #ifdef  __cplusplus
898 }
899 #endif
900
901 #endif  /* _DMFSAPI_DMPORT_H */