/* * dstore.c - /dev/kmem-based HP-UX global storage 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. */ #ifndef lint static char copyright[] = "@(#) Copyright 1994 Purdue Research Foundation.\nAll rights reserved.\n"; static char *rcsid = "$Id: dstore.c,v 1.12 2007/04/24 16:25:30 abe Exp $"; #endif #include "lsof.h" /* * Global storage definitions */ #if defined(HAS_AFS) # if defined(HASAOPT) char *AFSApath = (char *)NULL; /* alternate AFS name list path * (from -A) */ # endif /* defined(HASAOPT) */ struct vfs *AFSVfsp = (struct vfs *)NULL; /* AFS vfs struct kernel address */ #endif /* defined(HAS_AFS) */ int CloneMaj; /* clone major device number */ /* * Drive_Nl -- table to drive the building of Nl[] via build_Nl() * (See lsof.h and misc.c.) */ struct drive_Nl Drive_Nl[] = { # if defined(hp9000s300) || defined(__hp9000s300) { "arFid", "_afs_rootFid" }, { "avops", "_afs_vnodeops" }, { "avol", "_afs_volumes" }, { X_NCACHE, "_ncache" }, { X_NCSIZE, "_ncsize" }, { "proc", "_proc" }, { "nvops", "_nfs_vnodeops" }, { "nvops3", "_nfs_vnodeops3" }, { "nv3ops", "_nfs3_vnodeops" }, { "nproc", "_nproc" }, { "uvops", "_ufs_vnodeops" }, { "vfops", "_vnodefops" }, # if HPUXV<800 { "upmap", "_Usrptmap" }, { "upt", "_usrpt" }, # endif /* HPUXV<800 */ # endif /* defined(hp9000s300) || defined(__hp9000s300) */ # if defined(hp9000s800) || defined(__hp9000s800) { "arFid", "afs_rootFid" }, { "avops", "afs_vnodeops" }, { "avol", "afs_volumes" }, { X_NCACHE, "ncache" }, { X_NCSIZE, "ncsize" }, { "proc", "proc" }, { "nvops", "nfs_vnodeops" }, { "nvops3", "nfs_vnodeops3" }, { "nv3ops", "nfs3_vnodeops" }, { "nproc", "nproc" }, { "uvops", "ufs_vnodeops" }, { "vfops", "vnodefops" }, # if HPUXV<800 { "ubase", "ubase" }, { "npids", "npids" }, # else /* HPUXV>=800 */ # if HPUXV>=1000 # if HPUXV>=1030 { "clmaj", "clonemajor" }, # endif /* HPUXV>=1030 */ { "cvops", "cdfs_vnodeops" }, { "fvops", "fifo_vnodeops" }, { "pvops", "pipe_vnodeops" }, { "svops", "spec_vnodeops" }, { "vvops", "vx_vnodeops" }, # endif /* HPUXV>=1000 */ # endif /* HPUXV<800 */ # endif /* defined(hp9000s800) || defined(__hp9000s800) */ { "mvops", "mvfs_vnodeops" }, # if HPUXV>=1100 { "chunksz", "sizeof_fd_chunk_t" }, # endif /* HPUXV>=1100 */ { "", "" }, { NULL, NULL } }; int HaveCloneMaj = 0; /* CloneMaj status */ int Kd = -1; /* /dev/kmem file descriptor */ KA_T Kpa; /* kernel proc structure address */ #if HPUXV>=1010 KA_T Ktp; /* kernel thread pointer from proc * struct */ #endif /* HPUXV>=1010 */ struct l_vfs *Lvfs = NULL; /* local vfs structure table */ #if HPUXV<800 int Mem = -1; /* /dev/mem file descriptor */ #endif /* HPUXV<800 */ #if HPUXV<800 && defined(hp9000s800) int npids; /* number of PIDs (for uvadd()) */ struct proc *proc; /* process table address (for uvadd()) */ #endif /* HPUXV<800 && defined(hp9000s300) */ #if defined(HASFSTRUCT) /* * Pff_tab[] - table for printing file flags */ struct pff_tab Pff_tab[] = { { (long)FREAD, FF_READ }, { (long)FWRITE, FF_WRITE }, { (long)FNDELAY, FF_NDELAY }, { (long)FAPPEND, FF_APPEND }, { (long)FMARK, FF_MARK }, { (long)FDEFER, FF_DEFER }, { (long)FNBLOCK, FF_NBLOCK }, { (long)FNOCTTY, FF_NOCTTY }, # if defined(FSYNC) { (long)FSYNC, FF_SYNC }, # else /* !defined(FSYNC) */ # if defined(O_SYNC) { (long)O_SYNC, FF_SYNC }, # endif /* defined(O_SYNC) */ # endif /* defined(FSYNC) */ # if defined(FCOPYAVOID) { (long)FCOPYAVOID, FF_COPYAVOID }, # endif /* defined(FCOPYAVOID) */ # if defined(FPOSIX_AIO) { (long)FPOSIX_AIO, FF_POSIX_AIO }, # endif /* defined(FPOSIX_AIO) */ # if defined(FLARGEFILE) { (long)FLARGEFILE, FF_LARGEFILE }, # else /* !defined(FLARGEFILE) */ # if HPUXV>=1100 { (long)0x800, FF_LARGEFILE }, # endif /* HPUXV>=1100 */ # endif /* defined(FLARGEFILE) */ { (long)0x100, FF_KERNEL }, { (long)0, NULL } }; /* * Pof_tab[] - table for print process open file flags */ # if HPUXV>=1020 #define UF_EXCLOSE 0x1 #define UF_MAPPED 0x2 #define UF_FDLOCK 0x4 #define UF_INUSE 0x8 # endif /* HPUXV>=1020 */ struct pff_tab Pof_tab[] = { # if defined(UF_EXCLOSE) { (long)UF_EXCLOSE, POF_CLOEXEC }, # endif /* defined(UF_EXCLOSE) */ # if defined(UF_MAPPED) { (long)UF_MAPPED, POF_MAPPED }, # endif /* defined(UF_MAPPED) */ # if defined(UF_FDLOCK) { (long)UF_FDLOCK, POF_FDLOCK }, # endif /* defined(UF_FDLOCK) */ # if defined(UF_INUSE) { (long)UF_INUSE, POF_INUSE }, # endif /* defined(UF_INUSE) */ { (long)0, NULL } }; #endif /* defined(HASFSTRUCT) */ #if HPUXV<800 int Swap = -1; /* swap device file descriptor */ #endif /* HPUXV<800 */ #if HPUXV<800 && defined(hp9000s800) struct user *ubase; /* user area base (for uvadd()) */ #endif /* HPUXV<800 && defined(hp9000s800) */ #if HPUXV<800 && defined(hp9000s300) struct user *ubase; /* user area base (for uvadd()) */ struct pte *Usrptmap; /* user page table map pointer */ struct pte *usrpt; /* user page table pointer * (for bktomx from vmmac.h) */ #endif /* HPUXV<800 && defined(hp9000s300) */ KA_T Vnfops; /* vnodefops switch address */