[BACK]Return to puffs_msgif.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / fs / puffs

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>