/*
 * lsof.h - common 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: lsof.h,v 1.65 2011/09/07 19:13:49 abe Exp $
 */


#if	!defined(LSOF_H)
#define	LSOF_H	1

#include "machine.h"

# if	!defined(FSV_DEFAULT)
#define	FSV_DEFAULT	0
# endif	/* !defined(FSV_DEFAULT) */

#include "lsof_fields.h"

#include <ctype.h>
#include <errno.h>

# if	defined(HASSETLOCALE)
#include <locale.h>
# endif	/* defined(HASSETLOCALE) */

#include <netdb.h>
#include <pwd.h>
#include <stdio.h>

#include <sys/stat.h>
#include <sys/wait.h>


/*
 * Definitions and structures that may be needed by dlsof.h
 */

# if	!defined(INODETYPE)
#define	INODETYPE	unsigned long	/* node number storage type */
#define	INODEPSPEC	"l"		/* node number printf specification
					 * modifier */
# endif	/* !defined(INODETYPE) */

struct l_dev {
	dev_t rdev;			/* device */
	INODETYPE inode;		/* inode number */
	char *name;			/* name */
	int v;				/* has been verified
					 * (when DCUnsafe == 1) */
};


/*
 * FILE_FLAG column names
 */

#define	FF_AIO		"AIO"
#define	FF_APPEND	"AP"
#define	FF_ASYNC	"ASYN"
#define	FF_BLKANDSET	"BAS"
#define	FF_BLKINUSE	"BKIU"
#define	FF_BLKSEEK	"BSK"
#define	FF_CIO		"CIO"
#define	FF_CLONE	"CLON"
#define	FF_CLREAD	"CLRD"
#define	FF_COPYAVOID	"CA"
#define	FF_CREAT	"CR"
#define	FF_DATAFLUSH	"DFLU"
#define	FF_DEFER	"DF"
#define	FF_DEFERIND	"DFI"
#define	FF_DELAY	"DLY"
#define	FF_DIRECT	"DIR"
#define	FF_DIRECTORY	"DTY"
#define	FF_DOCLONE	"DOCL"
#define	FF_DSYNC	"DSYN"
#define	FF_EVTONLY	"EVO"
#define	FF_EXCL		"EXCL"
#define	FF_EXEC		"EX"
#define	FF_EXLOCK	"XL"
#define	FF_FILE_MBLK	"MBLK"
#define	FF_FSYNC	"FSYN"
#define	FF_GCFDEFER	"GCDF"
#define	FF_GCFMARK	"GCMK"
#define	FF_GENTTY	"GTTY"
#define	FF_HASLOCK	"LCK"
#define	FF_HUP		"HUP"
#define	FF_KERNEL	"KERN"
#define	FF_KIOCTL	"KIOC"
#define	FF_LARGEFILE	"LG"
#define	FF_MARK		"MK"
#define	FF_MOUNT	"MNT"
#define	FF_MSYNC	"MSYN"
#define	FF_NBDRM	"NBDR"
#define	FF_NBIO		"NBIO"
#define	FF_NBLOCK	"NB"
#define	FF_NBUF		"NBF"
#define	FF_NMFS		"NMFS"
#define	FF_NDELAY	"ND"
#define	FF_NET		"NET"
#define	FF_NOATM	"NATM"
#define	FF_NOCACHE	"NC"
#define	FF_NOCTTY	"NTTY"
#define	FF_NODSYNC	"NDSY"
#define	FF_NOFOLNK	"NFLK"
#define	FF_NOTOSTOP	"NOTO"
#define	FF_NSHARE	"NSH"
#define	FF_OLRMIRROR	"OLRM"
#define	FF_POSIX_AIO	"PAIO"
#define	FF_POSIX_PIPE	"PP"
#define	FF_RAIOSIG	"RAIO"
#define	FF_RCACH	"RC"
#define	FF_RDWR		"RW"
#define	FF_READ		"R"
#define	FF_REVOKED	"REV"
#define	FF_RSHARE	"RSH"
#define	FF_RSYNC	"RSYN"
#define	FF_SETBLK	"BL"
#define	FF_SHLOCK	"SL"
#define	FF_SNAP		"SNAP"
#define	FF_SOCKET	"SOCK"
#define	FF_SQTSH1	"SQS1"
#define	FF_SQTSH2	"SQS2"
#define	FF_SQTREPAIR	"SQR"
#define	FF_SQTSH	"SQSH"
#define	FF_SQTSVM	"SQSV"
#define	FF_STOPIO	"STPI"
#define	FF_SYNC		"SYN"
#define	FF_SYNCRON	"SWR"
#define	FF_TCP_MDEVONLY	"TCPM"
#define	FF_TERMIO	"TIO"
#define	FF_TRUNC	"TR"
#define	FF_VHANGUP	"VH"
#define	FF_VTEXT	"VTXT"
#define	FF_WAKEUP	"WKUP"
#define	FF_WAITING	"WTG"
#define	FF_WRITE	"W"


