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