blob: 2aa21694a9447a910a5e5e2c575db08b17c73cc3 [file] [log] [blame]
/*
* dlsof.h - NetBSD and OpenBSD header file for lsof
*/
/*
* Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
* 47907. All rights reserved.
*
* Written by Victor A. Abell
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. Neither the authors nor Purdue University are responsible for any
* consequences of the use of this software.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Credit to the authors and Purdue
* University must appear in documentation and sources.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 4. This notice may not be removed or altered.
*/
/*
* $Id: dlsof.h,v 1.38 2006/03/28 21:54:08 abe Exp $
*/
#if !defined(NETBSD_LSOF_H)
#define NETBSD_LSOF_H 1
#include <stdlib.h>
#include <dirent.h>
#include <nlist.h>
#include <paths.h>
#include <setjmp.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
# if defined(HASGETBOOTFILE)
#include <util.h>
# endif /* defined(HASGETBOOTFILE) */
#include <sys/filedesc.h>
#include <sys/mbuf.h>
# if defined(HAS_LWP_H)
#include <sys/lwp.h>
# endif /* defined(HAS_LWP_H) */
# if (defined(OPENBSDV) && OPENBSDV>=3030) \
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000)
# if defined(OPENBSDV) || __NetBSD_Version__<399001100
#define _KERNEL
# endif /* defined(OPENBSDV) || __NetBSD_Version__<399001100 */
# if defined(NETBSDV) && __NetBSD_Version__<399001100
struct buf; /* dummy for function prototype in <sys/buf.h> */
struct uio; /* dummy for function prototype in <sys/buf.h> */
# endif /* defined(NETBSDV && __NetBSD_Version__<399001100) */
#include <sys/ucred.h>
# endif /* (defined(OPENBSDV) && OPENBSDV>=3030)
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000) */
# if defined(NETBSDV) && __NetBSD_Version__<399001100
#include <sys/buf.h>
# endif /* defined(NETBSDV) && __NetBSD_Version__<399001100 */
# if (defined(OPENBSDV) && OPENBSDV>=3030) \
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000 \
&& __NetBSD_Version__<399001100)
#undef _KERNEL
# endif /* (defined(OPENBSDV) && OPENBSDV>=3030) \
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000 \
&& __NetBSD_Version__<399001100) */
#define NFS
#define m_stat mnt_stat
# if (defined(OPENBSDV) && OPENBSDV>=3030) \
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000)
#define _KERNEL
# endif /* (defined(OPENBSDV) && OPENBSDV<3030)
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000) */
#include <sys/mount.h>
# if (defined(OPENBSDV) && OPENBSDV>=3030) \
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000)
#undef _KERNEL
# endif /* (defined(OPENBSDV) && OPENBSDV>=3030)
|| (defined(NETBSDV) && __NetBSD_Version__>=106060000) */
#include <rpc/types.h>
#include <sys/protosw.h>
# if defined(NETBSDV) && NETBSDV>=1003000
#define sockproto NETBSD_sockproto
# endif /* defined(NETBSDV) && NETBSDV>=1003000 */
#include <sys/socket.h>
# if defined(HASMSDOSFS)
# if HASMSDOSFS==1
#include <msdosfs/bpb.h>
#include <msdosfs/fat.h>
# else /* HASMSDOSFS!=1 */
#include <fs/msdosfs/bpb.h>
#include <fs/msdosfs/fat.h>
# endif /* HASMSDOSFS==1 */
# if (defined(OPENBSDV) && OPENBSDV<3030) \
|| (defined(NETBSDV) && __NetBSD_Version__<106060000)
/*
* The netcred and netexport structures may be needed in the msdosfsmount
* structure, defined in <msdosfs/msdosfsmount.h>. So as a terrible hack,
* the lsof Configure script extracts the netcred and netexport structure
* definitions from <sys/mount.h> and places them in "netexport.h".
*
* When needed, the netcred and netexport structures netcred should really
* be obtained from <sys/mount.h>. However they are hidden in <sys/mount.h>
* under _KERNEL, and that sometimes can't be defined when including
* <sys/mount.h> without causing other seemingly insurmountable #include
* problems.
*
* THIS IS A TERRIBLE AND FRAGILE HACK!!! It might break if the netexport or
* netcred definitions change radically in <sys/mount.h>.
*
* It is no longer needed for NetBSD Versions 1.6F and above, or for OpenBSD
* versions 3.3 and above.
*/
#include "netexport.h"
# endif /* (defined(OPENBSDV) && OPENBSDV<3030)
|| (defined(NETBSDV) && __NetBSD_Version__<106060000) */
#define _KERNEL
struct nameidata; /* to satisfy a function prototype in msdosfsmount.h */
#include <msdosfs/msdosfsmount.h>
#undef _KERNEL
#include <msdosfs/direntry.h>
#include <msdosfs/denode.h>
# endif /* defined(HASMSDOSFS) */
# if defined(NETBSDV) && NETBSDV>=1003000
#undef sockproto
# endif /* defined(NETBSDV) && NETBSDV>=1003000 */
#include <sys/socketvar.h>
#include <sys/un.h>
#include <sys/unpcb.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
# if defined(HASIPv6) && defined(NETBSDV) && !defined(HASINRIAIPv6)
#include <netinet/ip6.h>
#include <netinet6/in6_pcb.h>
# endif /* defined(HASIPv6) && defined(NETBSDV) && !defined(HASINRIAIPv6) */
#include <net/route.h>
#include <netinet/in_pcb.h>
#include <netinet/ip_var.h>
#include <netinet/tcp.h>
#include <netinet/tcpip.h>
#include <netinet/tcp_fsm.h>
#include <netinet/tcp_timer.h>
#include <netinet/tcp_var.h>
# if defined(OPENBSDV)
# if !defined(TF_ECN_PERMIT)
#define TF_ECN_PERMIT 0x00008000 /* other side said I could ECN */
# endif /* !defined(TF_ECN_PERMIT) */
# if !defined(TF_RCVD_CE)
#define TF_RCVD_CE 0x00010000 /* send ECE in subsequent segs */
# endif /* !defined(TF_RCVD_CE) */
# if !defined(TF_SEND_CWR)
#define TF_SEND_CWR 0x00020000 /* send CWR in next seg */
# endif /* !defined(TF_SEND_CWR) */
# if !defined(TF_DISABLE_ECN)
#define TF_DISABLE_ECN 0x00040000 /* disable ECN for this connection */
# endif /* !defined(TF_DISABLE_ECN) */
# endif /* defined(OPENBSDV) */
#include <sys/ucred.h>
# if defined(UVM)
/*
* Avoid conflicts with definitions in <vm/vm_param.h>.
*/
#undef FALSE
#undef TRUE
# endif /* defined(UVM) */
#include <sys/vnode.h>
# if defined(NETBSDV) && NETBSDV>=1003000
/*
* Because late in the 1.3I NetBSD development cycle the sockproto structure
* was placed under _KERNEL in <sys/socket.h>, and because defining _KERNEL
* before #include'ing <sys/socket.h> causes other #include problems, the
* sockproto structure definition that might have been in <sys/socket.h> is
* renamed NETBSD_sockproto, and the following definition is used instead.
*
* Ugly, isn't it?
*/
struct sockproto {
u_short sp_family;
u_short sp_protocol;
};
# endif /* defined(NETBSDV) && NETBSDV>=1003000 */
#include <net/raw_cb.h>
#include <sys/domain.h>
#define pmap RPC_pmap
#include <rpc/rpc.h>
#include <rpc/pmap_prot.h>
#undef pmap
#define KERNEL
#include <ufs/ufs/quota.h>
# if defined(DIRBLKSIZ)
#define DIRENT_DIRBLKSIZ DIRBLKSIZ
#undef DIRBLKSIZ
# endif /* defined(DIRBLKSIZ) */
# if defined(HASI_FFS1)
#define _KERNEL
#include <ufs/ufs/ufsmount.h>
#undef _KERNEL
# endif /* defined(HASI_FFS1) */
#include <ufs/ufs/inode.h>
# if defined(DIRENT_BLKSIZ)
#define DIRBLKSIZ DIRENT_DIRBLKSIZ
#undef DIRENT_DIRBLKSIZ
# endif /*defined(DIRENT_BLKSIZ) */
# if defined(HASBUFQ_H)
# if defined(NETBSDV) && NETBSDV>=2099010
#define _KERNEL
#include <sys/bufq.h>
#undef _KERNEL
# endif /* defined(NETBSDV) && NETBSDV>=2099010 */
#endif /* defined(HASBUFQ_H) */
#undef KERNEL
#include <ufs/mfs/mfsnode.h>
# if defined(HASNFSPROTO)
#include <nfs/rpcv2.h>
#include <nfs/nfsproto.h>
# else /* !defined(HASNFSPROTO) */
#include <nfs/nfsv2.h>
# endif /* defined(HASNFSPROTO) */
#include <nfs/nfs.h>
#include <nfs/nfsnode.h>
#include <sys/proc.h>
#include <kvm.h>
#include <sys/sysctl.h>
# if defined(HASKVMGETPROC2)
#define P_ADDR p_paddr
#define P_COMM p_comm
#define P_CWDI p_cwdi
#define P_FD p_fd
#define P_PID p_pid
#define P_PGID p__pgid
#define P_PPID p_ppid
#define P_STAT p_stat
#define P_TRACEP p_tracep
#define P_UID p_uid
#define P_VMSPACE p_vmspace
# else /* !defined(HASKVMGETPROC2) */
#define P_ADDR kp_eproc.e_paddr
#define P_COMM kp_proc.p_comm
#define P_CWDI kp_proc.p_cwdi
#define P_FD kp_proc.p_fd
#define P_PID kp_proc.p_pid
#define P_PGID kp_eproc.e_pgid
#define P_PPID kp_eproc.e_ppid
#define P_STAT kp_proc.p_stat
#define P_TRACEP kp_proc.p_tracep
#define P_UID kp_eproc.e_ucred.cr_uid
#define P_VMSPACE kp_proc.p_vmspace
# endif /* defined(HASKVMGETPROC2) */
# if defined(HASFDESCFS)
#define _KERNEL
#include <miscfs/fdesc/fdesc.h>
#undef _KERNEL
# endif /* defined(HASFDESCFS) */
# if defined(HASKERNFS)
#define _KERNEL
#define Pkern __Pkern
#define Proot __Proot
#define Pnull __Pnull
#define Ptime __Ptime
#define Pint __Pint
#define Pstring __Pstring
#define Phostname __Phostname
#define Pavenrun __Pavenrun
#define Pdevice __Pdevice
#define Pmsgbuf __Pmsgbuf
#define Pipsecsadir __Pipsecsadir
#define Pipsecspdir __Pipsecspdir
#define Pipsecsa __Pipseca
#define Pipsecsp __Pipsecsp
#include <miscfs/kernfs/kernfs.h>
#undef _KERNEL
#undef Pkern
#undef Proot
#undef Pnull
#undef Ptime
#undef Pint
#undef Pstring
#undef Phostname
#undef Pavenrun
#undef Pdevice
#undef Pmsgbuf
#undef Pipsecsadir
#undef Pipsecspdir
#undef Pipseca
#undef Pipsecsp
# if defined(HASKERNFS_KFS_KT)
#define kf_kt kfs_kt
# endif /* defined(HASKERNFS_KFS_KT) */
# endif /* defined(HASKERNFS) */
# if defined(HASNULLFS)
#define _KERNEL
# if defined(NETBSDV) && NETBSDV>=1005000 && __NetBSD_Version__<106060000
#include "netexport.h"
# endif /* defined(NETBSDV) && NETBSDV>=1005000
&& __NetBSD_Version__<106060000 */
#include <miscfs/nullfs/null.h>
#undef _KERNEL
# endif /* defined(HASNULLFS) */
# if defined(HASPROCFS)
# if defined(HASPROCFS_PFSROOT)
#define _KERNEL
# endif /* defined(HASPROCFS_PFSROOT) */
#include <miscfs/procfs/procfs.h>
# if defined(HASPROCFS_PFSROOT)
#undef _KERNEL
#define Proot PFSroot
#define Pproc PFSproc
#define Pcurproc PFScurproc
#define Pmem PFSmem
#define Pregs PFSregs
#define Pfile PFSfile
#define Pfpregs PFSfpregs
#define Pctl PFSctl
#define Pstatus PFSstatus
#define Pnote PFSnote
#define Pnotepg PFSnotepg
# if defined(NetBSDV)
# if NETBSDV>=2000000
#define Pfd PFSfd
# endif /* NETBSDV>=2000000 */
# if NETBSDV>=1006000
#define Pmap PFSmap
#define Pmaps PFSmaps
# endif /* NETBSDV>=1006000 */
# endif /* defined(NetBSDV) */
# endif /* defined(HASPROCFS_PFSROOT) */
#include <machine/reg.h>
# endif /* defined(HASPROCFS) */
# if defined(HASPTYFS)
#define _KERNEL
#include <fs/ptyfs/ptyfs.h>
#include <miscfs/specfs/specdev.h>
#undef _KERNEL
# endif /* defined(HASPTYFS) */
#define KERNEL
#define _KERNEL
#include <sys/file.h>
#include <sys/fcntl.h>
# if defined(HAS_ADVLOCK_ARGS)
struct vop_advlock_args;
# endif /* defined(HAS_ADVLOCK_ARGS) */
# if defined(DTYPE_KQUEUE)
#define HASKQUEUE /* has the kqueue file type */
# if defined(OPENBSDV)
#include <sys/eventvar.h>
# endif /* defined(OPENBSDV) */
# endif /* defined(DTYPE_KQUEUE) */
#include <sys/lockf.h>
#undef KERNEL
#undef _KERNEL
# if defined(UVM)
# if defined(OPENBSDV)
#define _UVM_UVM_FAULT_I_H_ 1 /* avoid OpenBSD's
/* <uvm/uvm_fault_i.h */
# endif /* defined(OPENBSDV) */
#define FALSE 0
#define TRUE 1
#include <uvm/uvm.h>
# endif /* defined(UVM) */
# if defined(HAS_UVM_INCL)
#include <uvm/uvm.h>
#include <uvm/uvm_map.h>
#include <uvm/uvm_object.h>
#include <uvm/uvm_pager.h>
# else /* !defined(HAS_UVM_INCL) */
#include <vm/vm.h>
#include <vm/vm_map.h>
#include <vm/vm_object.h>
#include <vm/vm_pager.h>
# endif /* defined(HAS_UVM_INCL) */
# if defined(HAS_SYS_PIPEH)
# if OPENBSDV==2030 && defined(__sparc__)
# if defined(nbpg)
#undef nbpg
# endif /* defined(nbpg) */
#define nbpg 4096 /* WARNING!!! This should be 8192 for sun4,
* but there's not much chance this value will
* ever be used by any lsof code. (See the
* use of PIPE_NODIRECT in <sys/pipe.h>. */
# endif /* OPENBSDV==2030 && defined(__sparc__) */
#include <sys/pipe.h>
#endif /* defined(HAS_SYS_PIPEH) */
#define COMP_P const void
#define DEVINCR 1024 /* device table malloc() increment */
typedef u_long KA_T;
#define KMEM "/dev/kmem"
#define MALLOC_P void
#define FREE_P MALLOC_P
#define MALLOC_S size_t
# if !defined(MAXSYSCMDL)
#define MAXSYSCMDL MAXCOMLEN /* max system command name length */
# endif /* !defined(MAXSYSCMDL) */
# if defined(N_UNIXV)
#define N_UNIX_TMP(x) #x
#define N_UNIX_STR(x) N_UNIX_TMP(x)
#define N_UNIX N_UNIX_STR(N_UNIXV)
# endif /* defined(N_UNIXV) */
#define QSORT_P void
#define READLEN_T int
#define STRNCPY_L size_t
#define SWAP "/dev/drum"
#define SZOFFTYPE unsigned long long
/* size and offset internal storage
* type */
#define SZOFFPSPEC "ll" /* SZOFFTYPE print specification
* modifier */
/*
* Global storage definitions (including their structure definitions)
*/
extern struct file *Cfp;
extern kvm_t *Kd;
extern KA_T Kpa;
struct l_vfs {
KA_T addr; /* kernel address */
fsid_t fsid; /* file system ID */
char type[MFSNAMELEN]; /* type of file system */
char *dir; /* mounted directory */
char *fsname; /* file system name */
struct l_vfs *next; /* forward link */
};
extern struct l_vfs *Lvfs;
struct mounts {
char *dir; /* directory (mounted on) */
char *fsname; /* file system
* (symbolic links unresolved) */
char *fsnmres; /* file system
* (symbolic links resolved) */
dev_t dev; /* directory st_dev */
dev_t rdev; /* directory st_rdev */
INODETYPE inode; /* directory st_ino */
mode_t mode; /* directory st_mode */
mode_t fs_mode; /* file_system st_mode */
struct mounts *next; /* forward link */
};
#define X_NCACHE "ncache"
#define X_NCSIZE "ncsize"
#define NL_NAME n_name
extern int Np; /* number of kernel processes */
# if defined(HASKVMGETPROC2)
struct kinfo_proc2 *P; /* local process table copy */
# else /* ! defined(HASKVMGETPROC2) */
struct kinfo_proc *P; /* local process table copy */
# endif /* defined(HASKVMGETPROC2) */
extern int pgshift; /* kernel's page shift */
struct sfile {
char *aname; /* argument file name */
char *name; /* file name (after readlink()) */
char *devnm; /* device name (optional) */
dev_t dev; /* device */
dev_t rdev; /* raw device */
u_short mode; /* S_IFMT mode bits from stat() */
int type; /* file type: 0 = file system
* 1 = regular file */
INODETYPE i; /* inode number */
int f; /* file found flag */
struct sfile *next; /* forward link */
};
/*
* Definitions for rdev.c
*/
#define DIRTYPE dirent
#define HASDNAMLEN 1 /* struct DIRTYPE has d_namlen element */
/*
* Definitions for rnam.c and rnmh.c
*/
# if defined(HASNCACHE)
# if (defined(OPENBSDV) && OPENBSDV>=2010) || (defined(NETBSDV) && NETBSDV>=1002000)
#include <stddef.h>
#endif /* (defined(OPENBSDV) && OPENBSDV>=2010) || (defined(NETBSDV) && NETBSDV>=1002000) */
#include <sys/uio.h>
#include <sys/namei.h>
#define NCACHE namecache /* kernel's structure name */
#define NCACHE_NM nc_name /* name in NCACHE */
#define NCACHE_NMLEN nc_nlen /* name length in NCACHE */
#define NCACHE_NODEADDR nc_vp /* node address in NCACHE */
#define NCACHE_PARADDR nc_dvp /* parent node address in NCACHE */
# if (defined(OPENBSDV) && OPENBSDV>=2010) || (defined(NETBSDV) && NETBSDV>=1002000)
#define NCACHE_NXT nc_hash.le_next /* link in NCACHE */
# else /* (defined(OPENBSDV) && OPENBSDV>=2010) || (defined(NETBSDV) && NETBSDV>=1002000) */
# if defined(NetBSD1_0) && NetBSD<1994101
#define NCACHE_NXT nc_nxt /* link in NCACHE */
# else /* !defined(NetBSD1_0) || NetBSD>=1994101 */
#define NCACHE_NXT nc_lru.tqe_next /* link in NCACHE */
# endif /* defined(NetBSD1_0) && NetBSD<1994101 */
# endif /* (defined(OPENBSDV) && OPENBSDV>=2010) || (defined(NETBSDV) && NETBSDV>=1002000) */
# if defined(HASNCVPID)
#define NCACHE_PARID nc_dvpid /* parent node ID in NCACHE */
#define NCACHE_NODEID nc_vpid /* node ID in NCACHE */
# endif /* defined(HASNCVPID) */
# endif /* defined(HASNCACHE) */
#endif /* NETBSD_LSOF_H */