blob: 6979e493e8cc4485ef495b4f80e45c5e9ac58cc5 [file] [log] [blame]
/*
* 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)