/*
 * Process open file flag names
 */

#define	POF_ALLOCATED	"ALLC"
#define	POF_BNRD	"BR"
#define	POF_BNWR	"BW"
#define POF_BNHUP	"BHUP"
#define	POF_CLOEXEC	"CX"
#define	POF_CLOSING	"CLSG"
#define	POF_FDLOCK	"LCK"
#define	POF_INUSE	"USE"
#define	POF_MAPPED	"MP"
#define	POF_FSHMAT	"SHMT"
#define	POF_RESERVED	"OPIP"
#define	POF_RSVWT	"RSVW"


/*
 * Cross-over (-x) option values
 */

#define	XO_FILESYS	0x1		/* file system mount points */
#define	XO_SYMLINK	0x2		/* symbolic links */
#define	XO_ALL		(XO_FILESYS | XO_SYMLINK)

#include "dlsof.h"

#include <sys/types.h>			/* just in case -- because utmp.h
					 * may need it */
#include "./regex.h"

# if	defined(EMPTY)
#undef	EMPTY
# endif	/* defined(EMPTY) */

# if	defined(HASUTMPX)
#include <utmpx.h>
# else	/* !defined(HASUTMPX) */
#include <utmp.h>
# endif	/* defined(HASUTMPX) */

extern int errno;
extern char *optarg;
extern int optind;

#define	ACCESSERRFMT	"%s: WARNING: access %s: %s\n"

# if	defined(HASDCACHE)
#define	CRC_POLY	0120001 	/* CRC-16 polynomial */
#define	CRC_TBLL	256		/* crc table length for software */
#define	CRC_BITS	8		/* number of bits contributing */
# endif	/* defined(HASDCACHE) */
#define	CMDL		9		/* maximum number of characters from
					 * command name to print in COMMAND
					 * column */
#define	CWD		" cwd"		/* current working directory fd name */
#define	FDLEN		8		/* fd printing array length */
#define	FSV_FA		0x1		/* file struct addr status */
#define	FSV_CT		0x2		/* file struct count status */
#define	FSV_FG		0x4		/* file struct flags */
#define	FSV_NI		0x8		/* file struct node ID status */

# if	!defined(GET_MAJ_DEV)
#define	GET_MAJ_DEV	major		/* if no dialect specific macro has
					 * been defined, use standard major()
					 * macro */
# endif	/* !defined(GET_MAJ_DEV) */

# if	!defined(GET_MIN_DEV)
#define	GET_MIN_DEV	minor		/* if no dialect specific macro has
					 * been defined, use standard minor()
					 * macro */
# endif	/* !defined(GET_MIN_DEV) */

# if	defined(HASSELINUX)
#define	HASHCNTX	128		/* security context hash bucket count
					 * -- MUST BE A POWER OF 2!!! */
# endif	/* defined(HASSELINUX) */

# if	defined(HASZONES)
#define	HASHZONE	128		/* zone hash bucket count -- MUST BE
					 * A POWER OF 2!!! */
# endif	/* defined(HASZONES) */

#define	IDINCR		10		/* PID/PGID table malloc() increment */

# if	!defined(INADDR_LOOPBACK)
#define	INADDR_LOOPBACK	(u_long)0x7f000001
# endif	/* !defined(INADDR_LOOPBACK) */

#define	IPROTOL		8		/* Internet protocol length */

# if	!defined(KA_T_FMT_X)
#define	KA_T_FMT_X	"0x%08lx"	/* format for printing kernel
					 * addresses in 0x... format */
# endif	/* !defined(KA_T_FMT_X) */

# if	!defined(LOGINML)
#  if	defined(HASUTMPX)
static struct utmpx dummy_utmp;		/* to get login name length */
#define	LOGINML		sizeof(dummy_utmp.ut_user)
					/* login name length */
