diff options
author | jlemon <jlemon@FreeBSD.org> | 2001-03-12 03:16:56 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2001-03-12 03:16:56 +0000 |
commit | 9060ef19e9519428bb13225828f90a85571542df (patch) | |
tree | e336cee327fa5c64c3713ae052fa321fde6c5464 /sys/compat/linprocfs/linprocfs.h | |
parent | 9b532c7054cf3ae570bbf4f36637b7a80564cee5 (diff) | |
download | FreeBSD-src-9060ef19e9519428bb13225828f90a85571542df.zip FreeBSD-src-9060ef19e9519428bb13225828f90a85571542df.tar.gz |
Eliminate global node types and instead use an operations vector for
each node in order to make it easier to add new entries.
Rewrite the internal directory structure so that it is possible to
have independent subdirectories. Utilize this to add /proc/net/dev.
Reviewed by: DES
Diffstat (limited to 'sys/compat/linprocfs/linprocfs.h')
-rw-r--r-- | sys/compat/linprocfs/linprocfs.h | 102 |
1 files changed, 50 insertions, 52 deletions
diff --git a/sys/compat/linprocfs/linprocfs.h b/sys/compat/linprocfs/linprocfs.h index fb085fe..5cea78a 100644 --- a/sys/compat/linprocfs/linprocfs.h +++ b/sys/compat/linprocfs/linprocfs.h @@ -1,4 +1,5 @@ /* + * Copyright (c) 2001 Jonathan Lemon <jlemon@freebsd.org> * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav * Copyright (c) 1999 Pierre Beyssac * Copyright (c) 1993 Jan-Simon Pendry @@ -41,37 +42,36 @@ * $FreeBSD$ */ +struct pfsnode; + +typedef int node_action_t __P((struct proc *curp, struct proc *p, + struct pfsnode *pfs, struct uio *uio)); + +struct node_data { + char *nd_name; + u_char nd_namlen; + u_char nd_type; + u_short nd_mode; + int nd_flags; + node_action_t *nd_action; +}; + /* - * The different types of node in a procfs filesystem + * flag bits for nd_flags. */ -typedef enum { - Proot, /* the filesystem root */ - Pself, /* symbolic link for curproc */ - Pproc, /* a process-specific sub-directory */ - Pexe, /* the executable file */ - Pmem, /* the process's memory image */ - Pcmdline, /* command line */ - Pprocstat, /* the process's status */ - Pprocstatus, /* the process's status (again) */ - Pmeminfo, /* memory system statistics */ - Pcpuinfo, /* CPU model, speed and features */ - Pstat, /* kernel/system statistics */ - Puptime, /* system uptime */ - Pversion, /* system version */ -} pfstype; +#define PDEP 0x01 /* entry is process-dependent */ /* * 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 */ - pfstype pfs_type; /* type of procfs node */ - pid_t pfs_pid; /* associated process */ - u_short pfs_mode; /* mode bits for stat() */ - u_long pfs_flags; /* open flags */ - u_long pfs_fileno; /* unique file id */ - pid_t pfs_lockowner; /* pfs lock owner */ + struct pfsnode *pfs_next; /* next on list */ + struct vnode *pfs_vnode; /* vnode associated with this pfsnode */ + struct node_data *pfs_nd; /* static initializer */ + pid_t pfs_pid; /* associated process */ + u_long pfs_flags; /* open flags */ + u_long pfs_fileno; /* unique file id */ + pid_t pfs_lockowner; /* pfs lock owner */ }; #define PROCFS_NAMELEN 8 /* max length of a filename component */ @@ -80,16 +80,12 @@ struct pfsnode { * Kernel stuff follows */ #ifdef _KERNEL -#define CNEQ(cnp, s, len) \ - ((cnp)->cn_namelen == (len) && \ - (bcmp((s), (cnp)->cn_nameptr, (len)) == 0)) - #define KMEM_GROUP 2 -#define PROCFS_FILENO(pid, type) \ - (((type) < Pproc) ? \ - ((type) + 2) : \ - ((((pid)+1) << 4) + ((int) (type)))) +#define PROCFS_FILENO(nd, pid) \ + ((nd)->nd_flags & PDEP) ? \ + (((pid) + 1) << 4) | ((((u_long)(nd)) >> 3) & 0x0f) : \ + (u_long)((nd)->nd_action) /* * Convert between pfsnode vnode @@ -113,26 +109,28 @@ struct dbreg; #define PFIND(pid) ((pid) ? pfind(pid) : &proc0) -void linprocfs_exit __P((struct proc *)); -int linprocfs_freevp __P((struct vnode *)); -int linprocfs_allocvp __P((struct mount *, struct vnode **, long, pfstype)); -int linprocfs_sstep __P((struct proc *)); -void linprocfs_fix_sstep __P((struct proc *)); -#if 0 -int linprocfs_read_regs __P((struct proc *, struct reg *)); -int linprocfs_write_regs __P((struct proc *, struct reg *)); -int linprocfs_read_fpregs __P((struct proc *, struct fpreg *)); -int linprocfs_write_fpregs __P((struct proc *, struct fpreg *)); -int linprocfs_read_dbregs __P((struct proc *, struct dbreg *)); -int linprocfs_write_dbregs __P((struct proc *, struct dbreg *)); -#endif -int linprocfs_domeminfo __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_docpuinfo __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_dostat __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_douptime __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_doversion __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_doprocstat __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); -int linprocfs_doprocstatus __P((struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio)); +void linprocfs_exit __P((struct proc *)); +int linprocfs_freevp __P((struct vnode *)); +int linprocfs_allocvp __P((struct mount *, struct vnode **, long, + struct node_data *)); + +node_action_t linprocfs_docmdline; +node_action_t linprocfs_docpuinfo; +node_action_t linprocfs_dodevices; +node_action_t linprocfs_doexelink; +node_action_t linprocfs_domeminfo; +node_action_t linprocfs_donetdev; +node_action_t linprocfs_doprocstat; +node_action_t linprocfs_doprocstatus; +node_action_t linprocfs_doselflink; +node_action_t linprocfs_dostat; +node_action_t linprocfs_douptime; +node_action_t linprocfs_doversion; + +extern node_action_t procfs_domem; +extern node_action_t procfs_docmdline; + +extern struct node_data root_dir[]; /* functions to check whether or not files should be displayed */ int linprocfs_validfile __P((struct proc *)); |