| /* |
| * Copyright (c) 1993 Paul Kranenburg |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. All advertising materials mentioning features or use of this software |
| * must display the following acknowledgement: |
| * This product includes software developed by Paul Kranenburg. |
| * 4. The name of the author may not be used to endorse or promote products |
| * derived from this software withough specific prior written permission |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * $Id: pfsnode.h,v 1.1 1993/12/12 12:26:39 davidg Exp $ |
| */ |
| |
| /* |
| * This structure defines the control data for the proc file system. |
| */ |
| |
| struct pfsnode { |
| struct pfsnode *pfs_next; /* next on list */ |
| struct vnode *pfs_vnode; /* vnode associated with this pfsnode */ |
| pid_t pfs_pid; /* associated process */ |
| u_short pfs_mode; /* mode bits for stat() */ |
| uid_t pfs_uid; /* process' owner */ |
| gid_t pfs_gid; /* process' group */ |
| u_long pfs_vflags; /* chflags() flags */ |
| u_long pfs_flags; /* open flags */ |
| struct vmspace *pfs_vs; |
| }; |
| |
| struct pfsnode *pfshead; |
| |
| /* |
| * Format of a directory entry in /proc |
| */ |
| struct pfsdent { |
| unsigned long d_fileno; |
| unsigned short d_reclen; |
| unsigned short d_namlen; |
| char d_nam[8]; |
| }; |
| #define PFSDENTSIZE (sizeof(struct direct) - MAXNAMELEN + 8) |
| |
| #ifndef DIRBLKSIZ |
| #define DIRBLKSIZ DEV_BSIZE |
| #endif |
| |
| #ifdef DEBUG |
| int pfs_debug; |
| #endif |
| |
| /* |
| * Convert between pfsnode pointers and vnode pointers |
| */ |
| #define VTOPFS(vp) ((struct pfsnode *)(vp)->v_data) |
| #define PFSTOV(pfsp) ((pfsp)->pfs_vnode) |
| |
| /* |
| * Prototypes for PFS operations on vnodes. |
| */ |
| int pfs_badop(); |
| int pfs_doio(); |
| int pfs_lookup __P(( \ |
| struct vnode *vp, \ |
| struct nameidata *ndp, \ |
| struct proc *p)); |
| #define pfs_create ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct vattr *vap, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_mknod ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct vattr *vap, \ |
| struct ucred *cred, \ |
| struct proc *p))) pfs_badop) |
| int pfs_open __P(( |
| struct vnode *vp, |
| int mode, |
| struct ucred *cred, |
| struct proc *p)); |
| int pfs_close __P(( |
| struct vnode *vp, |
| int fflag, |
| struct ucred *cred, |
| struct proc *p)); |
| int pfs_access __P(( |
| struct vnode *vp, |
| int mode, |
| struct ucred *cred, |
| struct proc *p)); |
| int pfs_getattr __P(( |
| struct vnode *vp, |
| struct vattr *vap, |
| struct ucred *cred, |
| struct proc *p)); |
| int pfs_setattr __P(( |
| struct vnode *vp, |
| struct vattr *vap, |
| struct ucred *cred, |
| struct proc *p)); |
| #define pfs_read ((int (*) __P(( \ |
| struct vnode *vp, \ |
| struct uio *uio, \ |
| int ioflag, \ |
| struct ucred *cred))) pfs_doio) |
| #define pfs_write ((int (*) __P(( \ |
| struct vnode *vp, \ |
| struct uio *uio, \ |
| int ioflag, \ |
| struct ucred *cred))) pfs_doio) |
| int pfs_ioctl __P(( |
| struct vnode *vp, |
| int command, |
| caddr_t data, |
| int fflag, |
| struct ucred *cred, |
| struct proc *p)); |
| #define pfs_select ((int (*) __P(( \ |
| struct vnode *vp, \ |
| int which, \ |
| int fflags, \ |
| struct ucred *cred, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_mmap ((int (*) __P(( \ |
| struct vnode *vp, \ |
| int fflags, \ |
| struct ucred *cred, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_fsync ((int (*) __P(( \ |
| struct vnode *vp, \ |
| int fflags, \ |
| struct ucred *cred, \ |
| int waitfor, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_seek ((int (*) __P(( \ |
| struct vnode *vp, \ |
| off_t oldoff, \ |
| off_t newoff, \ |
| struct ucred *cred))) pfs_badop) |
| #define pfs_remove ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_link ((int (*) __P(( \ |
| struct vnode *vp, \ |
| struct nameidata *ndp, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_rename ((int (*) __P(( \ |
| struct nameidata *fndp, \ |
| struct nameidata *tdnp, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_mkdir ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct vattr *vap, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_rmdir ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct proc *p))) pfs_badop) |
| #define pfs_symlink ((int (*) __P(( \ |
| struct nameidata *ndp, \ |
| struct vattr *vap, \ |
| char *target, \ |
| struct proc *p))) pfs_badop) |
| int pfs_readdir __P(( |
| struct vnode *vp, |
| struct uio *uio, |
| struct ucred *cred, |
| int *eofflagp)); |
| #define pfs_readlink ((int (*) __P(( \ |
| struct vnode *vp, \ |
| struct uio *uio, \ |
| struct ucred *cred))) pfs_badop) |
| #define pfs_abortop ((int (*) __P(( \ |
| struct nameidata *ndp))) pfs_badop) |
| int pfs_inactive __P(( |
| struct vnode *vp, |
| struct proc *p)); |
| int pfs_reclaim __P(( |
| struct vnode *vp)); |
| #define pfs_lock ((int (*) __P(( \ |
| struct vnode *vp))) nullop) |
| #define pfs_unlock ((int (*) __P(( \ |
| struct vnode *vp))) nullop) |
| int pfs_bmap __P(( |
| struct vnode *vp, |
| daddr_t bn, |
| struct vnode **vpp, |
| daddr_t *bnp)); |
| int pfs_strategy __P(( |
| struct buf *bp)); |
| void pfs_print __P(( |
| struct vnode *vp)); |
| #define pfs_islocked ((int (*) __P(( \ |
| struct vnode *vp))) nullop) |
| #define pfs_advlock ((int (*) __P(( \ |
| struct vnode *vp, \ |
| caddr_t id, \ |
| int op, \ |
| struct flock *fl, \ |
| int flags))) pfs_badop) |