[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.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>