#  else	/* !defined(HASUTMPX) */
static struct utmp dummy_utmp;		/* to get login name length */
#define	LOGINML		sizeof(dummy_utmp.ut_name)
					/* login name length */
#  endif	/* defined(HASUTMPX) */
# endif	/* !defined(LOGINML) */

#define	LPROCINCR	128		/* Lproc[] allocation increment */
#define	LSOF_URL	"ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/"
#define	MIN_AF_ADDR	sizeof(struct in_addr)
					/* minimum AF_* address length */

# if	defined(HASIPv6)
#define	MAX_AF_ADDR	sizeof(struct in6_addr)
					/* maximum AF_* address length */
# else	/* !defined(HASIPv6) */
#define	MAX_AF_ADDR	MIN_AF_ADDR	/* maximum AF_* address length */
# endif	/* defined(HASIPv6) */

#define	MAXDCPATH	4		/* paths in DCpath[] */
#define	MAXNWAD		100		/* maximum network addresses */

# if	!defined(MEMMOVE)
#define	MEMMOVE		memmove
# endif	/* !defined*MEMMOVE) */

#define	N_REGLR		0		/* regular file system node */
#define	N_AFS		1		/* AFS node */
#define	N_AFPFS		2		/* Apple Darwin AppleShare */
#define	N_AUSX		3		/* Auspex LFS node */
#define	N_AUTO		4		/* automount node */
#define	N_BLK		5		/* block device node */
#define	N_CACHE		6		/* cached file system node */
#define	N_CDFS		7		/* CD-ROM node */
#define	N_CFS		8		/* CFS node */
#define	N_CHR		9		/* character device node */
#define	N_COM		10		/* streams common device node */
#define	N_CTFSADIR	11		/* Solaris CTFS adir node */
#define	N_CTFSBUND	12		/* Solaris CTFS bundle node */
#define	N_CTFSCDIR	13		/* Solaris CTFS cdir node */
#define	N_CTFSCTL	14		/* Solaris CTFS ctl node */
#define	N_CTFSEVT	15		/* Solaris CTFS events node */
#define	N_CTFSLATE	16		/* Solaris CTFS latest node */
#define	N_CTFSROOT	17		/* Solaris CTFS root node */
#define	N_CTFSSTAT	18		/* Solaris CTFS status node */
#define	N_CTFSSYM	19		/* Solaris CTFS symbolic node */
#define	N_CTFSTDIR	20		/* Solaris CTFS type node */
#define	N_CTFSTMPL	21		/* Solaris CTFS template node */
#define	N_DEV		22		/* DEV FS node */
#define	N_DOOR		23		/* DOOR node */
#define	N_FD		24		/* FD node */
#define	N_FIFO		25		/* FIFO node */
#define	N_HSFS		26		/* High Sierra node */
#define	N_KERN		27		/* BSD /kern node */
#define	N_LOFS		28		/* loopback node */
#define	N_MNT		29		/* mount file system device node */
#define	N_MPC		30		/* multiplexed device node */
#define	N_MVFS		31		/* multi-volume file system node (?) */
#define	N_NFS		32		/* NFS node */
#define	N_NFS4		33		/* NFS version 4 node */
#define	N_NM		34		/* named file system node */
#define	N_OBJF		35		/* objfs file system node */
#define	N_PCFS		36		/* PC file system node */
#define	N_PIPE		37		/* pipe device node */
#define	N_PORT		38		/* port node */
#define	N_PROC		39		/* /proc node */
#define	N_PSEU		49		/* pseudofs node */
#define	N_SAMFS		41		/* Solaris SAM-FS */
#define	N_SANFS		42		/* AIX SANFS */
#define	N_SDEV		43		/* Solaris sdev file system node */
#define	N_SHARED	44		/* Solaris sharedfs */
#define	N_SOCK		45		/* sock_vnodeops node */
#define	N_SPEC		46		/* spec_vnodeops node */
#define	N_STREAM	47		/* stream node */
#define	N_TMP		48		/* tmpfs node */
#define	N_UFS		49		/* UNIX file system node */
#define	N_UNKN		50		/* unknown node type */
#define	N_VXFS		51		/* Veritas file system node */
#define	N_XFS		52		/* XFS node */
#define	N_ZFS		53		/* ZFS node */

