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