| /* |
| * machine.h - Darwin definitions for /dev/kmem-based 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: machine.h,v 1.16 2010/07/29 16:03:04 abe Exp $ |
| */ |
| |
| |
| #if !defined(LSOF_MACHINE_H) |
| #define LSOF_MACHINE_H 1 |
| |
| |
| #include <sys/types.h> |
| #include <sys/param.h> |
| |
| # if DARWINV>=800 |
| #include "/usr/include/string.h" |
| # endif /* DARWINV>=800 */ |
| |
| |
| /* |
| * CAN_USE_CLNT_CREATE is defined for those dialects where RPC clnt_create() |
| * can be used to obtain a CLIENT handle in lieu of clnttcp_create(). |
| */ |
| |
| #define CAN_USE_CLNT_CREATE 1 |
| |
| |
| /* |
| * DEVDEV_PATH defines the path to the directory that contains device |
| * nodes. |
| */ |
| |
| #define DEVDEV_PATH "/dev" |
| |
| |
| /* |
| * GET_MAX_FD is defined for those dialects that provide a function other than |
| * getdtablesize() to obtain the maximum file descriptor number plus one. |
| */ |
| |
| /* #define GET_MAX_FD ? */ |
| |
| |
| /* |
| * HASAOPT is defined for those dialects that have AFS support; it specifies |
| * that the default path to an alternate AFS kernel name list file may be |
| * supplied with the -A <path> option. |
| */ |
| |
| /* #define HASAOPT 1 */ |
| |
| |
| /* |
| * HASBLKDEV is defined for those dialects that want block device information |
| * recorded in BDevtp[]. |
| */ |
| |
| #define HASBLKDEV 1 |
| |
| |
| /* |
| * HASDCACHE is defined for those dialects that support a device cache |
| * file. |
| * |
| * HASENVDC defined the name of an environment variable that contains the |
| * device cache file path. The HASENVDC environment variable is ignored when |
| * the lsof process is setuid(root) or its real UID is 0. |
| * |
| * HASPERSDC defines the format for the last component of a personal device |
| * cache file path. The first will be the home directory of the real UID that |
| * executes lsof. |
| * |
| * HASPERSDCPATH defines the environment variable whose value is the middle |
| * component of the personal device cache file path. The middle component |
| * follows the home directory and precedes the results of applying HASPERSDC. |
| * The HASPERSDCPATH environment variable is ignored when the lsof process is |
| * setuid(root) or its real UID is 0. |
| * |
| * HASSYSDC defines a public device cache file path. When it's defined, it's |
| * used as the path from which to read the device cache. |
| * |
| * Consult the 00DCACHE and 00FAQ files of the lsof distribution for more |
| * information on device cache file path construction. |
| */ |
| |
| /* #define HASDCACHE 1 */ |
| /* #define HASENVDC "LSOFDEVCACHE" */ |
| /* #define HASPERSDC "%h/%p.lsof_%L" */ |
| /* #define HASPERSDCPATH "LSOFPERSDCPATH" */ |
| /* #define HASSYSDC "/your/choice/of/path" */ |
| |
| |
| /* |
| * HASCDRNODE is defined for those dialects that have CD-ROM nodes. |
| */ |
| |
| /* #define HASCDRNODE 1 */ |
| |
| |
| /* |
| * HASFIFONODE is defined for those dialects that have FIFO nodes. |
| */ |
| |
| /* #define HASFIFONODE 1 */ |
| |
| |
| /* |
| * HASFSINO is defined for those dialects that have the file system |
| * inode element, fs_ino, in the lfile structure definition in lsof.h. |
| */ |
| |
| /* #define HASFSINO 1 */ |
| |
| |
| /* |
| * HASFSTRUCT is defined if the dialect has a file structure. |
| * |
| * FSV_DEFAULT defines the default set of file structure values to list. |
| * It defaults to zero (0), but may be made up of a combination of the |
| * FSV_* symbols from lsof.h. |
| * |
| * HASNOFSADDR -- has no file structure address |
| * HASNOFSFLAGS -- has no file structure flags |
| * HASNOFSCOUNT -- has no file structure count |
| * HASNOFSNADDR -- has no file structure node address |
| */ |
| |
| #define HASFSTRUCT 1 |
| /* #define FSV_DEFAULT FSV_? | FSV_? | FSV_? */ |
| /* #define HASNOFSADDR 1 has no file structure address */ |
| /* #define HASNOFSFLAGS 1 has no file structure flags */ |
| /* #define HASNOFSCOUNT 1 has no file structure count */ |
| /* #define HASNOFSNADDR 1 has no file structure node address */ |
| |
| |
| /* |
| * HASGNODE is defined for those dialects that have gnodes. |
| */ |
| |
| /* #define HASGNODE 1 */ |
| |
| |
| /* |
| * HASHSNODE is defined for those dialects that have High Sierra nodes. |
| */ |
| |
| /* #define HASHSNODE 1 */ |
| |
| |
| /* |
| * HASINODE is defined for those dialects that have inodes and wish to |
| * use readinode() from node.c. |
| */ |
| |
| # if DARWINV<800 |
| #define HASINODE 1 |
| # endif /* DARWINV<800 */ |
| |
| |
| /* |
| * HASINTSIGNAL is defined for those dialects whose signal function returns |
| * an int. |
| */ |
| |
| /* #define HASINTSIGNAL 1 */ |
| |
| |
| /* |
| * HASKERNIDCK is defined for those dialects that support the comparison of |
| * the build to running kernel identity. |
| */ |
| |
| #define HASKERNIDCK 1 |
| |
| |
| /* |
| * HASKOPT is defined for those dialects that support the -k option of |
| * reading the kernel's name list from an optional file. |
| */ |
| |
| #define HASKOPT 1 |
| |
| |
| /* |
| * HASLFILEADD is defined for those dialects that need additional elements |
| * in struct lfile. The HASLFILEADD definition is a macro that defines |
| * them. If any of the additional elements need to be preset in the |
| * alloc_lfile() function of proc.c, the SETLFILEADD macro may be defined |
| * to do that. |
| * |
| * If any additional elements need to be cleared in alloc_lfile() or in the |
| * free_proc() function of proc.c, the CLRLFILEADD macro may be defined to |
| * do that. Note that CLRLFILEADD takes one argument, the pointer to the |
| * lfile struct. The CLRLFILEADD macro is expected to expand to statements |
| * that are complete -- i.e., have terminating semi-colons -- so the macro is |
| * called without a terminating semicolon by proc.c. |
| * |
| * The HASXOPT definition may be used to select the conditions under which |
| * private lfile elements are used. |
| */ |
| |
| # if DARWINV>=800 |
| #define HASLFILEADD char *V_path; |
| #define CLRLFILEADD(lf) if (lf->V_path) { \ |
| (void) free((FREE_P *)lf->V_path); \ |
| lf->V_path = (char *)NULL; \ |
| } |
| #define SETLFILEADD Lf->V_path = (char *)NULL; |
| # endif /* DARWINV>=800 */ |
| |
| |
| /* |
| * HASMNTSTAT indicates the dialect supports the mount stat(2) result option |
| * in its l_vfs and mounts structures. |
| */ |
| |
| /* #define HASMNTSTAT 1 */ |
| |
| |
| /* |
| * HASMNTSUP is defined for those dialects that support the mount supplement |
| * option. |
| */ |
| |
| /* #define HASMNTSUP 1 */ |
| |
| |
| /* |
| * HASMOPT is defined for those dialects that support the reading of |
| * kernel memory from an alternate file. |
| */ |
| |
| #define HASMOPT 1 |
| |
| |
| /* |
| * HASNCACHE is defined for those dialects that have a kernel name cache |
| * that lsof can search. A value of 1 directs printname() to prefix the |
| * cache value with the file system directory name; 2, avoid the prefix. |
| * |
| * NCACHELDPFX is a set of C commands to execute before calling ncache_load(). |
| * |
| * NCACHELDSFX is a set of C commands to execute after calling ncache_load(). |
| */ |
| |
| # if DARWINV<800 |
| #define HASNCACHE 1 |
| /* #define NCACHELDPFX ??? */ |
| /* #define NCACHELDSFX ??? */ |
| # else /* DARWINV>=800 */ |
| /* #define HASNCACHE 1 */ |
| /* #define NCACHELDPFX ??? */ |
| /* #define NCACHELDSFX ??? */ |
| # endif /* DARWINV<800 */ |
| |
| |
| /* |
| * HASNLIST is defined for those dialects that use nlist() to acccess |
| * kernel symbols. |
| */ |
| |
| #define HASNLIST 1 |
| |
| |
| /* |
| * HASPIPEFN is defined for those dialects that have a special function to |
| * process DTYPE_PIPE file structure entries. Its value is the name of the |
| * function. |
| * |
| * NOTE: don't forget to define a prototype for this function in dproto.h. |
| */ |
| |
| # if DARWINV<800 |
| /* #define HASPIPEFN process_pipe? */ |
| # else /* DARWINV>=800 */ |
| #define HASPIPEFN process_pipe |
| # endif /* DARWINV<800 */ |
| |
| |
| /* |
| * HASPIPENODE is defined for those dialects that have pipe nodes. |
| */ |
| |
| /* #define HASPIPENODE 1 */ |
| |
| |
| /* |
| * HASPMAPENABLED is defined when the reporting of portmapper registration |
| * info is enabled by default. |
| */ |
| |
| /* #define HASPMAPENABLED 1 */ |
| |
| |
| /* |
| * HASPPID is defined for those dialects that support identification of |
| * the parent process IDentifier (PPID) of a process. |
| */ |
| #define HASPPID 1 |
| |
| |
| /* |
| * HASPRINTDEV, HASPRINTINO, HASPRINTNM, HASPRINTOFF, and HASPRINTSZ |
| * define private dialect-specific functions for printing DEVice numbers, |
| * INOde numbers, NaMes, file OFFsets, and file SiZes. The functions are |
| * called from print_file(). |
| */ |
| |
| /* #define HASPRINTDEV print_dev? */ |
| /* #define HASPRINTINO print_ino? */ |
| /* #define HASPRINTNM print_nm? */ |
| /* #define HASPRINTOFF print_off? */ |
| /* #define HASPRINTSZ print_sz? */ |
| |
| |
| /* |
| * HASPRIVFILETYPE and PRIVFILETYPE are defined for dialects that have a |
| * file structure type that isn't defined by a DTYPE_* symbol. They are |
| * used in lib/prfp.c to select the type's processing. |
| * |
| * PRIVFILETYPE is the definition of the f_type value in the file struct. |
| * |
| * HASPRIVFILETYPE is the name of the processing function. |
| */ |
| |
| /* #define HASPRIVFILETYPE process_shmf? */ |
| /* #define PRIVFILETYPE ?? */ |
| |
| |
| /* |
| * HASPRIVNMCACHE is defined for dialects that have a private method for |
| * printing cached NAME column values for some files. HASPRIVNAMECACHE |
| * is defined to be the name of the function. |
| * |
| * The function takes one argument, a struct lfile pointer to the file, and |
| * returns non-zero if it prints a name to stdout. |
| */ |
| |
| # if DARWINV<800 |
| /* #define HASPRIVNMCACHE <function name> */ |
| # else /* DARWINV>=800 */ |
| #define HASPRIVNMCACHE print_v_path |
| # endif /* DARWINV<800 */ |
| |
| |
| /* |
| * HASPRIVPRIPP is defined for dialects that have a private function for |
| * printing IP protocol names. When HASPRIVPRIPP isn't defined, the |
| * IP protocol name printing function defaults to printiprto(). |
| */ |
| |
| /* #define HASPRIVPRIPP 1 */ |
| |
| |
| /* |
| * HASPROCFS is defined for those dialects that have a proc file system -- |
| * usually /proc and usually in SYSV4 derivatives. |
| * |
| * HASFSTYPE is defined as 1 for those systems that have a file system type |
| * string, st_fstype, in the stat() buffer; 2, for those systems that have a |
| * file system type integer in the stat() buffer, named MOUNTS_STAT_FSTYPE; |
| * 0, for systems whose stat(2) structure has no file system type member. The |
| * additional symbols MOUNTS_FSTYPE, RMNT_FSTYPE, and RMNT_STAT_FSTYPE may be |
| * defined in dlsof.h to direct how the readmnt() function in lib/rmnt.c |
| * preserves these stat(2) and getmntent(3) buffer values in the local mounts |
| * structure. |
| * |
| * The defined value is the string that names the file system type. |
| * |
| * The HASPROCFS definition usually must be accompanied by the HASFSTYPE |
| * definition and the providing of an fstype element in the local mounts |
| * structure (defined in dlsof.h). |
| * |
| * The HASPROCFS definition may be accompanied by the HASPINODEN definition. |
| * HASPINODEN specifies that searching for files in HASPROCFS is to be done |
| * by inode number. |
| */ |
| |
| # if defined(HASPROCFS) |
| #undef HASPROCFS |
| #define HASPROCFS "proc" |
| # endif /* defined(HASPROCFS) */ |
| |
| /* #define HASPROCFS "proc?" */ |
| /* #define HASFSTYPE 1 */ |
| |
| #define HASPINODEN 1 |
| |
| |
| /* |
| * HASRNODE is defined for those dialects that have rnodes. |
| */ |
| |
| /* #define HASRNODE 1 */ |
| |
| |
| /* |
| * Define HASSECURITY to restrict the listing of all open files to the |
| * root user. When HASSECURITY is defined, the non-root user may list |
| * only files whose processes have the same user ID as the real user ID |
| * (the one that its user logged on with) of the lsof process. |
| */ |
| |
| /* #define HASSECURITY 1 */ |
| |
| |
| /* |
| * If HASSECURITY is defined, define HASNOSOCKSECURITY to allow users |
| * restricted by HASSECURITY to list any open socket files, provide their |
| * listing is selected by the "-i" option. |
| */ |
| |
| /* #define HASNOSOCKSECURITY 1 */ |
| |
| |
| /* |
| * HASSETLOCALE is defined for those dialects that have <locale.h> and |
| * setlocale(). |
| * |
| * If the dialect also has wide character support for language locales, |
| * HASWIDECHAR activates lsof's wide character support and WIDECHARINCL |
| * defines the header file (if any) that must be #include'd to use the |
| * mblen() and mbtowc() functions. |
| */ |
| |
| #define HASSETLOCALE 1 |
| |
| # if DARWINV>=700 |
| #define HASWIDECHAR 1 |
| # endif /* DARWINV>=700 */ |
| |
| /* #define WIDECHARINCL <wchar.h> */ |
| |
| |
| /* |
| * HASSNODE is defined for those dialects that have snodes. |
| */ |
| |
| /* #define HASSNODE 1 */ |
| |
| |
| /* |
| * HASTASKS is defined for those dialects that have task reporting support. |
| */ |
| |
| /* #define HASTASKS 1 */ |
| |
| |
| /* |
| * HASSOOPT, HASSOSTATE and HASTCPOPT define the availability of information |
| * on socket options (SO_* symbols), socket states (SS_* symbols) and TCP |
| * options. |
| */ |
| |
| #define HASSOOPT 1 /* has socket option information */ |
| #define HASSOSTATE 1 /* has socket state information */ |
| #define HASTCPOPT 1 /* has TCP options or flags */ |
| |
| |
| /* |
| * Define HASSPECDEVD to be the name of a function that handles the results |
| * of a successful stat(2) of a file name argument. |
| * |
| * For example, HASSPECDEVD() for Darwin makes sure that st_dev is set to |
| * what stat("/dev") returns -- i.e., what's in DevDev. |
| * |
| * The function takes two arguments: |
| * |
| * 1: pointer to the full path name of file |
| * 2: pointer to the stat(2) result |
| * |
| * The function returns void. |
| */ |
| |
| #define HASSPECDEVD process_dev_stat |
| |
| |
| /* |
| * HASSTREAMS is defined for those dialects that support streams. |
| */ |
| |
| /* #define HASSTREAMS 1 */ |
| |
| |
| /* |
| * HASTCPTPIQ is defined for dialects where it is possible to report the |
| * TCP/TPI Recv-Q and Send-Q values produced by netstat. |
| */ |
| |
| #define HASTCPTPIQ 1 |
| |
| |
| /* |
| * HASTCPTPIW is defined for dialects where it is possible to report the |
| * TCP/TPI send and receive window sizes produced by netstat. |
| */ |
| |
| /* #define HASTCPTPIW 1 */ |
| |
| |
| /* |
| * HASTMPNODE is defined for those dialects that have tmpnodes. |
| */ |
| |
| /* #define HASTMPNODE 1 */ |
| |
| |
| /* |
| * HASVNODE is defined for those dialects that use the Sun virtual file system |
| * node, the vnode. BSD derivatives usually do; System V derivatives prior |
| * to R4 usually don't. |
| * doesn't. |
| */ |
| |
| #define HASVNODE 1 |
| |
| |
| /* |
| * HASXOPT is defined for those dialects that have an X option. It |
| * defines the text for the usage display. HASXOPT_VALUE defines the |
| * option's default binary value -- 0 or 1. |
| */ |
| |
| /* #define HASXOPT "help text for X option" */ |
| /* #define HASXOPT_VALUE 1 */ |
| |
| |
| /* |
| * INODETYPE and INODEPSPEC define the internal node number type and its |
| * printf specification modifier. These need not be defined and lsof.h |
| * can be allowed to define defaults. |
| * |
| * These are defined here, because they must be used in dlsof.h. |
| */ |
| |
| # if DARWINV>=800 |
| #define INODETYPE unsigned long long |
| /* inode number internal storage type */ |
| #define INODEPSPEC "ll" /* INODETYPE printf specification |
| * modifier */ |
| # endif /* DARWINV>=800 */ |
| |
| |
| /* |
| * UID_ARG defines the size of a User ID number when it is passed |
| * as a function argument. |
| */ |
| |
| #define UID_ARG int |
| |
| |
| /* |
| * Each USE_LIB_<function_name> is defined for dialects that use the |
| * <function_name> in the lsof library. |
| * |
| * Note: other definitions and operations may be required to condition the |
| * library function source code. They may be found in the dialect dlsof.h |
| * header files. |
| */ |
| |
| #define USE_LIB_CKKV 1 /* ckkv.c */ |
| /* #define USE_LIB_COMPLETEVFS 1 cvfs.c */ |
| #define USE_LIB_FIND_CH_INO 1 /* fino.c */ |
| #define USE_LIB_IS_FILE_NAMED 1 /* isfn.c */ |
| #define USE_LIB_LKUPDEV 1 /* lkud.c */ |
| #define USE_LIB_PRINTDEVNAME 1 /* pdvn.c */ |
| /* #define USE_LIB_PROCESS_FILE 1 prfp.c */ |
| #define USE_LIB_PRINT_TCPTPI 1 /* ptti.c */ |
| /* #define USE_LIB_READDEV 1 rdev.c */ |
| /* #define USE_LIB_READMNT 1 rmnt.c */ |
| /* #define USE_LIB_REGEX 1 regex.c */ |
| /* #define USE_LIB_RNAM 1 rnam.c */ |
| |
| #if DARWINV<800 |
| #define USE_LIB_RNMH 1 /* rnmh.c */ |
| #else /* DARWINV>800 */ |
| /* #define USE_LIB_RNMH 1 rnmh.c */ |
| #endif /* DARWINV<800 */ |
| |
| /* #define USE_LIB_RNCH 1 rnch.c */ |
| /* #define USE_LIB_SNPF 1 snpf.c */ |
| #define snpf snprintf /* use the system's snprintf() */ |
| |
| |
| /* |
| * WARNDEVACCESS is defined for those dialects that should issue a warning |
| * when lsof can't access /dev (or /device) or one of its sub-directories. |
| * The warning can be inhibited by the lsof caller with the -w option. |
| */ |
| |
| #define WARNDEVACCESS 1 |
| |
| |
| /* |
| * WARNINGSTATE is defined for those dialects that want to suppress all lsof |
| * warning messages. |
| */ |
| |
| /* #define WARNINGSTATE 1 warnings are enabled by default */ |
| |
| |
| /* |
| * WILLDROPGID is defined for those dialects whose lsof executable runs |
| * setgid(not_real_GID) and whose setgid power can be relinquished after |
| * the dialect's initialize() function has been executed. |
| */ |
| |
| #define WILLDROPGID 1 |
| |
| |
| /* |
| * zeromem is a macro that uses bzero or memset. |
| */ |
| |
| #define zeromem(a, l) memset(a, 0, l) |
| |
| #endif /* !defined(LSOF_MACHINE_H) */ |