# if	!defined(OFFDECDIG)
#define	OFFDECDIG	8		/* maximum number of digits in the
					 * offset decimal form (0t...) */
# endif	/* !defined(OFFDECDIG) */

# if	!defined(USELOCALREADDIR)
#define	CloseDir	closedir	/* use standard closedir() */
#define	OpenDir		opendir		/* use standard opendir() */
#define	ReadDir		readdir		/* use standard readdir() */
# endif	/* !defined(USELOCALREADDIR) */

#define	RPTTM		15		/* default repeat seconds */
#define	RTD		" rtd"		/* root directory fd name */
#define TCPTPI_FLAGS	0x0001		/* report TCP/TPI socket options and
					 * state, and TCP_NODELAY state */
#define	TCPTPI_QUEUES	0x0002		/* report TCP/TPI queue lengths */
#define	TCPTPI_STATE	0x0004		/* report TCP/TPI state */
#define TCPTPI_WINDOWS	0x0008		/* report TCP/TPI window sizes */
#define	TCPTPI_ALL	(TCPTPI_QUEUES | TCPTPI_STATE | TCPTPI_WINDOWS)
					/* report all TCP/TPI info */
#define	TCPUDPALLOC	32		/* allocation amount for TCP and UDP
					 * state tables */
#define	TMLIMIT		15		/* readlink() & stat() timeout sec */
#define	TMLIMMIN	2		/* minimum timeout */
#define	TYPEL		8		/* type character length */
#define	UIDCACHEL	1024		/* UID cache length */
#define	UIDINCR		10		/* UID table malloc() increment */
#define	USERPRTL	8		/* UID/login print length limit */

# if	!defined(SZOFFTYPE)
#define	SZOFFTYPE	unsigned long	/* type for size and offset */
#undef	SZOFFPSPEC
#define	SZOFFPSPEC	"l"		/* SZOFFTYPE printf specification
					 * modifier */
# endif	/* !defined(SZOFFTYPE) */

# if	!defined(TIMEVAL_LSOF)
#define	TIMEVAL_LSOF	timeval
# endif	/* !defined(TIMEVAL_LSOF) */

# if	!defined(XDR_PMAPLIST)
#define	XDR_PMAPLIST	xdr_pmaplist
# endif	/* !defined(XDR_PMAPLIST) */

# if	!defined(XDR_VOID)
#define	XDR_VOID	xdr_void
# endif	/* !defined(XDR_VOID) */


/*
 * Output title definitions
 */

#define	CMDTTL		"COMMAND"
extern int CmdColW;
#define	CNTXTTL		"SECURITY-CONTEXT"
extern int CntxColW;
#define DEVTTL		"DEVICE"
extern int DevColW;
#define	FCTTL		"FCT"
extern int FcColW;
#define	FDTTL 		"FD"
extern int FdColW;
#define	FGTTL		"FILE-FLAG"
extern int FgColW;
#define	FSTTL		"FILE-ADDR"
extern int FsColW;
#define	NITTL		"NODE-ID"
extern int NiColW;
extern char *NiTtl;
#define	NLTTL		"NLINK"
extern int NlColW;
#define	NMTTL		"NAME"
extern int NmColW;
#define NODETTL		"NODE"
extern int NodeColW;
#define OFFTTL		"OFFSET"
#define	PGIDTTL		"PGID"
extern int PgidColW;
#define	PIDTTL		"PID"
extern int PidColW;
#define	PPIDTTL		"PPID"
extern int PpidColW;
#define SZTTL		"SIZE"
#define	SZOFFTTL	"SIZE/OFF"
extern int SzOffColW;
#define	TIDTTL		"TID"
extern	int TidColW;
#define TYPETTL		"TYPE"
extern int TypeColW;
#define	USERTTL		"USER"
extern int UserColW;
#define ZONETTL		"ZONE"
extern int ZoneColW;


/*
 * Selection flags
 */

#define	PS_PRI		1		/* primary process selection -- e.g.,
					 * by PID or UID */
#define	PS_SEC		2		/* secondary process selection -- e.g.,
					 * by directory or file */
