1/*
2 * lsof.h - common header file for lsof
3 */
4
5
6/*
7 * Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
8 * 47907.  All rights reserved.
9 *
10 * Written by Victor A. Abell
11 *
12 * This software is not subject to any license of the American Telephone
13 * and Telegraph Company or the Regents of the University of California.
14 *
15 * Permission is granted to anyone to use this software for any purpose on
16 * any computer system, and to alter it and redistribute it freely, subject
17 * to the following restrictions:
18 *
19 * 1. Neither the authors nor Purdue University are responsible for any
20 *    consequences of the use of this software.
21 *
22 * 2. The origin of this software must not be misrepresented, either by
23 *    explicit claim or by omission.  Credit to the authors and Purdue
24 *    University must appear in documentation and sources.
25 *
26 * 3. Altered versions must be plainly marked as such, and must not be
27 *    misrepresented as being the original software.
28 *
29 * 4. This notice may not be removed or altered.
30 */
31
32
33/*
34 * $Id: lsof.h,v 1.66 2013/01/02 17:14:59 abe Exp $
35 */
36
37
38#if	!defined(LSOF_H)
39#define	LSOF_H	1
40
41#include "machine.h"
42
43# if	!defined(FSV_DEFAULT)
44#define	FSV_DEFAULT	0
45# endif	/* !defined(FSV_DEFAULT) */
46
47#include "lsof_fields.h"
48
49#include <ctype.h>
50#include <errno.h>
51
52# if	defined(HASSETLOCALE)
53#include <locale.h>
54# endif	/* defined(HASSETLOCALE) */
55
56#include <netdb.h>
57#include <pwd.h>
58#include <stdio.h>
59
60#include <sys/stat.h>
61#include <sys/wait.h>
62
63
64/*
65 * Definitions and structures that may be needed by dlsof.h
66 */
67
68# if	!defined(INODETYPE)
69#define	INODETYPE	unsigned long	/* node number storage type */
70#define	INODEPSPEC	"l"		/* node number printf specification
71					 * modifier */
72# endif	/* !defined(INODETYPE) */
73
74struct l_dev {
75	dev_t rdev;			/* device */
76	INODETYPE inode;		/* inode number */
77	char *name;			/* name */
78	int v;				/* has been verified
79					 * (when DCUnsafe == 1) */
80};
81
82
83/*
84 * FILE_FLAG column names
85 */
86
87#define	FF_AIO		"AIO"
88#define	FF_APPEND	"AP"
89#define	FF_ASYNC	"ASYN"
90#define	FF_BLKANDSET	"BAS"
91#define	FF_BLKINUSE	"BKIU"
92#define	FF_BLKSEEK	"BSK"
93#define	FF_CIO		"CIO"
94#define	FF_CLONE	"CLON"
95#define	FF_CLREAD	"CLRD"
96#define	FF_COPYAVOID	"CA"
97#define	FF_CREAT	"CR"
98#define	FF_DATAFLUSH	"DFLU"
99#define	FF_DEFER	"DF"
100#define	FF_DEFERIND	"DFI"
101#define	FF_DELAY	"DLY"
102#define	FF_DIRECT	"DIR"
103#define	FF_DIRECTORY	"DTY"
104#define	FF_DOCLONE	"DOCL"
105#define	FF_DSYNC	"DSYN"
106#define	FF_EVTONLY	"EVO"
107#define	FF_EXCL		"EXCL"
108#define	FF_EXEC		"EX"
109#define	FF_EXLOCK	"XL"
110#define	FF_FILE_MBLK	"MBLK"
111#define	FF_FSYNC	"FSYN"
112#define	FF_GCFDEFER	"GCDF"
113#define	FF_GCFMARK	"GCMK"
114#define	FF_GENTTY	"GTTY"
115#define	FF_HASLOCK	"LCK"
116#define	FF_HUP		"HUP"
117#define	FF_KERNEL	"KERN"
118#define	FF_KIOCTL	"KIOC"
119#define	FF_LARGEFILE	"LG"
120#define	FF_MARK		"MK"
121#define	FF_MOUNT	"MNT"
122#define	FF_MSYNC	"MSYN"
123#define	FF_NBDRM	"NBDR"
124#define	FF_NBIO		"NBIO"
125#define	FF_NBLOCK	"NB"
126#define	FF_NBUF		"NBF"
127#define	FF_NMFS		"NMFS"
128#define	FF_NDELAY	"ND"
129#define	FF_NET		"NET"
130#define	FF_NOATM	"NATM"
131#define	FF_NOCACHE	"NC"
132#define	FF_NOCTTY	"NTTY"
133#define	FF_NODSYNC	"NDSY"
134#define	FF_NOFOLNK	"NFLK"
135#define	FF_NOTOSTOP	"NOTO"
136#define	FF_NSHARE	"NSH"
137#define	FF_OLRMIRROR	"OLRM"
138#define	FF_POSIX_AIO	"PAIO"
139#define	FF_POSIX_PIPE	"PP"
140#define	FF_RAIOSIG	"RAIO"
141#define	FF_RCACH	"RC"
142#define	FF_RDWR		"RW"
143#define	FF_READ		"R"
144#define	FF_REVOKED	"REV"
145#define	FF_RSHARE	"RSH"
146#define	FF_RSYNC	"RSYN"
147#define	FF_SETBLK	"BL"
148#define	FF_SHLOCK	"SL"
149#define	FF_SNAP		"SNAP"
150#define	FF_SOCKET	"SOCK"
151#define	FF_SQTSH1	"SQS1"
152#define	FF_SQTSH2	"SQS2"
153#define	FF_SQTREPAIR	"SQR"
154#define	FF_SQTSH	"SQSH"
155#define	FF_SQTSVM	"SQSV"
156#define	FF_STOPIO	"STPI"
157#define	FF_SYNC		"SYN"
158#define	FF_SYNCRON	"SWR"
159#define	FF_TCP_MDEVONLY	"TCPM"
160#define	FF_TERMIO	"TIO"
161#define	FF_TRUNC	"TR"
162#define	FF_VHANGUP	"VH"
163#define	FF_VTEXT	"VTXT"
164#define	FF_WAKEUP	"WKUP"
165#define	FF_WAITING	"WTG"
166#define	FF_WRITE	"W"
167
168
169/*
170 * Process open file flag names
171 */
172
173#define	POF_ALLOCATED	"ALLC"
174#define	POF_BNRD	"BR"
175#define	POF_BNWR	"BW"
176#define POF_BNHUP	"BHUP"
177#define	POF_CLOEXEC	"CX"
178#define	POF_CLOSING	"CLSG"
179#define	POF_FDLOCK	"LCK"
180#define	POF_INUSE	"USE"
181#define	POF_MAPPED	"MP"
182#define	POF_FSHMAT	"SHMT"
183#define	POF_RESERVED	"OPIP"
184#define	POF_RSVWT	"RSVW"
185
186
187/*
188 * Cross-over (-x) option values
189 */
190
191#define	XO_FILESYS	0x1		/* file system mount points */
192#define	XO_SYMLINK	0x2		/* symbolic links */
193#define	XO_ALL		(XO_FILESYS | XO_SYMLINK)
194
195#include "dlsof.h"
196
197#include <sys/types.h>			/* just in case -- because utmp.h
198					 * may need it */
199#include "./regex.h"
200
201# if	defined(EMPTY)
202#undef	EMPTY
203# endif	/* defined(EMPTY) */
204
205# if	defined(HASUTMPX)
206#include <utmpx.h>
207# else	/* !defined(HASUTMPX) */
208#include <utmp.h>
209# endif	/* defined(HASUTMPX) */
210
211extern int errno;
212extern char *optarg;
213extern int optind;
214
215#define	ACCESSERRFMT	"%s: WARNING: access %s: %s\n"
216
217# if	defined(HASDCACHE)
218#define	CRC_POLY	0120001 	/* CRC-16 polynomial */
219#define	CRC_TBLL	256		/* crc table length for software */
220#define	CRC_BITS	8		/* number of bits contributing */
221# endif	/* defined(HASDCACHE) */
222#define	CMDL		9		/* maximum number of characters from
223					 * command name to print in COMMAND
224					 * column */
225#define	CWD		" cwd"		/* current working directory fd name */
226#define	FDLEN		8		/* fd printing array length */
227#define	FSV_FA		0x1		/* file struct addr status */
228#define	FSV_CT		0x2		/* file struct count status */
229#define	FSV_FG		0x4		/* file struct flags */
230#define	FSV_NI		0x8		/* file struct node ID status */
231
232# if	!defined(GET_MAJ_DEV)
233#define	GET_MAJ_DEV	major		/* if no dialect specific macro has
234					 * been defined, use standard major()
235					 * macro */
236# endif	/* !defined(GET_MAJ_DEV) */
237
238# if	!defined(GET_MIN_DEV)
239#define	GET_MIN_DEV	minor		/* if no dialect specific macro has
240					 * been defined, use standard minor()
241					 * macro */
242# endif	/* !defined(GET_MIN_DEV) */
243
244# if	defined(HASSELINUX)
245#define	HASHCNTX	128		/* security context hash bucket count
246					 * -- MUST BE A POWER OF 2!!! */
247# endif	/* defined(HASSELINUX) */
248
249# if	defined(HASZONES)
250#define	HASHZONE	128		/* zone hash bucket count -- MUST BE
251					 * A POWER OF 2!!! */
252# endif	/* defined(HASZONES) */
253
254#define	IDINCR		10		/* PID/PGID table malloc() increment */
255
256# if	!defined(INADDR_LOOPBACK)
257#define	INADDR_LOOPBACK	(u_long)0x7f000001
258# endif	/* !defined(INADDR_LOOPBACK) */
259
260#define	IPROTOL		8		/* Internet protocol length */
261
262# if	!defined(KA_T_FMT_X)
263#define	KA_T_FMT_X	"0x%08lx"	/* format for printing kernel
264					 * addresses in 0x... format */
265# endif	/* !defined(KA_T_FMT_X) */
266
267# if	!defined(LOGINML)
268#  if	defined(HASUTMPX)
269static struct utmpx dummy_utmp;		/* to get login name length */
270#define	LOGINML		sizeof(dummy_utmp.ut_user)
271					/* login name length */
272#  else	/* !defined(HASUTMPX) */
273static struct utmp dummy_utmp;		/* to get login name length */
274#define	LOGINML		sizeof(dummy_utmp.ut_name)
275					/* login name length */
276#  endif	/* defined(HASUTMPX) */
277# endif	/* !defined(LOGINML) */
278
279#define	LPROCINCR	128		/* Lproc[] allocation increment */
280#define	LSOF_URL	"ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/"
281#define	MIN_AF_ADDR	sizeof(struct in_addr)
282					/* minimum AF_* address length */
283
284# if	defined(HASIPv6)
285#define	MAX_AF_ADDR	sizeof(struct in6_addr)
286					/* maximum AF_* address length */
287# else	/* !defined(HASIPv6) */
288#define	MAX_AF_ADDR	MIN_AF_ADDR	/* maximum AF_* address length */
289# endif	/* defined(HASIPv6) */
290
291#define	MAXDCPATH	4		/* paths in DCpath[] */
292#define	MAXNWAD		100		/* maximum network addresses */
293
294# if	!defined(MEMMOVE)
295#define	MEMMOVE		memmove
296# endif	/* !defined*MEMMOVE) */
297
298#define	N_REGLR		0		/* regular file system node */
299#define	N_AFS		1		/* AFS node */
300#define	N_AFPFS		2		/* Apple Darwin AppleShare */
301#define	N_ANON_INODE	3		/* Linux anon_inodefs node */
302#define	N_AUSX		4		/* Auspex LFS node */
303#define	N_AUTO		5		/* automount node */
304#define	N_BLK		6		/* block device node */
305#define	N_CACHE		7		/* cached file system node */
306#define	N_CDFS		8		/* CD-ROM node */
307#define	N_CFS		9		/* CFS node */
308#define	N_CHR		10		/* character device node */
309#define	N_COM		11		/* streams common device node */
310#define	N_CTFSADIR	12		/* Solaris CTFS adir node */
311#define	N_CTFSBUND	13		/* Solaris CTFS bundle node */
312#define	N_CTFSCDIR	14		/* Solaris CTFS cdir node */
313#define	N_CTFSCTL	15		/* Solaris CTFS ctl node */
314#define	N_CTFSEVT	16		/* Solaris CTFS events node */
315#define	N_CTFSLATE	17		/* Solaris CTFS latest node */
316#define	N_CTFSROOT	18		/* Solaris CTFS root node */
317#define	N_CTFSSTAT	19		/* Solaris CTFS status node */
318#define	N_CTFSSYM	20		/* Solaris CTFS symbolic node */
319#define	N_CTFSTDIR	21		/* Solaris CTFS type node */
320#define	N_CTFSTMPL	22		/* Solaris CTFS template node */
321#define	N_DEV		23		/* DEV FS node */
322#define	N_DOOR		24		/* DOOR node */
323#define	N_FD		25		/* FD node */
324#define	N_FIFO		26		/* FIFO node */
325#define	N_HSFS		27		/* High Sierra node */
326#define	N_KERN		28		/* BSD /kern node */
327#define	N_LOFS		29		/* loopback node */
328#define	N_MNT		30		/* mount file system device node */
329#define	N_MPC		31		/* multiplexed device node */
330#define	N_MVFS		32		/* multi-volume file system node (?) */
331#define	N_NFS		33		/* NFS node */
332#define	N_NFS4		34		/* NFS version 4 node */
333#define	N_NM		35		/* named file system node */
334#define	N_OBJF		36		/* objfs file system node */
335#define	N_PCFS		37		/* PC file system node */
336#define	N_PIPE		38		/* pipe device node */
337#define	N_PORT		39		/* port node */
338#define	N_PROC		40		/* /proc node */
339#define	N_PSEU		41		/* pseudofs node */
340#define	N_SAMFS		42		/* Solaris SAM-FS */
341#define	N_SANFS		43		/* AIX SANFS */
342#define	N_SDEV		44		/* Solaris sdev file system node */
343#define	N_SHARED	45		/* Solaris sharedfs */
344#define	N_SOCK		46		/* sock_vnodeops node */
345#define	N_SPEC		47		/* spec_vnodeops node */
346#define	N_STREAM	48		/* stream node */
347#define	N_TMP		49		/* tmpfs node */
348#define	N_UFS		50		/* UNIX file system node */
349#define	N_UNKN		51		/* unknown node type */
350#define	N_VXFS		52		/* Veritas file system node */
351#define	N_XFS		53		/* XFS node */
352#define	N_ZFS		54		/* ZFS node */
353
354# if	!defined(OFFDECDIG)
355#define	OFFDECDIG	8		/* maximum number of digits in the
356					 * offset decimal form (0t...) */
357# endif	/* !defined(OFFDECDIG) */
358
359# if	!defined(USELOCALREADDIR)
360#define	CloseDir	closedir	/* use standard closedir() */
361#define	OpenDir		opendir		/* use standard opendir() */
362#define	ReadDir		readdir		/* use standard readdir() */
363# endif	/* !defined(USELOCALREADDIR) */
364
365#define	RPTTM		15		/* default repeat seconds */
366#define	RTD		" rtd"		/* root directory fd name */
367#define TCPTPI_FLAGS	0x0001		/* report TCP/TPI socket options and
368					 * state, and TCP_NODELAY state */
369#define	TCPTPI_QUEUES	0x0002		/* report TCP/TPI queue lengths */
370#define	TCPTPI_STATE	0x0004		/* report TCP/TPI state */
371#define TCPTPI_WINDOWS	0x0008		/* report TCP/TPI window sizes */
372#define	TCPTPI_ALL	(TCPTPI_QUEUES | TCPTPI_STATE | TCPTPI_WINDOWS)
373					/* report all TCP/TPI info */
374#define	TCPUDPALLOC	32		/* allocation amount for TCP and UDP
375					 * state tables */
376#define	TMLIMIT		15		/* readlink() & stat() timeout sec */
377#define	TMLIMMIN	2		/* minimum timeout */
378#define	TYPEL		8		/* type character length */
379#define	UIDCACHEL	1024		/* UID cache length */
380#define	UIDINCR		10		/* UID table malloc() increment */
381#define	USERPRTL	8		/* UID/login print length limit */
382
383# if	!defined(SZOFFTYPE)
384#define	SZOFFTYPE	unsigned long	/* type for size and offset */
385#undef	SZOFFPSPEC
386#define	SZOFFPSPEC	"l"		/* SZOFFTYPE printf specification
387					 * modifier */
388# endif	/* !defined(SZOFFTYPE) */
389
390# if	!defined(TIMEVAL_LSOF)
391#define	TIMEVAL_LSOF	timeval
392# endif	/* !defined(TIMEVAL_LSOF) */
393
394# if	!defined(XDR_PMAPLIST)
395#define	XDR_PMAPLIST	xdr_pmaplist
396# endif	/* !defined(XDR_PMAPLIST) */
397
398# if	!defined(XDR_VOID)
399#define	XDR_VOID	xdr_void
400# endif	/* !defined(XDR_VOID) */
401
402
403/*
404 * Output title definitions
405 */
406
407#define	CMDTTL		"COMMAND"
408extern int CmdColW;
409#define	CNTXTTL		"SECURITY-CONTEXT"
410extern int CntxColW;
411#define DEVTTL		"DEVICE"
412extern int DevColW;
413#define	FCTTL		"FCT"
414extern int FcColW;
415#define	FDTTL 		"FD"
416extern int FdColW;
417#define	FGTTL		"FILE-FLAG"
418extern int FgColW;
419#define	FSTTL		"FILE-ADDR"
420extern int FsColW;
421#define	NITTL		"NODE-ID"
422extern int NiColW;
423extern char *NiTtl;
424#define	NLTTL		"NLINK"
425extern int NlColW;
426#define	NMTTL		"NAME"
427extern int NmColW;
428#define NODETTL		"NODE"
429extern int NodeColW;
430#define OFFTTL		"OFFSET"
431#define	PGIDTTL		"PGID"
432extern int PgidColW;
433#define	PIDTTL		"PID"
434extern int PidColW;
435#define	PPIDTTL		"PPID"
436extern int PpidColW;
437#define SZTTL		"SIZE"
438#define	SZOFFTTL	"SIZE/OFF"
439extern int SzOffColW;
440#define	TIDTTL		"TID"
441extern	int TidColW;
442#define TYPETTL		"TYPE"
443extern int TypeColW;
444#define	USERTTL		"USER"
445extern int UserColW;
446#define ZONETTL		"ZONE"
447extern int ZoneColW;
448
449
450/*
451 * Selection flags
452 */
453
454#define	PS_PRI		1		/* primary process selection -- e.g.,
455					 * by PID or UID */
456#define	PS_SEC		2		/* secondary process selection -- e.g.,
457					 * by directory or file */
458#define	SELCMD		0x0001		/* select process by command name */
459#define	SELCNTX		0x0002		/* select security context (-Z) */
460#define	SELFD		0x0004		/* select file by descriptor name */
461#define	SELNA		0x0008		/* select socket by address (-i@...) */
462#define	SELNET		0x0010		/* select Internet socket files (-i) */
463#define	SELNFS		0x0020		/* select NFS files (-N) */
464#define	SELNLINK	0x0040		/* select based on link count */
465#define	SELNM		0x0080		/* select by name */
466#define	SELPGID		0x0100		/* select process group IDs (-g) */
467#define	SELPID		0x0200		/* select PIDs (-p) */
468#define	SELUID		0x0400		/* select UIDs (-u) */
469#define	SELUNX		0x0800		/* select UNIX socket (-U) */
470#define	SELZONE		0x1000		/* select zone (-z) */
471#define	SELEXCLF	0x2000		/* file selection excluded */
472#define	SELTASK		0x4000		/* select tasks (-K) */
473#define	SELALL		(SELCMD|SELCNTX|SELFD|SELNA|SELNET|SELNM|SELNFS|SELPID|SELUID|SELUNX|SELZONE|SELTASK)
474#define	SELPROC		(SELCMD|SELCNTX|SELPGID|SELPID|SELUID|SELZONE|SELTASK)
475					/* process selecters */
476#define	SELFILE		(SELFD|SELNFS|SELNLINK|SELNM)	/* file selecters */
477#define	SELNW		(SELNA|SELNET|SELUNX)		/* network selecters */
478
479/*
480 * Structure definitions
481 */
482
483# if	defined(HAS_AFS)
484struct afsnode {			/* AFS pseudo-node structure */
485	dev_t dev;
486	unsigned char ino_st;		/* 1 if inode has a value */
487	unsigned char nlink_st;		/* 1 if nlink has a value */
488	INODETYPE inode;
489	unsigned long size;
490	long nlink;
491};
492# endif	/* defined(HAS_AFS) */
493
494# if	defined(HAS_STD_CLONE)
495struct clone {
496	int dx;			/* index of device entry in Devtp[] */
497	struct clone *next;	/* forward link */
498};
499extern struct clone *Clone;
500# endif	/* defined(HAS_STD_CLONE) */
501
502# if	defined(HASNLIST)
503struct drive_Nl {			/* data to drive build_Nl() */
504	char *nn;			/* nickname for lookups */
505	char *knm;			/* kernel variable for name list */
506};
507extern struct drive_Nl Drive_Nl[];	/* defined in dstore.c */
508# endif	/* defined(HASNLIST) */
509
510
511/*
512 * Global storage definitions (including their structure definitions)
513 */
514
515typedef struct efsys_list {
516	char *path;			/* path to file system for which kernel
517					 * blocks are to be eliminated */
518	int pathl;			/* path length */
519	int rdlnk;			/* avoid readlink(2) if non-zero */
520	struct mounts *mp;		/* local mount table entry pointer */
521	struct efsys_list *next;	/* next efsys_list entry pointer */
522} efsys_list_t;
523extern efsys_list_t *Efsysl;		/* file systems for which kernel blocks
524					 * are to be eliminated */
525
526struct int_lst {
527	int i;				/* integer argument */
528	int f;				/* find state -- meaningful only if
529					 * x == 0 */
530	int x;				/* excluded state */
531};
532
533typedef struct lsof_rx {		/* regular expression table entry */
534	char *exp;			/* original regular expression */
535	regex_t cx;			/* compiled expression */
536	int mc;				/* match count */
537} lsof_rx_t;
538extern lsof_rx_t *CmdRx;
539extern int NCmdRxU;
540
541# if	defined(HASFSTRUCT)
542struct pff_tab {			/* print file flags table structure */
543	long val;			/* flag value */
544	char *nm;			/* name to print for flag */
545};
546# endif	/* defined(HASFSTRUCT) */
547
548struct seluid {
549	uid_t uid;			/* User ID */
550	char *lnm;			/* specified login name (NULL = none) */
551	unsigned char excl;		/* excluded state */
552	unsigned char f;		/* selected User ID find state
553					 * (meaningful only if excl == 0) */
554};
555
556# if	defined(HASBLKDEV)
557extern struct l_dev *BDevtp, **BSdev;
558extern int BNdev;
559# endif	/* defined(HASBLKDEV) */
560
561extern int CkPasswd;
562
563struct str_lst {
564	char *str;			/* string */
565	int len;			/* string length */
566	short f;			/* selected string find state */
567	short x;			/* exclusion (if non-zero) */
568	struct str_lst *next;		/* next list entry */
569};
570extern struct str_lst *Cmdl;
571extern int CmdLim;
572extern int Cmdni;
573extern int Cmdnx;
574
575# if	defined(HASSELINUX)
576typedef struct cntxlist {
577	char *cntx;			/* zone name */
578	int f;				/* "find" flag (used only in CntxArg) */
579	struct cntxlist *next;		/* next zone hash entry */
580} cntxlist_t;
581extern cntxlist_t *CntxArg;
582extern int CntxStatus;
583# endif	/* defined(HASSELINUX) */
584
585# if	defined(HASDCACHE)
586extern unsigned DCcksum;
587extern int DCfd;
588extern FILE *DCfs;
589extern char *DCpathArg;
590extern char *DCpath[];
591extern int DCpathX;
592extern int DCrebuilt;
593extern int DCstate;
594extern int DCunsafe;
595# endif	/* defined(HASDCACHE) */
596
597extern int DChelp;
598extern dev_t DevDev;
599extern struct l_dev *Devtp;
600extern char **Dstk;
601extern int Dstkn;
602extern int Dstkx;
603extern int ErrStat;
604extern uid_t Euid;
605extern int Fand;
606extern int Fblock;
607extern int Fcntx;
608extern int Ffield;
609extern int Ffilesys;
610extern int Fhelp;
611extern int Fhost;
612
613# if	defined(HASNCACHE)
614extern int Fncache;
615extern int NcacheReload;
616# endif	/* defined(HASNCACHE) */
617
618extern int Fnet;
619extern int FnetTy;
620extern int Fnfs;
621extern int Fnlink;
622extern int Foffset;
623extern int Fovhd;
624extern int Fport;
625
626# if	!defined(HASNORPC_H)
627extern int FportMap;
628# endif	/* !defined(HASNORPC_H) */
629
630extern int Fpgid;
631extern int Fppid;
632extern int Fsize;
633extern int Fsv;
634extern int FsvByf;
635extern int FsvFlagX;
636extern int Ftask;
637extern int Ftcptpi;
638extern int Fterse;
639extern int Funix;
640extern int Futol;
641extern int Fverbose;
642extern int Fwarn;
643
644# if	defined(HASXOPT_VALUE)
645extern int Fxopt;
646# endif	/* defined(HASXOPT_VALUE) */
647
648extern int Fxover;
649extern int Fzone;
650
651struct fd_lst {
652	char *nm;			/* file descriptor name -- range if
653					 * NULL */
654	int lo;				/* range start (if nm NULL) */
655	int hi;				/* range end (if nm NULL) */
656	struct fd_lst *next;
657};
658extern struct fd_lst *Fdl;
659extern int FdlTy;			/* Fdl[] type: -1 == none
660					 *		0 == include
661					 *		1 == exclude */
662
663struct fieldsel {
664	char id;			/* field ID character */
665	unsigned char st;		/* field status */
666	char *nm;			/* field name */
667	int *opt;			/* option variable address */
668	int ov;				/* value to OR with option variable */
669};
670extern struct fieldsel FieldSel[];
671
672extern int Hdr;
673
674enum IDType {PGID, PID};
675extern char *InodeFmt_d;
676extern char *InodeFmt_x;
677extern int LastPid;
678
679struct lfile {
680	char access;
681	char lock;
682	unsigned char dev_def;		/* device number definition status */
683	unsigned char inp_ty;		/* inode/iproto type
684					 *	0: neither inode nor iproto
685					 *	1: print inode in decimal
686					 *	2: iproto contains string
687					 *      3: print inode in hex
688					 */
689	unsigned char is_com;		/* common stream status */
690	unsigned char is_nfs;		/* NFS file status */
691	unsigned char is_stream;	/* stream device status */
692
693# if	defined(HASVXFS) && defined(HASVXFSDNLC)
694	unsigned char is_vxfs;		/* VxFS file status */
695# endif	/* defined(HASVXFS) && defined(HASVXFSDNLC) */
696
697	unsigned char lmi_srch;		/* local mount info search status:
698					 * 1 = printname() search required */
699
700# if	defined(HASMNTSTAT)
701	unsigned char mnt_stat;		/* mount point stat(2) status */
702# endif	/* defined(HASMNTSTAT) */
703
704	unsigned char nlink_def;	/* link count definition status */
705	unsigned char off_def;		/* offset definition status */
706	unsigned char rdev_def;		/* rdev definition status */
707	unsigned char sz_def;		/* size definition status */
708
709# if	defined(HASFSTRUCT)
710	unsigned char fsv;		/* file struct value status */
711# endif	/* defined(HASFSTRUCT) */
712
713	char fd[FDLEN];
714	char iproto[IPROTOL];
715	char type[TYPEL];
716	short sf;			/* select flags -- SEL* symbols */
717	int ch;				/* VMPC channel: -1 = none */
718	int ntype;			/* node type -- N_* value */
719	SZOFFTYPE off;
720	SZOFFTYPE sz;
721	dev_t dev;
722	dev_t rdev;
723	INODETYPE inode;
724	long nlink;			/* link count */
725	char *dev_ch;
726	char *fsdir;			/* file system directory */
727	char *fsdev;			/* file system device */
728
729# if	defined(HASFSINO)
730	INODETYPE fs_ino;		/* file system inode number */
731# endif	/* defined HASFSINO) */
732
733	struct linaddr {		/* local Internet address information */
734	    int af;			/* address family: 0 for none; AF_INET;
735					 * or AF_INET6 */
736	    int p;			/* port */
737	    union {
738		struct in_addr a4;	/* AF_INET Internet address */
739
740# if	defined(HASIPv6)
741		struct in6_addr a6;	/* AF_INET6 Internet address */
742# endif	/* defined(HASIPv6) */
743
744	    } ia;
745	} li[2];			/* li[0]: local
746					 * li[1]: foreign */
747	struct ltstate {		/* local TCP/TPI state */
748	    int type;			/* state type:
749					 *   -1 == none
750					 *    0 == TCP
751					 *    1 == TPI or socket (SS_*) */
752	    union {
753		int i;			/* integer state */
754		unsigned int ui;	/* unsigned integer state */
755	    } state;
756
757# if	defined(HASSOOPT)
758	    unsigned char pqlens;	/* pqlen status: 0 = none */
759	    unsigned char qlens;	/* qlen status:  0 = none */
760	    unsigned char qlims;	/* qlim status:  0 = none */
761	    unsigned char rbszs;	/* rbsz status:  0 = none */
762	    unsigned char sbszs;	/* sbsz status:  0 = none */
763	    int kai;			/* TCP keep-alive interval */
764	    int ltm;			/* TCP linger time */
765	    unsigned int opt;		/* socket options */
766	    unsigned int pqlen;		/* partial connection queue length */
767	    unsigned int qlen;		/* connection queue length */
768	    unsigned int qlim;		/* connection queue limit */
769	    unsigned long rbsz;		/* receive buffer size */
770	    unsigned long sbsz;		/* send buffer size */
771# endif	/* defined(HASSOOPT) */
772
773# if	defined(HASSOSTATE)
774	    unsigned int ss;		/* socket state */
775#  if	defined(HASSBSTATE)
776	    unsigned int sbs_rcv;	/* receive socket buffer state */
777	    unsigned int sbs_snd;	/* send socket buffer state */
778#  endif	/* defined(HASSBSTATE) */
779# endif	/* defined(HASSOSTATE) */
780
781# if	defined(HASTCPOPT)
782	    unsigned int topt;		/* TCP options */
783	    unsigned char msss;		/* mss status: 0 = none */
784	    unsigned long mss;		/* TCP maximum segment size */
785# endif	/* defined(HASTCPOPT) */
786
787# if	defined(HASTCPTPIQ)
788	    unsigned long rq;		/* receive queue length */
789	    unsigned long sq;		/* send queue length */
790	    unsigned char rqs;		/* rq status: 0 = none */
791	    unsigned char sqs;		/* sq status: 0 = none */
792# endif	/* defined(HASTCPTPIQ) */
793
794# if	defined(HASTCPTPIW)
795	    unsigned char rws;		/* rw status: 0 = none */
796	    unsigned char wws;		/* ww status: 0 = none */
797	    unsigned long rw;		/* read window size */
798	    unsigned long ww;		/* write window size */
799# endif	/* defined(HASTCPTPIW) */
800
801	} lts;
802	char *nm;
803	char *nma;			/* NAME column addition */
804
805# if	defined(HASNCACHE) && HASNCACHE<2
806	KA_T na;			/* file structure's node address */
807# endif	/* defined(HASNCACHE) && HASNCACHE<2 */
808
809# if	defined(HASNCACHE) && defined(HASNCVPID)
810	unsigned long id;		/* capability ID */
811# endif	/* defined(HASNCACHE) && defined(HASNCVPID) */
812
813# if	defined(HASLFILEADD)
814	HASLFILEADD
815# endif	/* defined(HASLFILEADD) */
816
817# if	defined(HASFSTRUCT)
818	KA_T fsa;			/* file structure address */
819	long fct;			/* file structure's f_count */
820	long ffg;			/* file structure's f_flag */
821	long pof;			/* process open-file flags */
822	KA_T fna;			/* file structure node address */
823# endif	/* defined(HASFSTRUCT) */
824
825	struct lfile *next;
826};
827extern struct lfile *Lf, *Plf;
828
829
830struct lproc {
831	char *cmd;			/* command name */
832
833# if	defined(HASSELINUX)
834	char *cntx;			/* security context */
835# endif	/* defined(HASSELINUX) */
836
837	short sf;			/* select flags -- SEL* symbols */
838	short pss;			/* state: 0 = not selected
839				 	 *	  1 = wholly selected
840				 	 *	  2 = partially selected */
841	int pid;			/* process ID */
842
843# if	defined(HASTASKS)
844	int tid;			/* task ID */
845# endif	/* HASTASKS */
846
847	int pgid;			/* process group ID */
848	int ppid;			/* parent process ID */
849	uid_t uid;			/* user ID */
850
851# if	defined(HASZONES)
852	char *zn;			/* zone name */
853# endif	/* defined(HASZONES) */
854
855	struct lfile *file;		/* open files of process */
856};
857extern struct lproc *Lp, *Lproc;
858
859extern char *Memory;
860extern int MntSup;
861extern char *MntSupP;
862
863# if	defined(HASPROCFS)
864extern struct mounts *Mtprocfs;
865# endif
866
867extern int Mxpgid;
868extern int Mxpid;
869extern int Mxuid;
870extern gid_t Mygid;
871extern int Mypid;
872extern uid_t Myuid;
873extern char *Namech;
874extern size_t Namechl;
875extern int Ndev;
876
877# if	defined(HASNLIST)
878#  if	!defined(NLIST_TYPE)
879#define	NLIST_TYPE	nlist
880#  endif	/* !defined(NLIST_TYPE) */
881extern struct NLIST_TYPE *Nl;
882extern int Nll;
883# endif	/* defined(HASNLIST) */
884extern long Nlink;
885extern int Nlproc;
886extern char *Nmlst;
887extern int Npgid;
888extern int Npgidi;
889extern int Npgidx;
890extern int Npid;
891extern int Npidi;
892extern int Npidx;
893extern int Npuns;
894extern int Ntype;
895extern int Nuid;
896extern int Nuidexcl;
897extern int Nuidincl;
898
899struct nwad {
900	char *arg;			/* argument */
901	char *proto;			/* protocol */
902	int af;				/* address family -- e.g.,
903					 * AF_INET, AF_INET6 */
904	unsigned char a[MAX_AF_ADDR];	/* address */
905	int sport;			/* starting port */
906	int eport;			/* ending port */
907	int f;				/* find state */
908	struct nwad *next;		/* forward link */
909};
910extern struct nwad *Nwad;
911
912extern int OffDecDig;
913extern char *Pn;
914
915# if	defined(HASFSTRUCT)
916extern struct pff_tab Pff_tab[];	/* file flags table */
917extern struct pff_tab Pof_tab[];	/* process open file flags table */
918# endif	/* defined(HASFSTRUCT) */
919
920# if	defined(HASPROCFS)
921struct procfsid {
922	pid_t pid;			/* search PID */
923	char *nm;			/* search name */
924	unsigned char f;		/* match found if == 1 */
925
926#  if	defined(HASPINODEN)
927	INODETYPE inode;		/* search inode number */
928#  endif	/* defined(HASPINODEN) */
929
930	struct procfsid *next;		/* forward link */
931};
932
933extern int Procfind;
934extern struct procfsid *Procfsid;
935extern int Procsrch;
936# endif	/* defined(HASPROCFS) */
937
938extern int PrPass;
939extern int RptTm;
940extern struct l_dev **Sdev;
941extern int Selall;
942extern int Selflags;
943extern int Setgid;
944extern int Selinet;
945extern int Setuidroot;
946extern struct sfile *Sfile;
947extern struct int_lst *Spgid;
948extern struct int_lst *Spid;
949extern struct seluid *Suid;
950extern char *SzOffFmt_0t;
951extern char *SzOffFmt_d;
952extern char *SzOffFmt_dv;
953extern char *SzOffFmt_x;
954extern int TaskPrtFl;
955extern int TcpStAlloc;
956extern unsigned char *TcpStI;
957extern int TcpStIn;
958extern int TcpStOff;
959extern unsigned char *TcpStX;
960extern int TcpStXn;
961extern int TcpNstates;
962extern char **TcpSt;
963extern char Terminator;
964extern int TmLimit;
965extern int UdpStAlloc;
966extern unsigned char *UdpStI;
967extern int UdpStIn;
968extern int UdpStOff;
969extern unsigned char *UdpStX;
970extern int UdpStXn;
971extern int UdpNstates;
972extern char **UdpSt;
973
974# if	defined(HASZONES)
975typedef struct znhash {
976	char *zn;			/* zone name */
977	int f;				/* "find" flag (used only in ZoneArg) */
978	struct znhash *next;		/* next zone hash entry */
979} znhash_t;
980extern znhash_t **ZoneArg;
981# endif	/* defined(HASZONES) */
982
983#include "proto.h"
984#include "dproto.h"
985
986#endif	/* LSOF_H */
987