Annotation of src/sys/fs/puffs/puffs_msgif.h, Revision 1.74
1.74 ! pooka 1: /* $NetBSD: puffs_msgif.h,v 1.73 2010/05/21 11:29:42 pooka Exp $ */
1.1 pooka 2:
3: /*
1.56 pooka 4: * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
1.1 pooka 5: *
6: * Development of this software was supported by the
7: * Google Summer of Code program and the Ulla Tuominen Foundation.
8: * The Google SoC project was mentored by Bill Studenmund.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20: * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29: * SUCH DAMAGE.
30: */
31:
1.48 pooka 32: #ifndef _FS_PUFFS_PUFFS_MSGIF_H_
33: #define _FS_PUFFS_PUFFS_MSGIF_H_
1.1 pooka 34:
35: #include <sys/param.h>
36: #include <sys/time.h>
37: #include <sys/ioccom.h>
38: #include <sys/uio.h>
39: #include <sys/vnode.h>
40: #include <sys/ucred.h>
41: #include <sys/statvfs.h>
42: #include <sys/dirent.h>
43: #include <sys/fcntl.h>
44:
1.60 pooka 45: #include <dev/putter/putter.h>
46:
1.46 pooka 47: #include <uvm/uvm_prot.h>
48:
1.62 pooka 49: #define PUFFSOP_VFS 0x01 /* kernel-> */
50: #define PUFFSOP_VN 0x02 /* kernel-> */
51: #define PUFFSOP_CACHE 0x03 /* only kernel-> */
52: #define PUFFSOP_ERROR 0x04 /* only kernel-> */
53: #define PUFFSOP_FLUSH 0x05 /* ->kernel */
54: #define PUFFSOP_SUSPEND 0x06 /* ->kernel */
1.69 pooka 55: #define PUFFSOP_UNMOUNT 0x07 /* ->kernel */
1.62 pooka 56:
1.56 pooka 57: #define PUFFSOPFLAG_FAF 0x10 /* fire-and-forget */
1.62 pooka 58: #define PUFFSOPFLAG_ISRESPONSE 0x20 /* req is actually a resp */
1.5 pooka 59:
1.51 pooka 60: #define PUFFSOP_OPCMASK 0x07
1.5 pooka 61: #define PUFFSOP_OPCLASS(a) ((a) & PUFFSOP_OPCMASK)
1.6 pooka 62: #define PUFFSOP_WANTREPLY(a) (((a) & PUFFSOPFLAG_FAF) == 0)
1.1 pooka 63:
64: enum {
65: PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT,
1.72 pooka 66: PUFFS_VFS_ROOT, PUFFS_VFS_QUOTACTL, PUFFS_VFS_STATVFS,
67: PUFFS_VFS_SYNC, PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP,
68: PUFFS_VFS_VPTOFH, PUFFS_VFS_INIT, PUFFS_VFS_DONE,
69: PUFFS_VFS_SNAPSHOT, PUFFS_VFS_EXTATTRCTL, PUFFS_VFS_SUSPEND
1.1 pooka 70: };
1.72 pooka 71: #define PUFFS_VFS_MAX PUFFS_VFS_SUSPEND
1.1 pooka 72:
73: enum {
74: PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD,
75: PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS,
76: PUFFS_VN_GETATTR, PUFFS_VN_SETATTR, PUFFS_VN_READ,
77: PUFFS_VN_WRITE, PUFFS_VN_IOCTL, PUFFS_VN_FCNTL,
78: PUFFS_VN_POLL, PUFFS_VN_KQFILTER, PUFFS_VN_REVOKE,
79: PUFFS_VN_MMAP, PUFFS_VN_FSYNC, PUFFS_VN_SEEK,
80: PUFFS_VN_REMOVE, PUFFS_VN_LINK, PUFFS_VN_RENAME,
81: PUFFS_VN_MKDIR, PUFFS_VN_RMDIR, PUFFS_VN_SYMLINK,
82: PUFFS_VN_READDIR, PUFFS_VN_READLINK, PUFFS_VN_ABORTOP,
83: PUFFS_VN_INACTIVE, PUFFS_VN_RECLAIM, PUFFS_VN_LOCK,
84: PUFFS_VN_UNLOCK, PUFFS_VN_BMAP, PUFFS_VN_STRATEGY,
85: PUFFS_VN_PRINT, PUFFS_VN_ISLOCKED, PUFFS_VN_PATHCONF,
86: PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT,
87: PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR,
88: PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR,
1.72 pooka 89: PUFFS_VN_SETEXTATTR, PUFFS_VN_CLOSEEXTATTR
90: /* NOTE: If you add an op, decrement PUFFS_VN_SPARE accordingly */
1.1 pooka 91: };
1.72 pooka 92: #define PUFFS_VN_MAX PUFFS_VN_CLOSEEXTATTR
93: #define PUFFS_VN_SPARE 32
1.1 pooka 94:
1.54 pooka 95: /*
96: * These signal invalid parameters the file system returned.
97: */
1.51 pooka 98: enum {
1.72 pooka 99: PUFFS_ERR_ERROR,
1.51 pooka 100: PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR,
101: PUFFS_ERR_READLINK, PUFFS_ERR_READ, PUFFS_ERR_WRITE,
1.72 pooka 102: PUFFS_ERR_VPTOFH, PUFFS_ERR_GETEXTATTR, PUFFS_ERR_LISTEXTATTR
1.51 pooka 103: };
1.72 pooka 104: #define PUFFS_ERR_MAX PUFFS_ERR_LISTEXTATTR
1.51 pooka 105:
1.72 pooka 106: #define PUFFSVERSION 30
1.1 pooka 107: #define PUFFSNAMESIZE 32
1.42 pooka 108:
1.47 pooka 109: #define PUFFS_TYPEPREFIX "puffs|"
110:
1.43 pooka 111: #define PUFFS_TYPELEN (_VFS_NAMELEN - (sizeof(PUFFS_TYPEPREFIX)+1))
112: #define PUFFS_NAMELEN (_VFS_MNAMELEN-1)
1.42 pooka 113:
1.65 pooka 114: /*
115: * Just a weak typedef for code clarity. Additionally, we have a
116: * more appropriate vanity type for puffs:
117: * <uep> it should be croissant, not cookie.
118: */
119: typedef void *puffs_cookie_t;
120: typedef puffs_cookie_t puffs_croissant_t;
121:
1.25 pooka 122: struct puffs_kargs {
1.14 pooka 123: unsigned int pa_vers;
1.1 pooka 124: int pa_fd;
1.54 pooka 125:
1.9 pooka 126: uint32_t pa_flags;
1.26 pooka 127:
1.56 pooka 128: size_t pa_maxmsglen;
1.27 pooka 129: int pa_nhashbuckets;
130:
1.26 pooka 131: size_t pa_fhsize;
1.27 pooka 132: int pa_fhflags;
1.26 pooka 133:
1.72 pooka 134: uint8_t pa_vnopmask[PUFFS_VN_MAX + PUFFS_VN_SPARE];
135:
136: char pa_typename[_VFS_NAMELEN];
137: char pa_mntfromname[_VFS_MNAMELEN];
138:
1.65 pooka 139: puffs_cookie_t pa_root_cookie;
1.30 pooka 140: enum vtype pa_root_vtype;
141: voff_t pa_root_vsize;
1.72 pooka 142: union {
143: dev_t dev;
144: uint64_t container;
145: } devunion;
1.30 pooka 146:
147: struct statvfs pa_svfsb;
1.54 pooka 148:
1.72 pooka 149: uint32_t pa_spare[128];
150: };
151: #define pa_root_rdev devunion.dev
1.42 pooka 152:
1.34 pooka 153: #define PUFFS_KFLAG_NOCACHE_NAME 0x01 /* don't use name cache */
154: #define PUFFS_KFLAG_NOCACHE_PAGE 0x02 /* don't use page cache */
1.35 pooka 155: #define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */
1.34 pooka 156: #define PUFFS_KFLAG_ALLOPS 0x04 /* ignore pa_vnopmask */
157: #define PUFFS_KFLAG_WTCACHE 0x08 /* write-through page cache */
158: #define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */
1.38 pooka 159: #define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */
1.41 pooka 160: #define PUFFS_KFLAG_MASK 0x3f
1.73 pooka 161: #define PUFFS_KFLAG_NOCACHE_ATTR 0x40 /* no attrib cache (unused) */
1.27 pooka 162:
1.50 pooka 163: #define PUFFS_FHFLAG_DYNAMIC 0x01
164: #define PUFFS_FHFLAG_NFSV2 0x02
165: #define PUFFS_FHFLAG_NFSV3 0x04
166: #define PUFFS_FHFLAG_PROTOMASK 0x06
167: #define PUFFS_FHFLAG_PASSTHROUGH 0x08
168: #define PUFFS_FHFLAG_MASK 0x0f
1.27 pooka 169:
1.72 pooka 170: #define PUFFS_FHSIZE_MAX 1020 /* FHANDLE_SIZE_MAX - 4 */
1.1 pooka 171:
1.56 pooka 172: struct puffs_req {
1.60 pooka 173: struct putter_hdr preq_pth;
1.56 pooka 174:
175: uint64_t preq_id;
1.65 pooka 176: puffs_cookie_t preq_cookie;
1.56 pooka 177:
1.60 pooka 178: uint16_t preq_opclass;
179: uint16_t preq_optype;
1.56 pooka 180: int preq_rv;
181:
182: uint32_t preq_setbacks;
183:
1.59 pooka 184: /* Who is making the call? Eventually host id is also needed. */
185: pid_t preq_pid;
186: lwpid_t preq_lid;
187:
1.56 pooka 188: /*
189: * the following helper pads the struct size to md alignment
190: * multiple (should size_t not cut it). it makes sure that
191: * whatever comes after this struct is aligned
192: */
193: size_t preq_buflen;
194: uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);
195: };
196:
1.29 pooka 197: #define PUFFS_SETBACK_INACT_N1 0x01 /* set VOP_INACTIVE for node 1 */
198: #define PUFFS_SETBACK_INACT_N2 0x02 /* set VOP_INACTIVE for node 2 */
1.32 pooka 199: #define PUFFS_SETBACK_NOREF_N1 0x04 /* set pn PN_NOREFS for node 1 */
200: #define PUFFS_SETBACK_NOREF_N2 0x08 /* set pn PN_NOREFS for node 2 */
201: #define PUFFS_SETBACK_MASK 0x0f
1.29 pooka 202:
1.1 pooka 203: /*
1.16 pooka 204: * Flush operation. This can be used to invalidate:
205: * 1) name cache for one node
206: * 2) name cache for all children
207: * 3) name cache for the entire mount
208: * 4) page cache for a set of ranges in one node
209: * 5) page cache for one entire node
210: *
211: * It can be used to flush:
212: * 1) page cache for a set of ranges in one node
213: * 2) page cache for one entire node
214: */
215:
216: struct puffs_flush {
1.60 pooka 217: struct puffs_req pf_req;
1.16 pooka 218:
1.65 pooka 219: puffs_cookie_t pf_cookie;
1.56 pooka 220:
221: int pf_op;
222: off_t pf_start;
223: off_t pf_end;
1.16 pooka 224: };
225: #define PUFFS_INVAL_NAMECACHE_NODE 0
226: #define PUFFS_INVAL_NAMECACHE_DIR 1
227: #define PUFFS_INVAL_NAMECACHE_ALL 2
228: #define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3
1.23 pooka 229: #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE 4
1.16 pooka 230:
231: /*
1.1 pooka 232: * Credentials for an operation. Can be either struct uucred for
233: * ops called from a credential context or NOCRED/FSCRED for ops
234: * called from within the kernel. It is up to the implementation
235: * if it makes a difference between these two and the super-user.
236: */
1.36 pooka 237: struct puffs_kcred {
238: struct uucred pkcr_uuc;
239: uint8_t pkcr_type;
240: uint8_t pkcr_internal;
1.1 pooka 241: };
242: #define PUFFCRED_TYPE_UUC 1
243: #define PUFFCRED_TYPE_INTERNAL 2
244: #define PUFFCRED_CRED_NOCRED 1
245: #define PUFFCRED_CRED_FSCRED 2
246:
247: /*
1.22 pooka 248: * 2*MAXPHYS is the max size the system will attempt to copy,
1.1 pooka 249: * else treated as garbage
250: */
1.56 pooka 251: #define PUFFS_MSG_MAXSIZE 2*MAXPHYS
1.72 pooka 252: #define PUFFS_MSGSTRUCT_MAX 4096 /* approximate */
1.1 pooka 253:
1.71 pooka 254: #define PUFFS_EXTNAMELEN NAME_MAX /* currently same as EXTATTR_MAXNAMELEN */
255:
1.56 pooka 256: #define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX))
1.1 pooka 257:
1.13 pooka 258: /* puffs struct componentname built by kernel */
259: struct puffs_kcn {
1.1 pooka 260: /* args */
1.49 pooka 261: uint32_t pkcn_nameiop; /* namei operation */
262: uint32_t pkcn_flags; /* flags */
1.13 pooka 263:
1.38 pooka 264: char pkcn_name[MAXPATHLEN]; /* nulterminated path component */
1.49 pooka 265: size_t pkcn_namelen; /* current component length */
266: size_t pkcn_consume; /* IN: extra chars server ate */
1.1 pooka 267: };
268:
1.24 pooka 269:
1.11 pooka 270: /*
271: * Next come the individual requests. They are all subclassed from
272: * puffs_req and contain request-specific fields in addition. Note
273: * that there are some requests which have to handle arbitrary-length
274: * buffers.
275: *
276: * The division is the following: puffs_req is to be touched only
277: * by generic routines while the other stuff is supposed to be
278: * modified only by specific routines.
279: */
1.6 pooka 280:
1.1 pooka 281: /*
282: * aux structures for vfs operations.
283: */
1.56 pooka 284: struct puffs_vfsmsg_unmount {
1.11 pooka 285: struct puffs_req pvfsr_pr;
286:
1.1 pooka 287: int pvfsr_flags;
288: };
289:
1.56 pooka 290: struct puffs_vfsmsg_statvfs {
1.11 pooka 291: struct puffs_req pvfsr_pr;
292:
1.1 pooka 293: struct statvfs pvfsr_sb;
294: };
295:
1.56 pooka 296: struct puffs_vfsmsg_sync {
1.11 pooka 297: struct puffs_req pvfsr_pr;
298:
1.36 pooka 299: struct puffs_kcred pvfsr_cred;
1.1 pooka 300: int pvfsr_waitfor;
301: };
302:
1.56 pooka 303: struct puffs_vfsmsg_fhtonode {
1.24 pooka 304: struct puffs_req pvfsr_pr;
305:
306: void *pvfsr_fhcookie; /* IN */
307: enum vtype pvfsr_vtype; /* IN */
308: voff_t pvfsr_size; /* IN */
309: dev_t pvfsr_rdev; /* IN */
310:
311: size_t pvfsr_dsize; /* OUT */
1.27 pooka 312: uint8_t pvfsr_data[0] /* OUT, XXX */
1.24 pooka 313: __aligned(ALIGNBYTES+1);
314: };
315:
1.56 pooka 316: struct puffs_vfsmsg_nodetofh {
1.24 pooka 317: struct puffs_req pvfsr_pr;
318:
319: void *pvfsr_fhcookie; /* OUT */
320:
321: size_t pvfsr_dsize; /* OUT/IN */
1.27 pooka 322: uint8_t pvfsr_data[0] /* IN, XXX */
1.24 pooka 323: __aligned(ALIGNBYTES+1);
324: };
325:
1.56 pooka 326: struct puffs_vfsmsg_suspend {
1.19 pooka 327: struct puffs_req pvfsr_pr;
328:
329: int pvfsr_status;
330: };
331: #define PUFFS_SUSPEND_START 0
332: #define PUFFS_SUSPEND_SUSPENDED 1
333: #define PUFFS_SUSPEND_RESUME 2
334: #define PUFFS_SUSPEND_ERROR 3
335:
1.71 pooka 336: #define PUFFS_EXTATTRCTL_HASNODE 0x01
337: #define PUFFS_EXTATTRCTL_HASATTRNAME 0x02
338: struct puffs_vfsmsg_extattrctl {
339: struct puffs_req pvfsr_pr;
340:
341: int pvfsr_cmd; /* OUT */
342: int pvfsr_attrnamespace; /* OUT */
343: int pvfsr_flags; /* OUT */
344: char pvfsr_attrname[PUFFS_EXTNAMELEN]; /* OUT */
345: };
346:
1.1 pooka 347: /*
348: * aux structures for vnode operations.
349: */
350:
1.56 pooka 351: struct puffs_vnmsg_lookup {
1.11 pooka 352: struct puffs_req pvn_pr;
353:
1.13 pooka 354: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 355: struct puffs_kcred pvnr_cn_cred; /* OUT */
356:
1.65 pooka 357: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 358: enum vtype pvnr_vtype; /* IN */
1.5 pooka 359: voff_t pvnr_size; /* IN */
1.4 pooka 360: dev_t pvnr_rdev; /* IN */
1.1 pooka 361: };
362:
1.56 pooka 363: struct puffs_vnmsg_create {
1.11 pooka 364: struct puffs_req pvn_pr;
365:
1.13 pooka 366: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 367: struct puffs_kcred pvnr_cn_cred; /* OUT */
368:
1.1 pooka 369: struct vattr pvnr_va; /* OUT */
1.65 pooka 370: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 371: };
372:
1.56 pooka 373: struct puffs_vnmsg_mknod {
1.11 pooka 374: struct puffs_req pvn_pr;
375:
1.13 pooka 376: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 377: struct puffs_kcred pvnr_cn_cred; /* OUT */
378:
1.1 pooka 379: struct vattr pvnr_va; /* OUT */
1.65 pooka 380: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 381: };
382:
1.56 pooka 383: struct puffs_vnmsg_open {
1.11 pooka 384: struct puffs_req pvn_pr;
385:
1.36 pooka 386: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 387: int pvnr_mode; /* OUT */
388: };
389:
1.56 pooka 390: struct puffs_vnmsg_close {
1.11 pooka 391: struct puffs_req pvn_pr;
392:
1.36 pooka 393: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 394: int pvnr_fflag; /* OUT */
395: };
396:
1.56 pooka 397: struct puffs_vnmsg_access {
1.11 pooka 398: struct puffs_req pvn_pr;
399:
1.36 pooka 400: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 401: int pvnr_mode; /* OUT */
402: };
403:
1.56 pooka 404: #define puffs_vnmsg_setattr puffs_vnmsg_setgetattr
405: #define puffs_vnmsg_getattr puffs_vnmsg_setgetattr
406: struct puffs_vnmsg_setgetattr {
1.11 pooka 407: struct puffs_req pvn_pr;
408:
1.36 pooka 409: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 410: struct vattr pvnr_va; /* IN/OUT (op depend) */
411: };
412:
1.56 pooka 413: #define puffs_vnmsg_read puffs_vnmsg_rw
414: #define puffs_vnmsg_write puffs_vnmsg_rw
415: struct puffs_vnmsg_rw {
1.11 pooka 416: struct puffs_req pvn_pr;
417:
1.36 pooka 418: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 419: off_t pvnr_offset; /* OUT */
420: size_t pvnr_resid; /* IN/OUT */
421: int pvnr_ioflag; /* OUT */
422:
423: uint8_t pvnr_data[0]; /* IN/OUT (wr/rd) */
424: };
425:
1.56 pooka 426: #define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl
427: #define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl
428: struct puffs_vnmsg_fcnioctl {
1.11 pooka 429: struct puffs_req pvn_pr;
430:
1.36 pooka 431: struct puffs_kcred pvnr_cred;
1.1 pooka 432: u_long pvnr_command;
433: pid_t pvnr_pid;
434: int pvnr_fflag;
435:
436: void *pvnr_data;
437: size_t pvnr_datalen;
438: int pvnr_copyback;
439: };
440:
1.56 pooka 441: struct puffs_vnmsg_poll {
1.11 pooka 442: struct puffs_req pvn_pr;
443:
1.31 pooka 444: int pvnr_events; /* IN/OUT */
1.1 pooka 445: };
446:
1.56 pooka 447: struct puffs_vnmsg_fsync {
1.11 pooka 448: struct puffs_req pvn_pr;
449:
1.36 pooka 450: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 451: off_t pvnr_offlo; /* OUT */
452: off_t pvnr_offhi; /* OUT */
453: int pvnr_flags; /* OUT */
454: };
455:
1.56 pooka 456: struct puffs_vnmsg_seek {
1.11 pooka 457: struct puffs_req pvn_pr;
458:
1.36 pooka 459: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 460: off_t pvnr_oldoff; /* OUT */
461: off_t pvnr_newoff; /* OUT */
462: };
463:
1.56 pooka 464: struct puffs_vnmsg_remove {
1.11 pooka 465: struct puffs_req pvn_pr;
466:
1.13 pooka 467: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 468: struct puffs_kcred pvnr_cn_cred; /* OUT */
469:
1.65 pooka 470: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 471: };
472:
1.56 pooka 473: struct puffs_vnmsg_mkdir {
1.11 pooka 474: struct puffs_req pvn_pr;
475:
1.13 pooka 476: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 477: struct puffs_kcred pvnr_cn_cred; /* OUT */
478:
1.1 pooka 479: struct vattr pvnr_va; /* OUT */
1.65 pooka 480: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 481: };
482:
1.56 pooka 483: struct puffs_vnmsg_rmdir {
1.11 pooka 484: struct puffs_req pvn_pr;
485:
1.13 pooka 486: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 487: struct puffs_kcred pvnr_cn_cred; /* OUT */
1.37 pooka 488:
1.65 pooka 489: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 490: };
491:
1.56 pooka 492: struct puffs_vnmsg_link {
1.11 pooka 493: struct puffs_req pvn_pr;
494:
1.36 pooka 495: struct puffs_kcn pvnr_cn; /* OUT */
496: struct puffs_kcred pvnr_cn_cred; /* OUT */
1.37 pooka 497:
1.65 pooka 498: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 499: };
500:
1.56 pooka 501: struct puffs_vnmsg_rename {
1.11 pooka 502: struct puffs_req pvn_pr;
503:
1.13 pooka 504: struct puffs_kcn pvnr_cn_src; /* OUT */
1.36 pooka 505: struct puffs_kcred pvnr_cn_src_cred; /* OUT */
1.13 pooka 506: struct puffs_kcn pvnr_cn_targ; /* OUT */
1.36 pooka 507: struct puffs_kcred pvnr_cn_targ_cred; /* OUT */
508:
1.65 pooka 509: puffs_cookie_t pvnr_cookie_src; /* OUT */
510: puffs_cookie_t pvnr_cookie_targ; /* OUT */
511: puffs_cookie_t pvnr_cookie_targdir; /* OUT */
1.1 pooka 512: };
513:
1.56 pooka 514: struct puffs_vnmsg_symlink {
1.11 pooka 515: struct puffs_req pvn_pr;
516:
1.13 pooka 517: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 518: struct puffs_kcred pvnr_cn_cred; /* OUT */
519:
1.1 pooka 520: struct vattr pvnr_va; /* OUT */
1.65 pooka 521: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 522: char pvnr_link[MAXPATHLEN]; /* OUT */
523: };
524:
1.56 pooka 525: struct puffs_vnmsg_readdir {
1.11 pooka 526: struct puffs_req pvn_pr;
527:
1.36 pooka 528: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 529: off_t pvnr_offset; /* IN/OUT */
530: size_t pvnr_resid; /* IN/OUT */
1.24 pooka 531: size_t pvnr_ncookies; /* IN/OUT */
532: int pvnr_eofflag; /* IN */
1.1 pooka 533:
1.24 pooka 534: size_t pvnr_dentoff; /* OUT */
535: uint8_t pvnr_data[0] /* IN */
536: __aligned(ALIGNBYTES+1);
1.1 pooka 537: };
538:
1.56 pooka 539: struct puffs_vnmsg_readlink {
1.11 pooka 540: struct puffs_req pvn_pr;
541:
1.36 pooka 542: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 543: size_t pvnr_linklen; /* IN */
1.72 pooka 544: char pvnr_link[MAXPATHLEN]; /* IN */
1.1 pooka 545: };
546:
1.56 pooka 547: struct puffs_vnmsg_reclaim {
1.11 pooka 548: struct puffs_req pvn_pr;
1.1 pooka 549: };
550:
1.56 pooka 551: struct puffs_vnmsg_inactive {
1.11 pooka 552: struct puffs_req pvn_pr;
1.3 pooka 553: };
554:
1.56 pooka 555: struct puffs_vnmsg_print {
1.11 pooka 556: struct puffs_req pvn_pr;
557:
1.1 pooka 558: /* empty */
559: };
560:
1.56 pooka 561: struct puffs_vnmsg_pathconf {
1.11 pooka 562: struct puffs_req pvn_pr;
563:
1.1 pooka 564: int pvnr_name; /* OUT */
1.74 ! pooka 565: register_t pvnr_retval; /* IN */
1.1 pooka 566: };
567:
1.56 pooka 568: struct puffs_vnmsg_advlock {
1.11 pooka 569: struct puffs_req pvn_pr;
570:
1.1 pooka 571: struct flock pvnr_fl; /* OUT */
572: void *pvnr_id; /* OUT */
573: int pvnr_op; /* OUT */
574: int pvnr_flags; /* OUT */
575: };
576:
1.56 pooka 577: struct puffs_vnmsg_mmap {
1.12 pooka 578: struct puffs_req pvn_pr;
579:
1.45 pooka 580: vm_prot_t pvnr_prot; /* OUT */
1.36 pooka 581: struct puffs_kcred pvnr_cred; /* OUT */
1.12 pooka 582: };
583:
1.67 pooka 584: struct puffs_vnmsg_abortop {
585: struct puffs_req pvn_pr;
586:
587: struct puffs_kcn pvnr_cn; /* OUT */
588: struct puffs_kcred pvnr_cn_cred; /* OUT */
589: };
590:
1.71 pooka 591: struct puffs_vnmsg_getextattr {
592: struct puffs_req pvn_pr;
593:
594: int pvnr_attrnamespace; /* OUT */
595: char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */
596:
597: struct puffs_kcred pvnr_cred; /* OUT */
598: size_t pvnr_datasize; /* IN */
599:
600: size_t pvnr_resid; /* IN/OUT */
601: uint8_t pvnr_data[0] /* IN */
602: __aligned(ALIGNBYTES+1);
603: };
604:
605: struct puffs_vnmsg_setextattr {
606: struct puffs_req pvn_pr;
607:
608: int pvnr_attrnamespace; /* OUT */
609: char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */
610:
611: struct puffs_kcred pvnr_cred; /* OUT */
612:
613: size_t pvnr_resid; /* IN/OUT */
614: uint8_t pvnr_data[0] /* OUT */
615: __aligned(ALIGNBYTES+1);
616: };
617:
618: struct puffs_vnmsg_listextattr {
619: struct puffs_req pvn_pr;
620:
621: int pvnr_attrnamespace; /* OUT */
622:
623: struct puffs_kcred pvnr_cred; /* OUT */
624: size_t pvnr_datasize; /* IN */
625:
626: size_t pvnr_resid; /* IN/OUT */
627: uint8_t pvnr_data[0] /* IN */
628: __aligned(ALIGNBYTES+1);
629: };
630:
631: struct puffs_vnmsg_deleteextattr {
632: struct puffs_req pvn_pr;
633:
634: int pvnr_attrnamespace; /* OUT */
635: char pvnr_attrname[PUFFS_EXTNAMELEN];/* OUT */
636:
637: struct puffs_kcred pvnr_cred; /* OUT */
638: };
1.20 pooka 639:
640: /*
641: * For cache reports. Everything is always out-out-out, no replies
642: */
643:
644: struct puffs_cacherun {
645: off_t pcache_runstart;
646: off_t pcache_runend;
647: };
648:
649: /* cache info. old used for write now */
650: struct puffs_cacheinfo {
651: struct puffs_req pcache_pr;
652:
653: int pcache_type;
654: size_t pcache_nruns;
655: struct puffs_cacherun pcache_runs[0];
656: };
657: #define PCACHE_TYPE_READ 0
658: #define PCACHE_TYPE_WRITE 1
659:
1.51 pooka 660: /*
661: * Error notification. Always outgoing, no response, no remorse.
662: */
663: struct puffs_error {
664: struct puffs_req perr_pr;
665:
666: int perr_error;
1.53 pooka 667: char perr_str[256];
1.51 pooka 668: };
669:
1.48 pooka 670: #endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */
CVSweb <webmaster@jp.NetBSD.org>