#define	SELCMD		0x0001		/* select process by command name */
#define	SELCNTX		0x0002		/* select security context (-Z) */
#define	SELFD		0x0004		/* select file by descriptor name */
#define	SELNA		0x0008		/* select socket by address (-i@...) */
#define	SELNET		0x0010		/* select Internet socket files (-i) */
#define	SELNFS		0x0020		/* select NFS files (-N) */
#define	SELNLINK	0x0040		/* select based on link count */
#define	SELNM		0x0080		/* select by name */
#define	SELPGID		0x0100		/* select process group IDs (-g) */
#define	SELPID		0x0200		/* select PIDs (-p) */
#define	SELUID		0x0400		/* select UIDs (-u) */
#define	SELUNX		0x0800		/* select UNIX socket (-U) */
#define	SELZONE		0x1000		/* select zone (-z) */
#define	SELEXCLF	0x2000		/* file selection excluded */
#define	SELTASK		0x4000		/* select tasks (-K) */
#define	SELALL		(SELCMD|SELCNTX|SELFD|SELNA|SELNET|SELNM|SELNFS|SELPID|SELUID|SELUNX|SELZONE|SELTASK)
#define	SELPROC		(SELCMD|SELCNTX|SELPGID|SELPID|SELUID|SELZONE|SELTASK)
					/* process selecters */
#define	SELFILE		(SELFD|SELNFS|SELNLINK|SELNM)	/* file selecters */
#define	SELNW		(SELNA|SELNET|SELUNX)		/* network selecters */

/*
 * Structure definitions
 */

# if	defined(HAS_AFS)
struct afsnode {			/* AFS pseudo-node structure */
	dev_t dev;
	unsigned char ino_st;		/* 1 if inode has a value */
	unsigned char nlink_st;		/* 1 if nlink has a value */
	INODETYPE inode;
	unsigned long size;
	long nlink;
};
# endif	/* defined(HAS_AFS) */

# if	defined(HAS_STD_CLONE)
struct clone {
	int dx;			/* index of device entry in Devtp[] */
	struct clone *next;	/* forward link */
};
extern struct clone *Clone;
# endif	/* defined(HAS_STD_CLONE) */

# if	defined(HASNLIST)
struct drive_Nl {			/* data to drive build_Nl() */
	char *nn;			/* nickname for lookups */
	char *knm;			/* kernel variable for name list */
};
extern struct drive_Nl Drive_Nl[];	/* defined in dstore.c */
# endif	/* defined(HASNLIST) */


/*
 * Global storage definitions (including their structure definitions)
 */

typedef struct efsys_list {
	char *path;			/* path to file system for which kernel
					 * blocks are to be eliminated */
	int pathl;			/* path length */
	int rdlnk;			/* avoid readlink(2) if non-zero */
	struct mounts *mp;		/* local mount table entry pointer */
	struct efsys_list *next;	/* next efsys_list entry pointer */
} efsys_list_t;
extern efsys_list_t *Efsysl;		/* file systems for which kernel blocks
					 * are to be eliminated */

struct int_lst {
	int i;				/* integer argument */
	int f;				/* find state -- meaningful only if
					 * x == 0 */
	int x;				/* excluded state */
};

typedef struct lsof_rx {		/* regular expression table entry */
	char *exp;			/* original regular expression */
	regex_t cx;			/* compiled expression */
	int mc;				/* match count */ 
} lsof_rx_t;
extern lsof_rx_t *CmdRx;
extern int NCmdRxU;

# if	defined(HASFSTRUCT)
struct pff_tab {			/* print file flags table structure */
	long val;			/* flag value */
	char *nm;			/* name to print for flag */
};
# endif	/* defined(HASFSTRUCT) */

struct seluid {
	uid_t uid;			/* User ID */
	char *lnm;			/* specified login name (NULL = none) */
	unsigned char excl;		/* excluded state */
	unsigned char f;		/* selected User ID find state
					 * (meaningful only if excl == 0) */
};

# if	defined(HASBLKDEV)
extern struct l_dev *BDevtp, **BSdev;
extern int BNdev;
# endif	/* defined(HASBLKDEV) */

extern int CkPasswd;

struct str_lst {
	char *str;			/* string */
	int len;			/* string length */
	short f;			/* selected string find state */
	short x;			/* exclusion (if non-zero) */
	struct str_lst *next;		/* next list entry */
};
extern struct str_lst *Cmdl;
extern int CmdLim;
extern int Cmdni;
extern int Cmdnx;
 
