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