Annotation of src/sys/fs/puffs/puffs_msgif.h, Revision 1.65.10.2
1.65.10.2! yamt 1: /* $NetBSD: puffs_msgif.h,v 1.65.10.1 2009/05/04 08:13:43 yamt 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.65.10.2! yamt 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:
1.9 pooka 64: /* XXX: we don't need everything */
1.1 pooka 65: enum {
66: PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT,
67: PUFFS_VFS_ROOT, PUFFS_VFS_STATVFS, PUFFS_VFS_SYNC,
68: PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP, PUFFS_VFS_VPTOFH,
69: PUFFS_VFS_INIT, PUFFS_VFS_DONE, PUFFS_VFS_SNAPSHOT,
1.19 pooka 70: PUFFS_VFS_EXTATTCTL, PUFFS_VFS_SUSPEND
1.1 pooka 71: };
72: #define PUFFS_VFS_MAX PUFFS_VFS_EXTATTCTL
73:
1.9 pooka 74: /* moreXXX: we don't need everything here either */
1.1 pooka 75: enum {
76: PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD,
77: PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS,
78: PUFFS_VN_GETATTR, PUFFS_VN_SETATTR, PUFFS_VN_READ,
79: PUFFS_VN_WRITE, PUFFS_VN_IOCTL, PUFFS_VN_FCNTL,
80: PUFFS_VN_POLL, PUFFS_VN_KQFILTER, PUFFS_VN_REVOKE,
81: PUFFS_VN_MMAP, PUFFS_VN_FSYNC, PUFFS_VN_SEEK,
82: PUFFS_VN_REMOVE, PUFFS_VN_LINK, PUFFS_VN_RENAME,
83: PUFFS_VN_MKDIR, PUFFS_VN_RMDIR, PUFFS_VN_SYMLINK,
84: PUFFS_VN_READDIR, PUFFS_VN_READLINK, PUFFS_VN_ABORTOP,
85: PUFFS_VN_INACTIVE, PUFFS_VN_RECLAIM, PUFFS_VN_LOCK,
86: PUFFS_VN_UNLOCK, PUFFS_VN_BMAP, PUFFS_VN_STRATEGY,
87: PUFFS_VN_PRINT, PUFFS_VN_ISLOCKED, PUFFS_VN_PATHCONF,
88: PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT,
89: PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR,
90: PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR,
91: PUFFS_VN_SETEXTATTR
92: };
93: #define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR
94:
1.54 pooka 95: /*
96: * These signal invalid parameters the file system returned.
97: */
1.51 pooka 98: enum {
99: PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR,
100: PUFFS_ERR_READLINK, PUFFS_ERR_READ, PUFFS_ERR_WRITE,
1.53 pooka 101: PUFFS_ERR_VPTOFH, PUFFS_ERR_ERROR
1.51 pooka 102: };
103: #define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH
104:
1.14 pooka 105: #define PUFFSDEVELVERS 0x80000000
1.65.10.2! yamt 106: #define PUFFSVERSION 29
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.65 pooka 134: puffs_cookie_t pa_root_cookie;
1.30 pooka 135: enum vtype pa_root_vtype;
136: voff_t pa_root_vsize;
137: dev_t pa_root_rdev;
138:
139: struct statvfs pa_svfsb;
1.54 pooka 140:
1.43 pooka 141: char pa_typename[_VFS_NAMELEN];
1.42 pooka 142: char pa_mntfromname[_VFS_MNAMELEN];
143:
1.9 pooka 144: uint8_t pa_vnopmask[PUFFS_VN_MAX];
1.1 pooka 145: };
1.34 pooka 146: #define PUFFS_KFLAG_NOCACHE_NAME 0x01 /* don't use name cache */
147: #define PUFFS_KFLAG_NOCACHE_PAGE 0x02 /* don't use page cache */
1.35 pooka 148: #define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */
1.34 pooka 149: #define PUFFS_KFLAG_ALLOPS 0x04 /* ignore pa_vnopmask */
150: #define PUFFS_KFLAG_WTCACHE 0x08 /* write-through page cache */
151: #define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */
1.38 pooka 152: #define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */
1.41 pooka 153: #define PUFFS_KFLAG_MASK 0x3f
1.27 pooka 154:
1.50 pooka 155: #define PUFFS_FHFLAG_DYNAMIC 0x01
156: #define PUFFS_FHFLAG_NFSV2 0x02
157: #define PUFFS_FHFLAG_NFSV3 0x04
158: #define PUFFS_FHFLAG_PROTOMASK 0x06
159: #define PUFFS_FHFLAG_PASSTHROUGH 0x08
160: #define PUFFS_FHFLAG_MASK 0x0f
1.27 pooka 161:
162: #define PUFFS_FHSIZE_MAX 1020 /* XXX: FHANDLE_SIZE_MAX - 4 */
1.1 pooka 163:
1.56 pooka 164: struct puffs_req {
1.60 pooka 165: struct putter_hdr preq_pth;
1.56 pooka 166:
167: uint64_t preq_id;
1.65 pooka 168: puffs_cookie_t preq_cookie;
1.56 pooka 169:
1.60 pooka 170: uint16_t preq_opclass;
171: uint16_t preq_optype;
1.56 pooka 172: int preq_rv;
173:
174: uint32_t preq_setbacks;
175:
1.59 pooka 176: /* Who is making the call? Eventually host id is also needed. */
177: pid_t preq_pid;
178: lwpid_t preq_lid;
179:
1.56 pooka 180: /*
181: * the following helper pads the struct size to md alignment
182: * multiple (should size_t not cut it). it makes sure that
183: * whatever comes after this struct is aligned
184: */
185: size_t preq_buflen;
186: uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);
187: };
188:
1.29 pooka 189: #define PUFFS_SETBACK_INACT_N1 0x01 /* set VOP_INACTIVE for node 1 */
190: #define PUFFS_SETBACK_INACT_N2 0x02 /* set VOP_INACTIVE for node 2 */
1.32 pooka 191: #define PUFFS_SETBACK_NOREF_N1 0x04 /* set pn PN_NOREFS for node 1 */
192: #define PUFFS_SETBACK_NOREF_N2 0x08 /* set pn PN_NOREFS for node 2 */
193: #define PUFFS_SETBACK_MASK 0x0f
1.29 pooka 194:
1.1 pooka 195: /*
1.16 pooka 196: * Flush operation. This can be used to invalidate:
197: * 1) name cache for one node
198: * 2) name cache for all children
199: * 3) name cache for the entire mount
200: * 4) page cache for a set of ranges in one node
201: * 5) page cache for one entire node
202: *
203: * It can be used to flush:
204: * 1) page cache for a set of ranges in one node
205: * 2) page cache for one entire node
206: */
207:
1.20 pooka 208: /* XXX: needs restructuring */
1.16 pooka 209: struct puffs_flush {
1.60 pooka 210: struct puffs_req pf_req;
1.16 pooka 211:
1.65 pooka 212: puffs_cookie_t pf_cookie;
1.56 pooka 213:
214: int pf_op;
215: off_t pf_start;
216: off_t pf_end;
1.16 pooka 217: };
218: #define PUFFS_INVAL_NAMECACHE_NODE 0
219: #define PUFFS_INVAL_NAMECACHE_DIR 1
220: #define PUFFS_INVAL_NAMECACHE_ALL 2
221: #define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3
1.23 pooka 222: #define PUFFS_FLUSH_PAGECACHE_NODE_RANGE 4
1.16 pooka 223:
1.57 pooka 224: /* keep this for now */
1.56 pooka 225: #define PUFFSREQSIZEOP _IOR ('p', 1, size_t)
1.16 pooka 226:
227: /*
1.1 pooka 228: * Credentials for an operation. Can be either struct uucred for
229: * ops called from a credential context or NOCRED/FSCRED for ops
230: * called from within the kernel. It is up to the implementation
231: * if it makes a difference between these two and the super-user.
232: */
1.36 pooka 233: struct puffs_kcred {
234: struct uucred pkcr_uuc;
235: uint8_t pkcr_type;
236: uint8_t pkcr_internal;
1.1 pooka 237: };
238: #define PUFFCRED_TYPE_UUC 1
239: #define PUFFCRED_TYPE_INTERNAL 2
240: #define PUFFCRED_CRED_NOCRED 1
241: #define PUFFCRED_CRED_FSCRED 2
242:
243: /*
1.22 pooka 244: * 2*MAXPHYS is the max size the system will attempt to copy,
1.1 pooka 245: * else treated as garbage
246: */
1.56 pooka 247: #define PUFFS_MSG_MAXSIZE 2*MAXPHYS
248: #define PUFFS_MSGSTRUCT_MAX 4096 /* XXX: approxkludge */
1.1 pooka 249:
1.56 pooka 250: #define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX))
1.1 pooka 251:
1.13 pooka 252: /* puffs struct componentname built by kernel */
253: struct puffs_kcn {
1.1 pooka 254: /* args */
1.49 pooka 255: uint32_t pkcn_nameiop; /* namei operation */
256: uint32_t pkcn_flags; /* flags */
1.13 pooka 257:
1.38 pooka 258: char pkcn_name[MAXPATHLEN]; /* nulterminated path component */
1.49 pooka 259: size_t pkcn_namelen; /* current component length */
260: size_t pkcn_consume; /* IN: extra chars server ate */
1.1 pooka 261: };
262:
1.24 pooka 263:
1.11 pooka 264: /*
265: * Next come the individual requests. They are all subclassed from
266: * puffs_req and contain request-specific fields in addition. Note
267: * that there are some requests which have to handle arbitrary-length
268: * buffers.
269: *
270: * The division is the following: puffs_req is to be touched only
271: * by generic routines while the other stuff is supposed to be
272: * modified only by specific routines.
273: */
1.6 pooka 274:
1.1 pooka 275: /*
276: * aux structures for vfs operations.
277: */
1.56 pooka 278: struct puffs_vfsmsg_unmount {
1.11 pooka 279: struct puffs_req pvfsr_pr;
280:
1.1 pooka 281: int pvfsr_flags;
282: };
283:
1.56 pooka 284: struct puffs_vfsmsg_statvfs {
1.11 pooka 285: struct puffs_req pvfsr_pr;
286:
1.1 pooka 287: struct statvfs pvfsr_sb;
288: };
289:
1.56 pooka 290: struct puffs_vfsmsg_sync {
1.11 pooka 291: struct puffs_req pvfsr_pr;
292:
1.36 pooka 293: struct puffs_kcred pvfsr_cred;
1.1 pooka 294: int pvfsr_waitfor;
295: };
296:
1.56 pooka 297: struct puffs_vfsmsg_fhtonode {
1.24 pooka 298: struct puffs_req pvfsr_pr;
299:
300: void *pvfsr_fhcookie; /* IN */
301: enum vtype pvfsr_vtype; /* IN */
302: voff_t pvfsr_size; /* IN */
303: dev_t pvfsr_rdev; /* IN */
304:
305: size_t pvfsr_dsize; /* OUT */
1.27 pooka 306: uint8_t pvfsr_data[0] /* OUT, XXX */
1.24 pooka 307: __aligned(ALIGNBYTES+1);
308: };
309:
1.56 pooka 310: struct puffs_vfsmsg_nodetofh {
1.24 pooka 311: struct puffs_req pvfsr_pr;
312:
313: void *pvfsr_fhcookie; /* OUT */
314:
315: size_t pvfsr_dsize; /* OUT/IN */
1.27 pooka 316: uint8_t pvfsr_data[0] /* IN, XXX */
1.24 pooka 317: __aligned(ALIGNBYTES+1);
318: };
319:
1.56 pooka 320: struct puffs_vfsmsg_suspend {
1.19 pooka 321: struct puffs_req pvfsr_pr;
322:
323: int pvfsr_status;
324: };
325: #define PUFFS_SUSPEND_START 0
326: #define PUFFS_SUSPEND_SUSPENDED 1
327: #define PUFFS_SUSPEND_RESUME 2
328: #define PUFFS_SUSPEND_ERROR 3
329:
1.1 pooka 330: /*
331: * aux structures for vnode operations.
332: */
333:
1.56 pooka 334: struct puffs_vnmsg_lookup {
1.11 pooka 335: struct puffs_req pvn_pr;
336:
1.13 pooka 337: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 338: struct puffs_kcred pvnr_cn_cred; /* OUT */
339:
1.65 pooka 340: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 341: enum vtype pvnr_vtype; /* IN */
1.5 pooka 342: voff_t pvnr_size; /* IN */
1.4 pooka 343: dev_t pvnr_rdev; /* IN */
1.1 pooka 344: };
345:
1.56 pooka 346: struct puffs_vnmsg_create {
1.11 pooka 347: struct puffs_req pvn_pr;
348:
1.13 pooka 349: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 350: struct puffs_kcred pvnr_cn_cred; /* OUT */
351:
1.1 pooka 352: struct vattr pvnr_va; /* OUT */
1.65 pooka 353: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 354: };
355:
1.56 pooka 356: struct puffs_vnmsg_mknod {
1.11 pooka 357: struct puffs_req pvn_pr;
358:
1.13 pooka 359: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 360: struct puffs_kcred pvnr_cn_cred; /* OUT */
361:
1.1 pooka 362: struct vattr pvnr_va; /* OUT */
1.65 pooka 363: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 364: };
365:
1.56 pooka 366: struct puffs_vnmsg_open {
1.11 pooka 367: struct puffs_req pvn_pr;
368:
1.36 pooka 369: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 370: int pvnr_mode; /* OUT */
371: };
372:
1.56 pooka 373: struct puffs_vnmsg_close {
1.11 pooka 374: struct puffs_req pvn_pr;
375:
1.36 pooka 376: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 377: int pvnr_fflag; /* OUT */
378: };
379:
1.56 pooka 380: struct puffs_vnmsg_access {
1.11 pooka 381: struct puffs_req pvn_pr;
382:
1.36 pooka 383: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 384: int pvnr_mode; /* OUT */
385: };
386:
1.56 pooka 387: #define puffs_vnmsg_setattr puffs_vnmsg_setgetattr
388: #define puffs_vnmsg_getattr puffs_vnmsg_setgetattr
389: struct puffs_vnmsg_setgetattr {
1.11 pooka 390: struct puffs_req pvn_pr;
391:
1.36 pooka 392: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 393: struct vattr pvnr_va; /* IN/OUT (op depend) */
394: };
395:
1.56 pooka 396: #define puffs_vnmsg_read puffs_vnmsg_rw
397: #define puffs_vnmsg_write puffs_vnmsg_rw
398: struct puffs_vnmsg_rw {
1.11 pooka 399: struct puffs_req pvn_pr;
400:
1.36 pooka 401: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 402: off_t pvnr_offset; /* OUT */
403: size_t pvnr_resid; /* IN/OUT */
404: int pvnr_ioflag; /* OUT */
405:
406: uint8_t pvnr_data[0]; /* IN/OUT (wr/rd) */
407: };
408:
1.56 pooka 409: #define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl
410: #define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl
411: struct puffs_vnmsg_fcnioctl {
1.11 pooka 412: struct puffs_req pvn_pr;
413:
1.36 pooka 414: struct puffs_kcred pvnr_cred;
1.1 pooka 415: u_long pvnr_command;
416: pid_t pvnr_pid;
417: int pvnr_fflag;
418:
419: void *pvnr_data;
420: size_t pvnr_datalen;
421: int pvnr_copyback;
422: };
423:
1.56 pooka 424: struct puffs_vnmsg_poll {
1.11 pooka 425: struct puffs_req pvn_pr;
426:
1.31 pooka 427: int pvnr_events; /* IN/OUT */
1.1 pooka 428: };
429:
1.56 pooka 430: struct puffs_vnmsg_fsync {
1.11 pooka 431: struct puffs_req pvn_pr;
432:
1.36 pooka 433: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 434: off_t pvnr_offlo; /* OUT */
435: off_t pvnr_offhi; /* OUT */
436: int pvnr_flags; /* OUT */
437: };
438:
1.56 pooka 439: struct puffs_vnmsg_seek {
1.11 pooka 440: struct puffs_req pvn_pr;
441:
1.36 pooka 442: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 443: off_t pvnr_oldoff; /* OUT */
444: off_t pvnr_newoff; /* OUT */
445: };
446:
1.56 pooka 447: struct puffs_vnmsg_remove {
1.11 pooka 448: struct puffs_req pvn_pr;
449:
1.13 pooka 450: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 451: struct puffs_kcred pvnr_cn_cred; /* OUT */
452:
1.65 pooka 453: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 454: };
455:
1.56 pooka 456: struct puffs_vnmsg_mkdir {
1.11 pooka 457: struct puffs_req pvn_pr;
458:
1.13 pooka 459: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 460: struct puffs_kcred pvnr_cn_cred; /* OUT */
461:
1.1 pooka 462: struct vattr pvnr_va; /* OUT */
1.65 pooka 463: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 464: };
465:
1.56 pooka 466: struct puffs_vnmsg_rmdir {
1.11 pooka 467: struct puffs_req pvn_pr;
468:
1.13 pooka 469: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 470: struct puffs_kcred pvnr_cn_cred; /* OUT */
1.37 pooka 471:
1.65 pooka 472: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 473: };
474:
1.56 pooka 475: struct puffs_vnmsg_link {
1.11 pooka 476: struct puffs_req pvn_pr;
477:
1.36 pooka 478: struct puffs_kcn pvnr_cn; /* OUT */
479: struct puffs_kcred pvnr_cn_cred; /* OUT */
1.37 pooka 480:
1.65 pooka 481: puffs_cookie_t pvnr_cookie_targ; /* OUT */
1.1 pooka 482: };
483:
1.56 pooka 484: struct puffs_vnmsg_rename {
1.11 pooka 485: struct puffs_req pvn_pr;
486:
1.13 pooka 487: struct puffs_kcn pvnr_cn_src; /* OUT */
1.36 pooka 488: struct puffs_kcred pvnr_cn_src_cred; /* OUT */
1.13 pooka 489: struct puffs_kcn pvnr_cn_targ; /* OUT */
1.36 pooka 490: struct puffs_kcred pvnr_cn_targ_cred; /* OUT */
491:
1.65 pooka 492: puffs_cookie_t pvnr_cookie_src; /* OUT */
493: puffs_cookie_t pvnr_cookie_targ; /* OUT */
494: puffs_cookie_t pvnr_cookie_targdir; /* OUT */
1.1 pooka 495: };
496:
1.56 pooka 497: struct puffs_vnmsg_symlink {
1.11 pooka 498: struct puffs_req pvn_pr;
499:
1.13 pooka 500: struct puffs_kcn pvnr_cn; /* OUT */
1.36 pooka 501: struct puffs_kcred pvnr_cn_cred; /* OUT */
502:
1.1 pooka 503: struct vattr pvnr_va; /* OUT */
1.65 pooka 504: puffs_cookie_t pvnr_newnode; /* IN */
1.1 pooka 505: char pvnr_link[MAXPATHLEN]; /* OUT */
506: };
507:
1.56 pooka 508: struct puffs_vnmsg_readdir {
1.11 pooka 509: struct puffs_req pvn_pr;
510:
1.36 pooka 511: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 512: off_t pvnr_offset; /* IN/OUT */
513: size_t pvnr_resid; /* IN/OUT */
1.24 pooka 514: size_t pvnr_ncookies; /* IN/OUT */
515: int pvnr_eofflag; /* IN */
1.1 pooka 516:
1.24 pooka 517: size_t pvnr_dentoff; /* OUT */
518: uint8_t pvnr_data[0] /* IN */
519: __aligned(ALIGNBYTES+1);
1.1 pooka 520: };
521:
1.56 pooka 522: struct puffs_vnmsg_readlink {
1.11 pooka 523: struct puffs_req pvn_pr;
524:
1.36 pooka 525: struct puffs_kcred pvnr_cred; /* OUT */
1.1 pooka 526: size_t pvnr_linklen; /* IN */
527: char pvnr_link[MAXPATHLEN]; /* IN, XXX */
528: };
529:
1.56 pooka 530: struct puffs_vnmsg_reclaim {
1.11 pooka 531: struct puffs_req pvn_pr;
1.1 pooka 532: };
533:
1.56 pooka 534: struct puffs_vnmsg_inactive {
1.11 pooka 535: struct puffs_req pvn_pr;
1.3 pooka 536: };
537:
1.56 pooka 538: struct puffs_vnmsg_print {
1.11 pooka 539: struct puffs_req pvn_pr;
540:
1.1 pooka 541: /* empty */
542: };
543:
1.56 pooka 544: struct puffs_vnmsg_pathconf {
1.11 pooka 545: struct puffs_req pvn_pr;
546:
1.1 pooka 547: int pvnr_name; /* OUT */
548: int pvnr_retval; /* IN */
549: };
550:
1.56 pooka 551: struct puffs_vnmsg_advlock {
1.11 pooka 552: struct puffs_req pvn_pr;
553:
1.1 pooka 554: struct flock pvnr_fl; /* OUT */
555: void *pvnr_id; /* OUT */
556: int pvnr_op; /* OUT */
557: int pvnr_flags; /* OUT */
558: };
559:
1.56 pooka 560: struct puffs_vnmsg_mmap {
1.12 pooka 561: struct puffs_req pvn_pr;
562:
1.45 pooka 563: vm_prot_t pvnr_prot; /* OUT */
1.36 pooka 564: struct puffs_kcred pvnr_cred; /* OUT */
1.12 pooka 565: };
566:
1.65.10.2! yamt 567: struct puffs_vnmsg_abortop {
! 568: struct puffs_req pvn_pr;
! 569:
! 570: struct puffs_kcn pvnr_cn; /* OUT */
! 571: struct puffs_kcred pvnr_cn_cred; /* OUT */
! 572: };
! 573:
1.20 pooka 574:
575: /*
576: * For cache reports. Everything is always out-out-out, no replies
577: */
578:
579: struct puffs_cacherun {
580: off_t pcache_runstart;
581: off_t pcache_runend;
582: };
583:
584: /* cache info. old used for write now */
585: struct puffs_cacheinfo {
586: struct puffs_req pcache_pr;
587:
588: int pcache_type;
589: size_t pcache_nruns;
590: struct puffs_cacherun pcache_runs[0];
591: };
592: #define PCACHE_TYPE_READ 0
593: #define PCACHE_TYPE_WRITE 1
594:
1.51 pooka 595: /*
596: * Error notification. Always outgoing, no response, no remorse.
597: */
598: struct puffs_error {
599: struct puffs_req perr_pr;
600:
601: int perr_error;
1.53 pooka 602: char perr_str[256];
1.51 pooka 603: };
604:
1.48 pooka 605: #endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */
CVSweb <webmaster@jp.NetBSD.org>