/* * machine.h - FreeBSD definitions 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: machine.h,v 1.38 2010/07/29 16:04:28 abe Exp $ */ #if !defined(LSOF_MACHINE_H) #define LSOF_MACHINE_H 1 #include # if defined(HAS_CONF_MINOR) #undef minor # endif /* defined(HAS_CONF_MINOR) */ #if defined(HASCPUMASK_T) /* * In FreeBSD >= 5.2 when the cpumask_t typedef is present, it may be defined * in only if _KERNEL is predefined. However, predefining * _KERNEL before #include'ing causes redefinition errors for * boolean_t and vm_page_t when is #include'd with _KERNEL * predefined. Since lsof must have _KERNEL predefined when is * #include'd, the expedient choice is made to duplicate the cpumask_t typedef * here. * * Note: the Configure script defines HASCPUMASK_T if and * both have cpumask_t references and if the reference in * is valid only when _KERNEL is defined. */ typedef __cpumask_t cpumask_t; #endif /* defined(HASCPUMASK_T) */ #include /* * 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 option. */ /* #define HASAOPT 1 */ /* * HASBLKDEV is defined for those dialects that want block device information * recorded in BDevtp[]. */ # if FREEBSDV<4000 #define HASBLKDEV 1 # endif /* FREEBSDV<4000 */ /* * 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. */ #define HASINODE 1 /* * 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. */ /* #define HASLFILEADD int ... */ /* #define CLRLFILEADD(lf) (lf)->... = (type)NULL; */ /* #define SETLFILEADD Lf->... */ /* * 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(). */ #define HASNCACHE 1 /* #define NCACHELDPFX ??? */ /* #define NCACHELDSFX ??? */ /* * 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 FREEBSDV>=2020 #define HASPIPEFN process_pipe # endif /* FREEBSDV>=2020 */ /* * 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. */ # if FREEBSDV>=2000 #define HASPPID 1 # endif /* FREEBSDV>=2000 */ /* * 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. */ /* #define HASPRIVNMCACHE */ /* * 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. For FreeBSD 2.0 and * above the Configure script defines HASPROCFS when it can find * /usr/src/sys/miscfs/procfs/procfs.h; below 2.0, Configure always defines * HASPROCFS. * * 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 */ # if FREEBSDV>=2000 #define HASPINODEN 1 # endif /* FREEBSDV>=2000 */ /* * 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 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 FREEBSDV>=5200 #define HASWIDECHAR 1 # endif /* FREEBSDV>=5020 */ /* #define WIDECHARINCL */ /* * 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 */ /* * HASTCPUDPSTATE is defined for dialects that have TCP and UDP state * support -- i.e., for the "-stcp|udp:state" option and its associated * speed improvements. */ #define HASTCPUDPSTATE 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. */ #define INODETYPE unsigned long long /* inode number internal storage type */ #define INODEPSPEC "ll" /* INODETYPE printf specification * modifier */ /* * 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_ is defined for dialects that use the * 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 */ # if FREEBSDV<2010 #define USE_LIB_RNAM 1 /* rnam.c */ # else /* FREEBSDV>=2010 */ #define USE_LIB_RNMH 1 /* rnmh.c */ # endif /* FREEBSDV<2010 */ /* #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) */