/* * dlsof.h - Solaris 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.47 2011/09/07 19:16:00 abe Exp $ */ #if !defined(SOLARIS_LSOF_H) #define SOLARIS_LSOF_H 1 #include #include #include # if solaris<20600 #define _KMEMUSER 1 # else /* solaris>=20600 */ #include # endif /* solaris<20600 */ #include #include # if defined(HASZONES) #define _KERNEL #include #undef _KERNEL # endif /* defined(HASZONES) */ #include #include #include #include #include #include #include #include #include #include #include #include # if solaris>=110000 #define _KERNEL # endif /* solaris>=110000 */ #include # if solaris>=110000 #undef _KERNEL # endif /* solaris>=110000 */ # if solaris>=70000 #include #include # endif /* solaris>=70000 */ #define _KERNEL #define MI_HRTIMING #include # if solaris<20600 #undef staticf # endif /* solaris<20600 */ #include # if solaris>=70000 #include # endif /* solaris>=70000 */ # if solaris<20600 #include # endif /* solaris<20600 */ # if solaris>=80000 #include #include # endif /* solaris>=80000 */ # if defined(HAS_IPCLASSIFIER_H) #define ffs __kernel_ffs #define inet_ntop __inet_ntop #define inet_pton __inet_pton #define longjmp __kernel_longjmp #define setjmp __kernel_setjmp # if solaris>=110000 #define printf __kernel_printf #define snprintf __kernel_snprintf #define sprintf __kernel_sprintf #define swab __kernel_swab #define vprintf __kernel_vprintf #define vsprintf __kernel_vsprintf #define vsnprintf __kernel_vsnprintf # endif /* solaris>=110000 */ #include #undef ffs #undef inet_ntop #undef inet_pton #undef longjmp #undef setjmp # if solaris>=110000 #undef printf #undef snprintf #undef sprintf #undef swab #undef vprintf #undef vsprintf #undef vsnprintf # endif /* solaris>=110000 */ # endif /* defined(HAS_IPCLASSIFIER_H) */ #include #undef _KERNEL #undef MI_HRTIMING #define exit kernel_exit #define rval_t char #define strsignal kernel_strsignal #include # if defined(HAS_SOCKET_PROTO_H) #define _KERNEL 1 /* DEBUG */ # endif /* HAS_SOCKET_PROTO_H */ #include # if defined(HAS_SOCKET_PROTO_H) #undef _KERNEL /* DEBUG */ # endif /* HAS_SOCKET_PROTO_H */ #undef exit #undef rval_t #undef strsignal # if solaris>=80000 #define _KERNEL 1 # endif /* solaris>=80000 */ #include # if solaris>=80000 #undef _KERNEL # endif /* solaris>=80000 */ #include #include #include # if solaris<20600 #undef MAX #undef MIN # endif /* solaris<20600 */ #include #include #include #include #include #include # if solaris>=20600 #define _KERNEL # endif /* solaris>=20600 */ #include # if solaris>=20600 #undef _KERNEL # endif /* solaris>=20600 */ #include # if solaris>=20500 #include #include #include #include #include #define _KERNEL #include # if solaris>=100000 #define printf lsof_printf #define snprintf lsof_snprintf #define sprintf lsof_sprintf #define swab lsof_swab #define vprintf lsof_vprintf #define vsnprintf lsof_vsnprintf #define vsprintf lsof_vsprintf #include #undef printf #undef snprintf #undef sprintf #undef swab #undef vprintf #undef vsnprintf #undef vsprintf #include #include #include # endif /* solaris>=100000 */ #include #undef _KERNEL # endif /* solaris>=20500 */ # if !defined(_NETDB_H_) #include # endif /* !defined(_NETDB_H_) */ #include #include # if solaris>=20300 # if solaris<20400 /* * The lock_descriptor structure definition is missing from Solaris 2.3. */ struct lock_descriptor { struct lock_descriptor *prev; struct lock_descriptor *next; struct vnode *vnode; struct owner { pid_t pid; long sysid; } owner; int flags; short type; off_t start; off_t end; struct lock_info { struct active_lock_info { struct lock_descriptor *ali_stack; } li_active; struct sleep_lock_info { struct flock sli_flock; /* Ignore the rest. */ } li_sleep; } info; }; #define ACTIVE_LOCK 0x008 /* lock is active */ # else /* solaris>=20400 */ #include # endif /* solaris<20400 */ # endif /* solaris>=20300 */ #include #include #include #include #include #include #include #include #include #include #include # if solaris>=20600 #undef SLOCKED # endif /* solaris>=20600 */ #include #include #include # if solaris>=100000 #define _KERNEL # endif /* solaris >= 100000 */ #include # if solaris>=100000 #include #include #include # endif /* solaris>=100000 */ # if solaris>=100000 #undef _KERNEL # endif /* solaris >= 100000 */ #include #include # if defined(HASPROCFS) #include # endif /* defined(HASPROCFS) */ #include #include #include #include #include #include #include #include #include # if solaris<100000 #include # endif /* solaris<100000 */ /* * Structure for Atria's MVFS nodes */ struct mvfsnode { unsigned long d1[6]; unsigned long m_ino; /* node number */ }; extern int nlist(); # if defined(HAS_AFS) && !defined(AFSAPATHDEF) #define AFSAPATHDEF "/usr/vice/etc/modload/libafs" # endif /* defined(HAS_AFS) && !defined(AFSAPATHDEF) */ #define ALLKMEM "/dev/allkmem" #define COMP_P const void #define CWDLEN (MAXPATHLEN+1) #define DEVINCR 1024 /* device table malloc() increment */ #define DINAMEL 32 #define DIRTYPE dirent # if solaris>=100000 #define GET_MAJ_DEV(d) ((major_t)(d >> L_BITSMINOR & L_MAXMAJ)) #define GET_MIN_DEV(d) ((minor_t)(d & L_MAXMIN)) # endif /* solaris >= 100000 */ # if solaris>=70000 typedef uintptr_t KA_T; # else /* solaris<70000 */ typedef void * KA_T; # endif /* solaris>=70000 */ # if solaris>=70000 #define KA_T_FMT_X "0x%p" # endif /* solaris>=70000 */ # if solaris>=20501 #define KMEM "/dev/mem" # else /* solaris<20501 */ #define KMEM "/dev/kmem" # endif /* solaris>=20501 */ #define MALLOC_P char #define FREE_P MALLOC_P #define MALLOC_S unsigned # if !defined(MAXEND) #define MAXEND 0x7fffffff # endif /* !defined(MAXEND) */ #define MAXSEGS 100 /* maximum text segments */ #define MAXSYSCMDL MAXCOMLEN /* max system command name length */ #define NETCLNML 8 #define N_UNIX "/dev/ksyms" #define PROCMIN 5 /* processes that make a "good" scan */ # if defined(HASPROCFS) #define PR_ROOTINO 2 /* root inode for proc file system */ # endif /* defined(HASPROCFS) */ #define PROCDFLT 256 /* default size for local proc table -- * MUST BE > 4!!! */ #define PROCSIZE sizeof(struct proc) #define PROCTRYLM 5 /* times to try to read proc table */ #define QSORT_P char #define READLEN_T int #define STRNCPY_L int #define STRNML 32 /* stream name length (maximum) */ # if solaris>=20501 /* * Enable large file support. */ # if solaris>=20600 #define fstat fstat64 #define lstat lstat64 #define stat stat64 # endif /* solaris>=20600 */ #define SZOFFTYPE unsigned long long /* size and offset internal storage * type */ #define SZOFFPSPEC "ll" /* SZOFFTYPE printf specification * modifier */ # endif /* solaris>=20501 */ #define U_SIZE sizeof(struct user) /* * Global storage definitions (including their structure definitions) */ # if defined(HAS_AFS) # if defined(HASAOPT) extern char *AFSApath; /* alternate AFS name list path * (from -a) */ # endif /* defined(HASAOPT) */ extern dev_t AFSdev; /* AFS file system device number */ extern int AFSdevStat; /* AFS file system device number * status: 0 = unknown; 1 = known */ extern int AFSfstype; /* AFS file system type index */ extern KA_T AFSVfsp; /* AFS struct vfs kernel pointer */ # endif /* defined(HAS_AFS) */ struct clone { struct l_dev cd; /* device, inode, name, and verify */ int n; /* network flag */ struct clone *next; /* forward link */ }; extern struct clone *Clone; extern major_t CloneMaj; # if defined(HAS_LIBCTF) /* * Definitions for using the CTF library, libctf. */ #include #define CTF_MEMBER_UNDEF ~0UL /* undefined member type */ /* CTF_member_t element definition */ /* * Member structure definition, initialized by CTF_MEMBER() macro calls */ typedef struct CTF_member { char *m_name; /* Member name. */ ulong_t m_offset; /* Member offset, initially in bits, * later bytes */ } CTF_member_t; /* * CTF request structure */ typedef struct CTF_request { char *name; /* structure name */ CTF_member_t *mem; /* member table */ } CTF_request_t; /* * CTF macroes */ #define CTF_MEMBER(name) { #name, CTF_MEMBER_UNDEF } #define CTF_MEMBER_READ(ka, s, members, member) \ kread((KA_T)(ka) + members[MX_ ## member].m_offset, \ (char *)&s->member, sizeof(s->member)) # endif /* defined(HAS_LIBCTF) */ extern char **Fsinfo; extern int Fsinfomax; extern int HasALLKMEM; extern int HaveCloneMaj; extern kvm_t *Kd; struct l_ino { unsigned char dev_def; /* dev member is defined */ unsigned char ino_def; /* ino member is defined */ unsigned char nl_def; /* nl member is defined */ unsigned char rdev_def; /* rdev member is defined */ unsigned char sz_def; /* sz member is defined */ dev_t dev; /* device */ long ino; /* node number */ long nl; /* link count */ dev_t rdev; /* "raw" device */ SZOFFTYPE sz; /* size */ }; struct l_vfs { KA_T addr; /* kernel address */ char *dir; /* mounted directory */ char *fsname; /* file system name */ dev_t dev; /* device */ # if defined(HASFSINO) INODETYPE fs_ino; /* file system inode number */ # endif /* defined(HASFSINO) */ # if defined(HASMNTSTAT) unsigned char mnt_stat; /* mount point stat() status: * 0 = succeeded * 1 = failed */ # endif /* defined(HASMNTSTAT) */ # if solaris>=80000 nlink_t nlink; /* directory link count */ off_t size; /* directory size */ # endif /* solaris>=80000 */ 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 */ # if defined(HASFSTYPE) char *fstype; /* file system type */ # endif /* defined(HASFSTYPE) */ # if solaris>=80000 nlink_t nlink; /* directory st_nlink */ off_t size; /* directory st_size */ # endif /* solaris>=80000 */ # if defined(HASMNTSTAT) unsigned char stat; /* mount point stat() status: * 0 = succeeded * 1 = failed */ # endif /* defined(HASMNTSTAT) */ }; struct pseudo { struct l_dev pd; /* device, inode, path, verify */ struct pseudo *next; /* forward link */ }; extern struct pseudo *Pseudo; /* * Solaris 11 sdev definitions */ #define SDVOP_IP 0 /* Sdev[] devipnet_vnodeops index */ #define SDVOP_NET 1 /* Sdev[] devnet_vnodeops index */ #define SDVOP_PTS 2 /* Sdev[] devpts_vnodeops index */ #define SDVOP_VT 3 /* Sdev[] devvt_vnodeops index */ #define SDVOP_NUM 4 /* number of Sdev[] entries */ struct sfile { char *aname; /* file name argument */ 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 */ }; extern int Unof; /* u_nofiles value */ /* * VxFS definitions */ #define VXVOP_FCL 0 /* Vvops[] vx_fcl_vnodeops_p index */ #define VXVOP_FDD 1 /* Vvops[] fdd_vnops index */ #define VXVOP_FDDCH 2 /* Vvops[] fdd_chain_vnops index */ #define VXVOP_REG 3 /* Vvops[] vx_vnodeops index */ #define VXVOP_REG_P 4 /* Vvops[] vx_vnodeops_p index */ #define VXVOP_NUM 5 /* number of Vvops[] entries */ /* * Kernel name list definitions */ #define NL_NAME n_name #define X_NCACHE "ncache" #define X_NCSIZE "ncsize" /* * Definitions for dvch.c */ # if defined(HASDCACHE) #define DCACHE_CLONE rw_clone_sect /* clone function for read_dcache */ #define DCACHE_CLR clr_sect /* function to clear clone and * pseudo caches when reading the * device cache file fails */ #define DCACHE_PSEUDO rw_pseudo_sect /* pseudo function for read_dcache */ # endif /* defined(HASDCACHE) */ #define DVCH_DEVPATH "/devices" /* * Definition for cvfs.c */ #define CVFS_DEVSAVE 1 # if solaris>=80000 #define CVFS_NLKSAVE 1 #define CVFS_SZSAVE 1 # endif /* solaris>=80000 */ /* * Definitions for rnch.c */ # if defined(HASNCACHE) #include # if !defined(NC_NAMLEN) #define HASDNLCPTR 1 # endif /* !defined(NC_NAMLEN) */ # if solaris>=80000 #define NCACHE_NEGVN "negative_cache_vnode" # endif /* solaris>=80000 */ # endif /* defined(HASNCACHE) */ #endif /* SOLARIS_LSOF_H */