Annotation of XNU/bsd/sys/mount.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
                     23: /*
                     24:  * Copyright (c) 1989, 1991, 1993
                     25:  *     The Regents of the University of California.  All rights reserved.
                     26:  *
                     27:  * Redistribution and use in source and binary forms, with or without
                     28:  * modification, are permitted provided that the following conditions
                     29:  * are met:
                     30:  * 1. Redistributions of source code must retain the above copyright
                     31:  *    notice, this list of conditions and the following disclaimer.
                     32:  * 2. Redistributions in binary form must reproduce the above copyright
                     33:  *    notice, this list of conditions and the following disclaimer in the
                     34:  *    documentation and/or other materials provided with the distribution.
                     35:  * 3. All advertising materials mentioning features or use of this software
                     36:  *    must display the following acknowledgement:
                     37:  *     This product includes software developed by the University of
                     38:  *     California, Berkeley and its contributors.
                     39:  * 4. Neither the name of the University nor the names of its contributors
                     40:  *    may be used to endorse or promote products derived from this software
                     41:  *    without specific prior written permission.
                     42:  *
                     43:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     44:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     45:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     46:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     47:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     48:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     49:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     50:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     51:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     52:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     53:  * SUCH DAMAGE.
                     54:  *
                     55:  *     @(#)mount.h     8.15 (Berkeley) 7/14/94
                     56:  */
                     57: 
                     58: #ifndef _SYS_MOUNT_H_
                     59: #define        _SYS_MOUNT_H_
                     60: 
                     61: #ifndef KERNEL
                     62: #include <sys/ucred.h>
                     63: #endif
                     64: #include <sys/queue.h>
                     65: #include <sys/lock.h>
                     66: #include <net/radix.h>
                     67: #include <sys/socket.h>                /* XXX for AF_MAX */
                     68: 
                     69: typedef struct { int32_t val[2]; } fsid_t;     /* file system id type */
                     70: 
                     71: /*
                     72:  * File identifier.
                     73:  * These are unique per filesystem on a single machine.
                     74:  */
                     75: #define        MAXFIDSZ        16
                     76: 
                     77: struct fid {
                     78:        u_short         fid_len;                /* length of data in bytes */
                     79:        u_short         fid_reserved;           /* force longword alignment */
                     80:        char            fid_data[MAXFIDSZ];     /* data (variable length) */
                     81: };
                     82: 
                     83: /*
                     84:  * file system statistics
                     85:  */
                     86: 
                     87: #define        MFSNAMELEN      15      /* length of fs type name, not inc. null */
                     88: #define        MNAMELEN        90      /* length of buffer for returned name */
                     89: 
                     90: struct statfs {
                     91:        short   f_type;                 /* filesystem type number */
                     92:        short   f_flags;                /* copy of mount flags */
                     93:        long    f_bsize;                /* fundamental file system block size */
                     94:        long    f_iosize;               /* optimal transfer block size */
                     95:        long    f_blocks;               /* total data blocks in file system */
                     96:        long    f_bfree;                /* free blocks in fs */
                     97:        long    f_bavail;               /* free blocks avail to non-superuser */
                     98:        long    f_files;                /* total file nodes in file system */
                     99:        long    f_ffree;                /* free file nodes in fs */
                    100:        fsid_t  f_fsid;                 /* file system id */
                    101:        uid_t   f_owner;                /* user that mounted the filesystem */
                    102:        long    f_spare[4];             /* spare for later */
                    103:        char    f_fstypename[MFSNAMELEN]; /* fs type name */
                    104:        char    f_mntonname[MNAMELEN];  /* directory on which mounted */
                    105:        char    f_mntfromname[MNAMELEN];/* mounted filesystem */
                    106: };
                    107: 
                    108: /*
                    109:  * Structure per mounted file system.  Each mounted file system has an
                    110:  * array of operations and an instance record.  The file systems are
                    111:  * put on a doubly linked list.
                    112:  */
                    113: LIST_HEAD(vnodelst, vnode);
                    114: 
                    115: struct mount {
                    116:        CIRCLEQ_ENTRY(mount) mnt_list;          /* mount list */
                    117:        struct vfsops   *mnt_op;                /* operations on fs */
                    118:        struct vfsconf  *mnt_vfc;               /* configuration info */
                    119:        struct vnode    *mnt_vnodecovered;      /* vnode we mounted on */
                    120:        struct vnodelst mnt_vnodelist;          /* list of vnodes this mount */
                    121:        struct lock__bsd__ mnt_lock;            /* mount structure lock */
                    122:        int             mnt_flag;               /* flags */
                    123:        int             mnt_maxsymlinklen;      /* max size of short symlink */
                    124:        struct statfs   mnt_stat;               /* cache of filesystem stats */
                    125:        qaddr_t         mnt_data;               /* private data */
                    126: };
                    127: 
                    128: /*
                    129:  * Mount flags.
                    130:  *
                    131:  * Unmount uses MNT_FORCE flag.
                    132:  */
                    133: #define        MNT_RDONLY      0x00000001      /* read only filesystem */
                    134: #define        MNT_SYNCHRONOUS 0x00000002      /* file system written synchronously */
                    135: #define        MNT_NOEXEC      0x00000004      /* can't exec from filesystem */
                    136: #define        MNT_NOSUID      0x00000008      /* don't honor setuid bits on fs */
                    137: #define        MNT_NODEV       0x00000010      /* don't interpret special files */
                    138: #define        MNT_UNION       0x00000020      /* union with underlying filesystem */
                    139: #define        MNT_ASYNC       0x00000040      /* file system written asynchronously */
                    140: 
                    141: /*
                    142:  * exported mount flags.
                    143:  */
                    144: #define        MNT_EXRDONLY    0x00000080      /* exported read only */
                    145: #define        MNT_EXPORTED    0x00000100      /* file system is exported */
                    146: #define        MNT_DEFEXPORTED 0x00000200      /* exported to the world */
                    147: #define        MNT_EXPORTANON  0x00000400      /* use anon uid mapping for everyone */
                    148: #define        MNT_EXKERB      0x00000800      /* exported with Kerberos uid mapping */
                    149: 
                    150: /*
                    151:  * Flags set by internal operations.
                    152:  */
                    153: #define        MNT_LOCAL       0x00001000      /* filesystem is stored locally */
                    154: #define        MNT_QUOTA       0x00002000      /* quotas are enabled on filesystem */
                    155: #define        MNT_ROOTFS      0x00004000      /* identifies the root filesystem */
                    156: #define        MNT_DOVOLFS     0x00008000      /* FS supports volfs */
                    157: 
                    158: /*
                    159:  * Mask of flags that are visible to statfs()
                    160:  */
                    161: #define        MNT_VISFLAGMASK 0x0000ffff
                    162: 
                    163: /*
                    164:  * External filesystem control flags.
                    165:  */
                    166: #define        MNT_UPDATE      0x00010000      /* not a real mount, just an update */
                    167: #define        MNT_DELEXPORT   0x00020000      /* delete export host lists */
                    168: #define        MNT_RELOAD      0x00040000      /* reload filesystem data */
                    169: #define        MNT_FORCE       0x00080000      /* force unmount or readonly change */
                    170: /*
                    171:  * Internal filesystem control flags.
                    172:  *
                    173:  * MNT_UNMOUNT locks the mount entry so that name lookup cannot proceed
                    174:  * past the mount point.  This keeps the subtree stable during mounts
                    175:  * and unmounts.
                    176:  */
                    177: #define MNT_UNMOUNT    0x01000000      /* unmount in progress */
                    178: #define        MNT_MWAIT       0x02000000      /* waiting for unmount to finish */
                    179: #define MNT_WANTRDWR   0x04000000      /* upgrade to read/write requested */
                    180: #if REV_ENDIAN_FS
                    181: #define        MNT_REVEND      0x08000000      /* Reverse endian FS */
                    182: #endif /* REV_ENDIAN_FS */
                    183: #define MNT_ROMANONLY   0x10000000      /* FS supports roman names only [HFS] */
                    184: 
                    185: /*
                    186:  * Sysctl CTL_VFS definitions.
                    187:  *
                    188:  * Second level identifier specifies which filesystem. Second level
                    189:  * identifier VFS_GENERIC returns information about all filesystems.
                    190:  */
                    191: #define        VFS_GENERIC             0       /* generic filesystem information */
                    192: #define VFS_NUMMNTOPS          1       /* int: total num of vfs mount/unmount operations */
                    193: /*
                    194:  * Third level identifiers for VFS_GENERIC are given below; third
                    195:  * level identifiers for specific filesystems are given in their
                    196:  * mount specific header files.
                    197:  */
                    198: #define VFS_MAXTYPENUM 1       /* int: highest defined filesystem type */
                    199: #define VFS_CONF       2       /* struct: vfsconf for filesystem given
                    200:                                   as next argument */
                    201: /*
                    202:  * Flags for various system call interfaces.
                    203:  *
                    204:  * waitfor flags to vfs_sync() and getfsstat()
                    205:  */
                    206: #define MNT_WAIT       1
                    207: #define MNT_NOWAIT     2
                    208: 
                    209: /*
                    210:  * Generic file handle
                    211:  */
                    212: struct fhandle {
                    213:        fsid_t  fh_fsid;        /* File system id of mount point */
                    214:        struct  fid fh_fid;     /* File sys specific id */
                    215: };
                    216: typedef struct fhandle fhandle_t;
                    217: 
                    218: /*
                    219:  * Export arguments for local filesystem mount calls.
                    220:  */
                    221: struct export_args {
                    222:        int     ex_flags;               /* export related flags */
                    223:        uid_t   ex_root;                /* mapping for root uid */
                    224:        struct  ucred ex_anon;          /* mapping for anonymous user */
                    225:        struct  sockaddr *ex_addr;      /* net address to which exported */
                    226:        int     ex_addrlen;             /* and the net address length */
                    227:        struct  sockaddr *ex_mask;      /* mask of valid bits in saddr */
                    228:        int     ex_masklen;             /* and the smask length */
                    229: };
                    230: 
                    231: /*
                    232:  * Filesystem configuration information. One of these exists for each
                    233:  * type of filesystem supported by the kernel. These are searched at
                    234:  * mount time to identify the requested filesystem.
                    235:  */
                    236: struct vfsconf {
                    237:        struct  vfsops *vfc_vfsops;     /* filesystem operations vector */
                    238:        char    vfc_name[MFSNAMELEN];   /* filesystem type name */
                    239:        int     vfc_typenum;            /* historic filesystem type number */
                    240:        int     vfc_refcount;           /* number mounted of this type */
                    241:        int     vfc_flags;              /* permanent flags */
                    242:        int     (*vfc_mountroot)(void); /* if != NULL, routine to mount root */
                    243:        struct  vfsconf *vfc_next;      /* next in list */
                    244: };
                    245: 
                    246: #ifdef KERNEL
                    247: 
                    248: extern int maxvfsconf;         /* highest defined filesystem type */
                    249: extern struct vfsconf *vfsconf;        /* head of list of filesystem types */
                    250: extern int maxvfsslots;                /* Maximum slots available to be used */
                    251: extern int numused_vfsslots;   /* number of slots already used */
                    252: 
                    253: int    vfsconf_add __P((struct vfsconf *));
                    254: int    vfsconf_del __P((char *));
                    255: 
                    256: /*
                    257:  * Operations supported on mounted file system.
                    258:  */
                    259: #ifdef __STDC__
                    260: struct nameidata;
                    261: struct mbuf;
                    262: #endif
                    263: 
                    264: struct vfsops {
                    265:        int     (*vfs_mount)    __P((struct mount *mp, char *path, caddr_t data,
                    266:                                    struct nameidata *ndp, struct proc *p));
                    267:        int     (*vfs_start)    __P((struct mount *mp, int flags,
                    268:                                    struct proc *p));
                    269:        int     (*vfs_unmount)  __P((struct mount *mp, int mntflags,
                    270:                                    struct proc *p));
                    271:        int     (*vfs_root)     __P((struct mount *mp, struct vnode **vpp));
                    272:        int     (*vfs_quotactl) __P((struct mount *mp, int cmds, uid_t uid,
                    273:                                    caddr_t arg, struct proc *p));
                    274:        int     (*vfs_statfs)   __P((struct mount *mp, struct statfs *sbp,
                    275:                                    struct proc *p));
                    276:        int     (*vfs_sync)     __P((struct mount *mp, int waitfor,
                    277:                                    struct ucred *cred, struct proc *p));
                    278:        int     (*vfs_vget)     __P((struct mount *mp, void *ino,
                    279:                                    struct vnode **vpp));
                    280:        int     (*vfs_fhtovp)   __P((struct mount *mp, struct fid *fhp,
                    281:                                    struct mbuf *nam, struct vnode **vpp,
                    282:                                    int *exflagsp, struct ucred **credanonp));
                    283:        int     (*vfs_vptofh)   __P((struct vnode *vp, struct fid *fhp));
                    284:        int     (*vfs_init)     __P((struct vfsconf *));
                    285:        int     (*vfs_sysctl)   __P((int *, u_int, void *, size_t *, void *,
                    286:                                    size_t, struct proc *));
                    287: };
                    288: 
                    289: #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
                    290:        (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
                    291: #define VFS_START(MP, FLAGS, P)          (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
                    292: #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
                    293: #define VFS_ROOT(MP, VPP)        (*(MP)->mnt_op->vfs_root)(MP, VPP)
                    294: #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
                    295: #define VFS_STATFS(MP, SBP, P)   (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
                    296: #define VFS_SYNC(MP, WAIT, C, P)  (*(MP)->mnt_op->vfs_sync)(MP, WAIT, C, P)
                    297: #define VFS_VGET(MP, INO, VPP)   (*(MP)->mnt_op->vfs_vget)(MP, INO, VPP)
                    298: #define VFS_FHTOVP(MP, FIDP, NAM, VPP, EXFLG, CRED) \
                    299:        (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, NAM, VPP, EXFLG, CRED)
                    300: #define        VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
                    301: 
                    302: /*
                    303:  * Network address lookup element
                    304:  */
                    305: struct netcred {
                    306:        struct  radix_node netc_rnodes[2];
                    307:        int     netc_exflags;
                    308:        struct  ucred netc_anon;
                    309: };
                    310: 
                    311: /*
                    312:  * Network export information
                    313:  */
                    314: struct netexport {
                    315:        struct  netcred ne_defexported;               /* Default export */
                    316:        struct  radix_node_head *ne_rtable[AF_MAX+1]; /* Individual exports */
                    317: };
                    318: 
                    319: /*
                    320:  * exported vnode operations
                    321:  */
                    322: int    vfs_busy __P((struct mount *, int, struct slock *, struct proc *));
                    323: int    vfs_export __P((struct mount *, struct netexport *,
                    324:            struct export_args *));
                    325: struct netcred *vfs_export_lookup __P((struct mount *, struct netexport *,
                    326:            struct mbuf *));
                    327: void   vfs_getnewfsid __P((struct mount *));
                    328: struct mount *vfs_getvfs __P((fsid_t *));
                    329: int    vfs_mountedon __P((struct vnode *));
                    330: int    vfs_mountroot __P((void));
                    331: int    vfs_rootmountalloc __P((char *, char *, struct mount **));
                    332: void   vfs_unbusy __P((struct mount *, struct proc *));
                    333: void   vfs_unmountall __P((void));
                    334: extern CIRCLEQ_HEAD(mntlist, mount) mountlist;
                    335: extern struct slock mountlist_slock;
                    336: 
                    337: #else /* !KERNEL */
                    338: 
                    339: #include <sys/cdefs.h>
                    340: 
                    341: __BEGIN_DECLS
                    342: int    fstatfs __P((int, struct statfs *));
                    343: int    getfh __P((const char *, fhandle_t *));
                    344: int    getfsstat __P((struct statfs *, long, int));
                    345: int    getmntinfo __P((struct statfs **, int));
                    346: int    mount __P((const char *, const char *, int, void *));
                    347: int    statfs __P((const char *, struct statfs *));
                    348: int    unmount __P((const char *, int));
                    349: __END_DECLS
                    350: 
                    351: #endif /* KERNEL */
                    352: #endif /* !_SYS_MOUNT_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.