home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / Portable Patmos / usr / include / sys / mount.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-08  |  10.8 KB  |  322 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1989 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    from: @(#)mount.h    7.22 (Berkeley) 6/3/91
  34.  *    $Id: mount.h,v 1.17 1993/09/07 15:41:55 ws Exp $
  35.  */
  36.  
  37. #ifndef _SYS_MOUNT_H_
  38. #define _SYS_MOUNT_H_
  39.  
  40. typedef quad fsid_t;            /* file system id type */
  41.  
  42. /*
  43.  * File identifier.
  44.  * These are unique per filesystem on a single machine.
  45.  */
  46. #define    MAXFIDSZ    16
  47.  
  48. struct fid {
  49.     u_short        fid_len;        /* length of data in bytes */
  50.     u_short        fid_reserved;        /* force longword alignment */
  51.     char        fid_data[MAXFIDSZ];    /* data (variable length) */
  52. };
  53.  
  54. /*
  55.  * file system statistics
  56.  */
  57.  
  58. #define MNAMELEN 90    /* length of buffer for returned name */
  59.  
  60. struct statfs {
  61.     short    f_type;            /* type of filesystem (see below) */
  62.     short    f_flags;        /* copy of mount flags */
  63.     long    f_fsize;        /* fundamental file system block size */
  64.     long    f_bsize;        /* optimal transfer block size */
  65.     long    f_blocks;        /* total data blocks in file system */
  66.     long    f_bfree;        /* free blocks in fs */
  67.     long    f_bavail;        /* free blocks avail to non-superuser */
  68.     long    f_files;        /* total file nodes in file system */
  69.     long    f_ffree;        /* free file nodes in fs */
  70.     fsid_t    f_fsid;            /* file system id */
  71.     long    f_spare[9];        /* spare for later */
  72.     char    f_mntonname[MNAMELEN];    /* directory on which mounted */
  73.     char    f_mntfromname[MNAMELEN];/* mounted filesystem */
  74. };
  75.  
  76. /*
  77.  * File system types.
  78.  */
  79. #define    MOUNT_NONE    0
  80. #define    MOUNT_EXPORT    MOUNT_NONE    /* use this for export mounting (mountd) */
  81. #define    MOUNT_UFS    1        /* UNIX "Fast" Filesystem */
  82. #define    MOUNT_NFS    2        /* Network Filesystem */
  83. #define    MOUNT_MFS    3        /* Memory Filesystem */
  84. #define    MOUNT_MSDOS    4        /* MSDOS Filesystem */
  85. #define MOUNT_ISOFS    5        /* iso9660 cdrom */
  86. #define MOUNT_FDESC    6        /* /dev/fd filesystem */
  87. #define MOUNT_KERNFS    7        /* kernel variable filesystem */
  88. #define MOUNT_DEVFS    8        /* device node filesystem */
  89. #define MOUNT_AFS    9        /* AFS 3.x */
  90. #define MOUNT_PROCFS    10        /* proc filesystem */
  91. #define    MOUNT_MAXTYPE    MOUNT_PROCFS
  92.  
  93. /*
  94.  * Structure per mounted file system.
  95.  * Each mounted file system has an array of
  96.  * operations and an instance record.
  97.  * The file systems are put on a doubly linked list.
  98.  */
  99. struct mount {
  100.     struct mount    *mnt_next;        /* next in mount list */
  101.     struct mount    *mnt_prev;        /* prev in mount list */
  102.     struct vfsops    *mnt_op;        /* operations on fs */
  103.     struct vnode    *mnt_vnodecovered;    /* vnode we mounted on */
  104.     struct vnode    *mnt_mounth;        /* list of vnodes this mount */
  105.     int        mnt_flag;        /* flags */
  106.     uid_t        mnt_exroot;        /* exported mapping for uid 0 */
  107.     struct statfs    mnt_stat;        /* cache of filesystem stats */
  108.     qaddr_t        mnt_data;        /* private data */
  109. };
  110.  
  111. /*
  112.  * Mount flags.
  113.  */
  114. #define    MNT_RDONLY    0x00000001    /* read only filesystem */
  115. #define    MNT_SYNCHRONOUS    0x00000002    /* file system written synchronously */
  116. #define    MNT_NOEXEC    0x00000004    /* can't exec from filesystem */
  117. #define    MNT_NOSUID    0x00000008    /* don't honor setuid bits on fs */
  118. #define    MNT_NODEV    0x00000010    /* don't interpret special files */
  119. #define    MNT_UNION    0x00000020    /* union with underlying filesysem */
  120.  
  121. /*
  122.  * exported mount flags.
  123.  */
  124. #define    MNT_EXPORTED    0x00000100    /* file system is exported */
  125. #define    MNT_EXRDONLY    0x00000200    /* exported read only */
  126.  
  127. /*
  128.  * Flags set by internal operations.
  129.  */
  130. #define    MNT_LOCAL    0x00001000    /* filesystem is stored locally */
  131. #define    MNT_QUOTA    0x00002000    /* quotas are enabled on filesystem */
  132.  
  133. /*
  134.  * Mask of flags that are visible to statfs()
  135.  */
  136. #define    MNT_VISFLAGMASK    0x0000ffff
  137.  
  138. /*
  139.  * filesystem control flags.
  140.  *
  141.  * MNT_MLOCK lock the mount entry so that name lookup cannot proceed
  142.  * past the mount point.  This keeps the subtree stable during mounts
  143.  * and unmounts.
  144.  */
  145. #define    MNT_UPDATE    0x00010000    /* not a real mount, just an update */
  146. #define    MNT_MLOCK    0x00100000    /* lock so that subtree is stable */
  147. #define    MNT_MWAIT    0x00200000    /* someone is waiting for lock */
  148. #define MNT_MPBUSY    0x00400000    /* scan of mount point in progress */
  149. #define MNT_MPWANT    0x00800000    /* waiting for mount point */
  150. #define MNT_UNMOUNT    0x01000000    /* unmount in progress */
  151.  
  152. /*
  153.  * Operations supported on mounted file system.
  154.  */
  155. #ifdef KERNEL
  156. #ifdef __STDC__
  157. struct nameidata;
  158. #endif
  159.  
  160. struct vfsops {
  161.     int    (*vfs_mount)    __P((struct mount *mp, char *path, caddr_t data,
  162.                     struct nameidata *ndp, struct proc *p));
  163.     int    (*vfs_start)    __P((struct mount *mp, int flags,
  164.                     struct proc *p));
  165.     int    (*vfs_unmount)    __P((struct mount *mp, int mntflags,
  166.                     struct proc *p));
  167.     int    (*vfs_root)    __P((struct mount *mp, struct vnode **vpp));
  168.             /* int uid,        should be uid_t */
  169.     int    (*vfs_quotactl)    __P((struct mount *mp, int cmds, int uid,
  170.                     caddr_t arg, struct proc *p));
  171.     int    (*vfs_statfs)    __P((struct mount *mp, struct statfs *sbp,
  172.                     struct proc *p));
  173.     int    (*vfs_sync)    __P((struct mount *mp, int waitfor));
  174.     int    (*vfs_fhtovp)    __P((struct mount *mp, struct fid *fhp,
  175.                     struct vnode **vpp));
  176.     int    (*vfs_vptofh)    __P((struct vnode *vp, struct fid *fhp));
  177.     int    (*vfs_init)    __P(());
  178. };
  179.  
  180. #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
  181.     (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
  182. #define VFS_START(MP, FLAGS, P)      (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
  183. #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
  184. #define VFS_ROOT(MP, VPP)      (*(MP)->mnt_op->vfs_root)(MP, VPP)
  185. #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
  186. #define VFS_STATFS(MP, SBP, P)      (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
  187. #define VFS_SYNC(MP, WAITFOR)      (*(MP)->mnt_op->vfs_sync)(MP, WAITFOR)
  188. #define VFS_FHTOVP(MP, FIDP, VPP) (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, VPP)
  189. #define    VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
  190. #endif /* KERNEL */
  191.  
  192. /*
  193.  * Flags for various system call interfaces.
  194.  *
  195.  * forcibly flags for vfs_umount().
  196.  * waitfor flags to vfs_sync() and getfsstat()
  197.  */
  198. #define MNT_FORCE    1
  199. #define MNT_NOFORCE    2
  200. #define MNT_WAIT    1
  201. #define MNT_NOWAIT    2
  202.  
  203. /*
  204.  * Generic file handle
  205.  */
  206. struct fhandle {
  207.     fsid_t    fh_fsid;    /* File system id of mount point */
  208.     struct    fid fh_fid;    /* Id of file */
  209. };
  210. typedef struct fhandle    fhandle_t;
  211.  
  212. /*
  213.  * Arguments to export mount
  214.  */
  215. struct export_args {
  216.     uid_t exroot;        /* mapping for root uid */
  217. };
  218.  
  219. /*
  220.  * Arguments to mount UFS
  221.  */
  222. struct ufs_args {
  223.     char    *fspec;        /* block special device to mount */
  224. };
  225.  
  226. /*
  227.  * Arguments to mount MFS
  228.  */
  229. struct mfs_args {
  230.     char    *name;        /* name to export for statfs */
  231.     caddr_t    base;        /* base address of file system in memory */
  232.     u_long size;        /* size of file system */
  233. };
  234.  
  235. /*
  236.  * File Handle (32 bytes for version 2), variable up to 1024 for version 3
  237.  */
  238. union nfsv2fh {
  239.     fhandle_t    fh_generic;
  240.     u_char        fh_bytes[32];
  241. };
  242. typedef union nfsv2fh nfsv2fh_t;
  243.  
  244. /*
  245.  * Arguments to mount NFS
  246.  */
  247. struct nfs_args {
  248.     struct sockaddr    *addr;        /* file server address */
  249.     int        sotype;        /* Socket type */
  250.     int        proto;        /* and Protocol */
  251.     nfsv2fh_t    *fh;        /* File handle to be mounted */
  252.     int        flags;        /* flags */
  253.     int        wsize;        /* write size in bytes */
  254.     int        rsize;        /* read size in bytes */
  255.     int        timeo;        /* initial timeout in .1 secs */
  256.     int        retrans;    /* times to retry send */
  257.     char        *hostname;    /* server's name */
  258. };
  259. /*
  260.  * NFS mount option flags
  261.  */
  262. #define    NFSMNT_SOFT    0x0001    /* soft mount (hard is default) */
  263. #define    NFSMNT_WSIZE    0x0002    /* set write size */
  264. #define    NFSMNT_RSIZE    0x0004    /* set read size */
  265. #define    NFSMNT_TIMEO    0x0008    /* set initial timeout */
  266. #define    NFSMNT_RETRANS    0x0010    /* set number of request retrys */
  267. #define    NFSMNT_HOSTNAME    0x0020    /* set hostname for error printf */
  268. #define    NFSMNT_INT    0x0040    /* allow interrupts on hard mount */
  269. #define    NFSMNT_NOCONN    0x0080    /* Don't Connect the socket */
  270. #define    NFSMNT_SCKLOCK    0x0100    /* Lock socket against others */
  271. #define    NFSMNT_WANTSCK    0x0200    /* Want a socket lock */
  272. #define    NFSMNT_SPONGY    0x0400    /* spongy mount (soft for stat and lookup) */
  273. #define    NFSMNT_COMPRESS    0x0800    /* Compress nfs rpc xdr */
  274. #define    NFSMNT_LOCKBITS    (NFSMNT_SCKLOCK | NFSMNT_WANTSCK)
  275.  
  276. /*
  277.  * Arguments to mount ISO 9660 filesystems.
  278.  */
  279. struct iso_args {
  280.     char *fspec;        /* block special holding the fs to mount */
  281.     int flags;        /* mounting flags, see below */
  282. };
  283. #define ISOFSMNT_NORRIP    0x00000001    /* disable Rock Ridge Ext.*/
  284. #define    ISOFSMNT_GENS    0x00000002    /* enable usage of generation numbers */
  285. #define    ISOFSMNT_EXTATT    0x00000004    /* enable usage of extended attributes */
  286.  
  287. /*
  288.  *  Arguments to mount MSDOS filesystems.
  289.  */
  290. struct msdosfs_args {
  291.     char *fspec;        /* blocks special holding the fs to mount */
  292. };
  293.  
  294. #ifdef KERNEL
  295. /*
  296.  * exported vnode operations
  297.  */
  298. void    vfs_remove __P((struct mount *mp)); /* remove a vfs from mount list */
  299. int    vfs_lock __P((struct mount *mp));   /* lock a vfs */
  300. void    vfs_unlock __P((struct mount *mp)); /* unlock a vfs */
  301. struct    mount *getvfs __P((fsid_t *fsid));  /* return vfs given fsid */
  302. struct    mount *rootfs;                /* ptr to root mount structure */
  303. extern struct vfsops *vfssw[];            /* mount filesystem type table */
  304.  
  305. #else /* KERNEL */
  306.  
  307. #include <sys/cdefs.h>
  308.  
  309. __BEGIN_DECLS
  310. int    fstatfs __P((int, struct statfs *));
  311. int    getfh __P((const char *, fhandle_t *));
  312. int    getfsstat __P((struct statfs *, long, int));
  313. int    getmntinfo __P((struct statfs **, int));
  314. int    mount __P((int, const char *, int, void *));
  315. int    statfs __P((const char *, struct statfs *));
  316. int    unmount __P((const char *, int));
  317. __END_DECLS
  318.  
  319. #endif /* KERNEL */
  320.  
  321. #endif /* !_SYS_MOUNT_H_ */
  322.