# if	defined(HASSELINUX)
typedef struct cntxlist {
	char *cntx;			/* zone name */
	int f;				/* "find" flag (used only in CntxArg) */
	struct cntxlist *next;		/* next zone hash entry */
} cntxlist_t;
extern cntxlist_t *CntxArg;
extern int CntxStatus;
# endif	/* defined(HASSELINUX) */

# if	defined(HASDCACHE)
extern unsigned DCcksum;
extern int DCfd;
extern FILE *DCfs;
extern char *DCpathArg;
extern char *DCpath[];
extern int DCpathX;
extern int DCrebuilt;
extern int DCstate;
extern int DCunsafe;
# endif	/* defined(HASDCACHE) */

extern int DChelp;
extern dev_t DevDev;
extern struct l_dev *Devtp;
extern char **Dstk;
extern int Dstkn;
extern int Dstkx;
extern int ErrStat;
extern uid_t Euid;
extern int Fand;
extern int Fblock;
extern int Fcntx;
extern int Ffield;
extern int Ffilesys;
extern int Fhelp;
extern int Fhost;

# if	defined(HASNCACHE)
extern int Fncache;
extern int NcacheReload;
# endif	/* defined(HASNCACHE) */

extern int Fnet;
extern int FnetTy;
extern int Fnfs;
extern int Fnlink;
extern int Foffset;
extern int Fovhd;
extern int Fport;

# if	!defined(HASNORPC_H)
extern int FportMap;
# endif	/* !defined(HASNORPC_H) */

extern int Fpgid;
extern int Fppid;
extern int Fsize;
extern int Fsv;
extern int FsvByf;
extern int FsvFlagX;
extern int Ftask;
extern int Ftcptpi;
extern int Fterse;
extern int Funix;
extern int Futol;
extern int Fverbose;
extern int Fwarn;

# if	defined(HASXOPT_VALUE)
extern int Fxopt;
# endif	/* defined(HASXOPT_VALUE) */

extern int Fxover;
extern int Fzone;

struct fd_lst {
	char *nm;			/* file descriptor name -- range if
					 * NULL */
	int lo;				/* range start (if nm NULL) */
	int hi;				/* range end (if nm NULL) */
	struct fd_lst *next;
};
extern struct fd_lst *Fdl;
extern int FdlTy;			/* Fdl[] type: -1 == none
					 *		0 == include
					 *		1 == exclude */

struct fieldsel {
	char id;			/* field ID character */
	unsigned char st;		/* field status */
	char *nm;			/* field name */
	int *opt;			/* option variable address */
	int ov;				/* value to OR with option variable */
};
extern struct fieldsel FieldSel[];

extern int Hdr;

enum IDType {PGID, PID};
extern char *InodeFmt_d;
extern char *InodeFmt_x;

struct lfile {
	char access;
	char lock;
	unsigned char dev_def;		/* device number definition status */
	unsigned char inp_ty;		/* inode/iproto type
					 *	0: neither inode nor iproto
					 *	1: print inode in decimal
					 *	2: iproto contains string
					 *      3: print inode in hex
					 */
	unsigned char is_com;		/* common stream status */
	unsigned char is_nfs;		/* NFS file status */
	unsigned char is_stream;	/* stream device status */

# if	defined(HASVXFS) && defined(HASVXFSDNLC)
	unsigned char is_vxfs;		/* VxFS file status */
# endif	/* defined(HASVXFS) && defined(HASVXFSDNLC) */

	unsigned char lmi_srch;		/* local mount info search status:
					 * 1 = printname() search required */

# if	defined(HASMNTSTAT)
	unsigned char mnt_stat;		/* mount point stat(2) status */
# endif	/* defined(HASMNTSTAT) */

	unsigned char nlink_def;	/* link count definition status */
	unsigned char off_def;		/* offset definition status */
	unsigned char rdev_def;		/* rdev definition status */
	unsigned char sz_def;		/* size definition status */

# if	defined(HASFSTRUCT)
	unsigned char fsv;		/* file struct value status */
# endif	/* defined(HASFSTRUCT) */

	char fd[FDLEN];
	char iproto[IPROTOL];
	char type[TYPEL];
	short sf;			/* select flags -- SEL* symbols */
	int ch;				/* VMPC channel: -1 = none */
	int ntype;			/* node type -- N_* value */
	SZOFFTYPE off;
	SZOFFTYPE sz;
	dev_t dev;
	dev_t rdev;
	INODETYPE inode;
	long nlink;			/* link count */
	char *dev_ch;
	char *fsdir;			/* file system directory */
	char *fsdev;			/* file system device */

# if	defined(HASFSINO)
	INODETYPE fs_ino;		/* file system inode number */
# endif	/* defined HASFSINO) */

