blob: d8f4a4637e8e42c34573b9e9cbe9a1b6dfa91274 [file] [log] [blame]
/*
* machine.h - AIX 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.43 2010/07/29 16:02:44 abe Exp $
*/
#if !defined(LSOF_MACHINE_H)
#define LSOF_MACHINE_H 1
# if AIXV<=3250
/*
* The AIX 3.2.5 and below <netdb.h> requires that _SUN be defined to
* be able to get the rpcent structure definition.
*/
#define _SUN
#include <netdb.h>
#undef _SUN
# endif /* AIXV<=3250 */
# if AIXV>=4200
/*
* AIX 4.2 requires that <sys/mstsave.h> be #include'd early. It needs
* <sys/types.h> and _KERNEL.
*
* AIX 4.3 requires that _KERNEL be defined before the #include of
* <sys/types.h>
*
* For gcc's sake, some redefinitions after including <sys/types.h> insure
* the off64_t and offset_t types are aligned on an 8 byte boundary.
*/
# if AIXV>=4300
#define _KERNEL 1
# endif /* AIXV>=4300 */
#include <sys/types.h>
# if AIXA>0
#include <sys/resource.h>
# endif /* AIXA>0 */
# if defined(__GNUC__)
typedef long long aligned_off64_t __attribute__ ((aligned (8)));
typedef long long aligned_offset_t __attribute__ ((aligned (8)));
#define off64_t aligned_off64_t
#define offset_t aligned_offset_t
# endif /* defined(__GNUC__) */
# if AIXV<4300
#define _KERNEL 1
# endif /* AIXV<4300 */
#include <sys/mstsave.h>
#undef _KERNEL
# endif /* AIXV>=4200 */
/*
* 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().
*/
# if AIXV>=4200
#define CAN_USE_CLNT_CREATE 1
# endif /* AIXV>=4200 */
/*
* 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.
*/
# if AIXV>=3200
#define HASFIFONODE 1
# endif /* AIXV>=3200 */
/*
* 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. (AIX lsof doesn't use nlist, it uses knlist.)
*/
/* #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.
*/
/* #define HASPIPEFN process_pipe? */
/*
* 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.
*/
# if AIXV>=4140
#define HASPRIVFILETYPE process_shmt
#define PRIVFILETYPE 15
# endif /* AIXV>=4140 */
/*
* 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 <function name> */
/*
* 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 AIXA<1
/* #define HASPROCFS "proc?" */
/* #define HASFSTYPE 1 */
/* #define HASPINODEN 1 */
# else /* AIXA>=1 */
#define HASPROCFS "proc"
#define HASFSTYPE 2
#define HASPINODEN 1
# endif /* AIXA<1 */
/*
* HASRNODE is defined for those dialects that have rnodes.
*
* Note: while AIX has rnodes, they are processed privately, so this
* definition should be disabled.
*/
/* #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 AIXV>=4320
#define HASWIDECHAR 1
# endif /* AIXV>=4320 */
/* #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 */
/*
* 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.
*/
#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.
*
* AIX uses the X option to disable the use of the readx() kernel function
* on request.
*
* If you want to disable the use of readx() permanently, leave HASXOPT
* undefined and set HASXOPT_VALUE to 0. To enable readx() permanently,
* leave HASXOPT undefined and set HASXOPT_VALUE to 1.
*
* Define HASXOPT_ROOT if you want to restrict the use of the X option to
* processes whose real UID is root.
*/
#define HASXOPT "use readx() *RISKY*"
/* #define HASXOPT_ROOT 1 */
#define HASXOPT_VALUE 0
/*
* 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 AIXV>=4200
#define INODETYPE unsigned long long
/* inode number internal storage type */
#define INODEPSPEC "ll" /* INODETYPE printf specification
* modifier */
# endif /* AIXV>=4200 */
/*
* UID_ARG defines the size of a User ID number when it is passed
* as a function argument.
*/
#define UID_ARG uid_t
/*
* 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 */
/* #define USE_LIB_RNCH 1 rnch.c */
/* #define USE_LIB_RNMH 1 rnmh.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) bzero(a, l)
#endif /* !defined(LSOF_MACHINE_H) */