	struct linaddr {		/* local Internet address information */
	    int af;			/* address family: 0 for none; AF_INET;
					 * or AF_INET6 */
	    int p;			/* port */
	    union {
		struct in_addr a4;	/* AF_INET Internet address */

# if	defined(HASIPv6)
		struct in6_addr a6;	/* AF_INET6 Internet address */
# endif	/* defined(HASIPv6) */

	    } ia;
	} li[2];			/* li[0]: local
					 * li[1]: foreign */
	struct ltstate {		/* local TCP/TPI state */
	    int type;			/* state type:
					 *   -1 == none
					 *    0 == TCP
					 *    1 == TPI or socket (SS_*) */
	    union {
		int i;			/* integer state */
		unsigned int ui;	/* unsigned integer state */
	    } state;

# if	defined(HASSOOPT)
	    unsigned char pqlens;	/* pqlen status: 0 = none */
	    unsigned char qlens;	/* qlen status:  0 = none */
	    unsigned char qlims;	/* qlim status:  0 = none */
	    unsigned char rbszs;	/* rbsz status:  0 = none */
	    unsigned char sbszs;	/* sbsz status:  0 = none */
	    int kai;			/* TCP keep-alive interval */
	    int ltm;			/* TCP linger time */
	    unsigned int opt;		/* socket options */
	    unsigned int pqlen;		/* partial connection queue length */
	    unsigned int qlen;		/* connection queue length */
	    unsigned int qlim;		/* connection queue limit */
	    unsigned long rbsz;		/* receive buffer size */
	    unsigned long sbsz;		/* send buffer size */
# endif	/* defined(HASSOOPT) */

# if	defined(HASSOSTATE)
	    unsigned int ss;		/* socket state */
#  if	defined(HASSBSTATE)
	    unsigned int sbs_rcv;	/* receive socket buffer state */
	    unsigned int sbs_snd;	/* send socket buffer state */
#  endif	/* defined(HASSBSTATE) */
# endif	/* defined(HASSOSTATE) */

# if	defined(HASTCPOPT)
	    unsigned int topt;		/* TCP options */
	    unsigned char msss;		/* mss status: 0 = none */
	    unsigned long mss;		/* TCP maximum segment size */
# endif	/* defined(HASTCPOPT) */

# if	defined(HASTCPTPIQ)
	    unsigned long rq;		/* receive queue length */
	    unsigned long sq;		/* send queue length */
	    unsigned char rqs;		/* rq status: 0 = none */
	    unsigned char sqs;		/* sq status: 0 = none */
# endif	/* defined(HASTCPTPIQ) */

# if	defined(HASTCPTPIW)
	    unsigned char rws;		/* rw status: 0 = none */
	    unsigned char wws;		/* ww status: 0 = none */
	    unsigned long rw;		/* read window size */
	    unsigned long ww;		/* write window size */
# endif	/* defined(HASTCPTPIW) */

	} lts;
	char *nm;
	char *nma;			/* NAME column addition */

# if	defined(HASNCACHE) && HASNCACHE<2
	KA_T na;			/* file structure's node address */
# endif	/* defined(HASNCACHE) && HASNCACHE<2 */

# if	defined(HASNCACHE) && defined(HASNCVPID)
	unsigned long id;		/* capability ID */
# endif	/* defined(HASNCACHE) && defined(HASNCVPID) */

# if	defined(HASLFILEADD)
	HASLFILEADD
# endif	/* defined(HASLFILEADD) */

# if	defined(HASFSTRUCT)
	KA_T fsa;			/* file structure address */
	long fct;			/* file structure's f_count */
	long ffg;			/* file structure's f_flag */
	long pof;			/* process open-file flags */
	KA_T fna;			/* file structure node address */
# endif	/* defined(HASFSTRUCT) */

	struct lfile *next;
};
extern struct lfile *Lf, *Plf;


struct lproc {
	char *cmd;			/* command name */
 
# if	defined(HASSELINUX)
	char *cntx;			/* security context */
# endif	/* defined(HASSELINUX) */

	short sf;			/* select flags -- SEL* symbols */
	short pss;			/* state: 0 = not selected
				 	 *	  1 = wholly selected
				 	 *	  2 = partially selected */
	int pid;			/* process ID */

# if	defined(HASTASKS)
	int tid;			/* task ID */
# endif	/* HASTASKS */

	int pgid;			/* process group ID */
	int ppid;			/* parent process ID */
	uid_t uid;			/* user ID */

# if	defined(HASZONES)
	char *zn;			/* zone name */
# endif	/* defined(HASZONES) */

	struct lfile *file;		/* open files of process */
};
extern struct lproc *Lp, *Lproc;

extern char *Memory;
extern int MntSup;
extern char *MntSupP;

# if	defined(HASPROCFS)
extern struct mounts *Mtprocfs;
# endif

extern int Mxpgid;
extern int Mxpid;
extern int Mxuid;
extern gid_t Mygid;
extern int Mypid;
extern uid_t Myuid;
extern char *Namech;
extern size_t Namechl;
extern int Ndev;

# if	defined(HASNLIST)
#  if	!defined(NLIST_TYPE)
#define	NLIST_TYPE	nlist
#  endif	/* !defined(NLIST_TYPE) */
extern struct NLIST_TYPE *Nl;
extern int Nll;
# endif	/* defined(HASNLIST) */
extern long Nlink;
extern int Nlproc;
extern char *Nmlst;
extern int Npgid;
extern int Npgidi;
extern int Npgidx;
extern int Npid;
extern int Npidi;
extern int Npidx;
extern int Npuns;
extern int Ntype;
extern int Nuid;
extern int Nuidexcl;
extern int Nuidincl;

struct nwad {
	char *arg;			/* argument */
	char *proto;			/* protocol */
	int af;				/* address family -- e.g.,
					 * AF_INET, AF_INET6 */
	unsigned char a[MAX_AF_ADDR];	/* address */
	int sport;			/* starting port */
	int eport;			/* ending port */
	int f;				/* find state */
	struct nwad *next;		/* forward link */
};
extern struct nwad *Nwad;

extern int OffDecDig;
extern char *Pn;

# if	defined(HASFSTRUCT)
extern struct pff_tab Pff_tab[];	/* file flags table */
extern struct pff_tab Pof_tab[];	/* process open file flags table */
# endif	/* defined(HASFSTRUCT) */

# if	defined(HASPROCFS)
struct procfsid {
	pid_t pid;			/* search PID */
	char *nm;			/* search name */
	unsigned char f;		/* match found if == 1 */

#  if	defined(HASPINODEN)
	INODETYPE inode;		/* search inode number */
#  endif	/* defined(HASPINODEN) */

	struct procfsid *next;		/* forward link */
};

extern int Procfind;
extern struct procfsid *Procfsid;
extern int Procsrch;
# endif	/* defined(HASPROCFS) */

extern int PrPass;
extern int RptTm;
extern struct l_dev **Sdev;
extern int Selall;
extern int Selflags;
extern int Setgid;
extern int Selinet;
extern int Setuidroot;
extern struct sfile *Sfile;
extern struct int_lst *Spgid;
extern struct int_lst *Spid;
extern struct seluid *Suid;
extern char *SzOffFmt_0t;
extern char *SzOffFmt_d;
extern char *SzOffFmt_dv;
extern char *SzOffFmt_x;
extern int TaskPrtFl;
extern int TcpStAlloc;
extern unsigned char *TcpStI;
extern int TcpStIn;
extern int TcpStOff;
extern unsigned char *TcpStX;
extern int TcpStXn;
extern int TcpNstates;
extern char **TcpSt;
extern char Terminator;
extern int TmLimit;
extern int UdpStAlloc;
extern unsigned char *UdpStI;
extern int UdpStIn;
extern int UdpStOff;
extern unsigned char *UdpStX;
extern int UdpStXn;
extern int UdpNstates;
extern char **UdpSt;

# if	defined(HASZONES)
typedef struct znhash {
	char *zn;			/* zone name */
	int f;				/* "find" flag (used only in ZoneArg) */
	struct znhash *next;		/* next zone hash entry */
} znhash_t;
extern znhash_t **ZoneArg;
# endif	/* defined(HASZONES) */

#include "proto.h"
#include "dproto.h"

#endif	/* LSOF_H */
