2
* machine.h - Darwin definitions for /dev/kmem-based lsof
7
* Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
8
* 47907. All rights reserved.
10
* Written by Victor A. Abell
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.
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:
19
* 1. Neither the authors nor Purdue University are responsible for any
20
* consequences of the use of this software.
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.
26
* 3. Altered versions must be plainly marked as such, and must not be
27
* misrepresented as being the original software.
29
* 4. This notice may not be removed or altered.
34
* $Id: machine.h,v 1.15 2006/03/27 23:24:50 abe Exp $
38
#if !defined(LSOF_MACHINE_H)
39
#define LSOF_MACHINE_H 1
42
#include <sys/types.h>
43
#include <sys/param.h>
46
#include "/usr/include/string.h"
47
# endif /* DARWINV>=800 */
51
* CAN_USE_CLNT_CREATE is defined for those dialects where RPC clnt_create()
52
* can be used to obtain a CLIENT handle in lieu of clnttcp_create().
55
#define CAN_USE_CLNT_CREATE 1
59
* DEVDEV_PATH defines the path to the directory that contains device
63
#define DEVDEV_PATH "/dev"
67
* GET_MAX_FD is defined for those dialects that provide a function other than
68
* getdtablesize() to obtain the maximum file descriptor number plus one.
71
/* #define GET_MAX_FD ? */
75
* HASAOPT is defined for those dialects that have AFS support; it specifies
76
* that the default path to an alternate AFS kernel name list file may be
77
* supplied with the -A <path> option.
80
/* #define HASAOPT 1 */
84
* HASBLKDEV is defined for those dialects that want block device information
85
* recorded in BDevtp[].
92
* HASDCACHE is defined for those dialects that support a device cache
95
* HASENVDC defined the name of an environment variable that contains the
96
* device cache file path. The HASENVDC environment variable is ignored when
97
* the lsof process is setuid(root) or its real UID is 0.
99
* HASPERSDC defines the format for the last component of a personal device
100
* cache file path. The first will be the home directory of the real UID that
103
* HASPERSDCPATH defines the environment variable whose value is the middle
104
* component of the personal device cache file path. The middle component
105
* follows the home directory and precedes the results of applying HASPERSDC.
106
* The HASPERSDCPATH environment variable is ignored when the lsof process is
107
* setuid(root) or its real UID is 0.
109
* HASSYSDC defines a public device cache file path. When it's defined, it's
110
* used as the path from which to read the device cache.
112
* Consult the 00DCACHE and 00FAQ files of the lsof distribution for more
113
* information on device cache file path construction.
116
/* #define HASDCACHE 1 */
117
/* #define HASENVDC "LSOFDEVCACHE" */
118
/* #define HASPERSDC "%h/%p.lsof_%L" */
119
/* #define HASPERSDCPATH "LSOFPERSDCPATH" */
120
/* #define HASSYSDC "/your/choice/of/path" */
124
* HASCDRNODE is defined for those dialects that have CD-ROM nodes.
127
/* #define HASCDRNODE 1 */
131
* HASFIFONODE is defined for those dialects that have FIFO nodes.
134
/* #define HASFIFONODE 1 */
138
* HASFSINO is defined for those dialects that have the file system
139
* inode element, fs_ino, in the lfile structure definition in lsof.h.
142
/* #define HASFSINO 1 */
146
* HASFSTRUCT is defined if the dialect has a file structure.
148
* FSV_DEFAULT defines the default set of file structure values to list.
149
* It defaults to zero (0), but may be made up of a combination of the
150
* FSV_* symbols from lsof.h.
152
* HASNOFSADDR -- has no file structure address
153
* HASNOFSFLAGS -- has no file structure flags
154
* HASNOFSCOUNT -- has no file structure count
155
* HASNOFSNADDR -- has no file structure node address
159
/* #define FSV_DEFAULT FSV_? | FSV_? | FSV_? */
160
/* #define HASNOFSADDR 1 has no file structure address */
161
/* #define HASNOFSFLAGS 1 has no file structure flags */
162
/* #define HASNOFSCOUNT 1 has no file structure count */
163
/* #define HASNOFSNADDR 1 has no file structure node address */
167
* HASGNODE is defined for those dialects that have gnodes.
170
/* #define HASGNODE 1 */
174
* HASHSNODE is defined for those dialects that have High Sierra nodes.
177
/* #define HASHSNODE 1 */
181
* HASINODE is defined for those dialects that have inodes and wish to
182
* use readinode() from node.c.
187
# endif /* DARWINV<800 */
191
* HASINTSIGNAL is defined for those dialects whose signal function returns
195
/* #define HASINTSIGNAL 1 */
199
* HASKERNIDCK is defined for those dialects that support the comparison of
200
* the build to running kernel identity.
203
#define HASKERNIDCK 1
207
* HASKOPT is defined for those dialects that support the -k option of
208
* reading the kernel's name list from an optional file.
215
* HASLFILEADD is defined for those dialects that need additional elements
216
* in struct lfile. The HASLFILEADD definition is a macro that defines
217
* them. If any of the additional elements need to be preset in the
218
* alloc_lfile() function of proc.c, the SETLFILEADD macro may be defined
221
* If any additional elements need to be cleared in alloc_lfile() or in the
222
* free_proc() function of proc.c, the CLRLFILEADD macro may be defined to
223
* do that. Note that CLRLFILEADD takes one argument, the pointer to the
224
* lfile struct. The CLRLFILEADD macro is expected to expand to statements
225
* that are complete -- i.e., have terminating semi-colons -- so the macro is
226
* called without a terminating semicolon by proc.c.
228
* The HASXOPT definition may be used to select the conditions under which
229
* private lfile elements are used.
233
#define HASLFILEADD char *V_path;
234
#define CLRLFILEADD(lf) if (lf->V_path) { \
235
(void) free((FREE_P *)lf->V_path); \
236
lf->V_path = (char *)NULL; \
238
#define SETLFILEADD Lf->V_path = (char *)NULL;
239
# endif /* DARWINV>=800 */
243
* HASMNTSTAT indicates the dialect supports the mount stat(2) result option
244
* in its l_vfs and mounts structures.
247
/* #define HASMNTSTAT 1 */
251
* HASMNTSUP is defined for those dialects that support the mount supplement
255
/* #define HASMNTSUP 1 */
259
* HASMOPT is defined for those dialects that support the reading of
260
* kernel memory from an alternate file.
267
* HASNCACHE is defined for those dialects that have a kernel name cache
268
* that lsof can search. A value of 1 directs printname() to prefix the
269
* cache value with the file system directory name; 2, avoid the prefix.
271
* NCACHELDPFX is a set of C commands to execute before calling ncache_load().
273
* NCACHELDSFX is a set of C commands to execute after calling ncache_load().
278
/* #define NCACHELDPFX ??? */
279
/* #define NCACHELDSFX ??? */
280
# else /* DARWINV>=800 */
281
/* #define HASNCACHE 1 */
282
/* #define NCACHELDPFX ??? */
283
/* #define NCACHELDSFX ??? */
284
# endif /* DARWINV<800 */
288
* HASNLIST is defined for those dialects that use nlist() to acccess
296
* HASPIPEFN is defined for those dialects that have a special function to
297
* process DTYPE_PIPE file structure entries. Its value is the name of the
300
* NOTE: don't forget to define a prototype for this function in dproto.h.
304
/* #define HASPIPEFN process_pipe? */
305
# else /* DARWINV>=800 */
306
#define HASPIPEFN process_pipe
307
# endif /* DARWINV<800 */
311
* HASPIPENODE is defined for those dialects that have pipe nodes.
314
/* #define HASPIPENODE 1 */
318
* HASPMAPENABLED is defined when the reporting of portmapper registration
319
* info is enabled by default.
322
/* #define HASPMAPENABLED 1 */
326
* HASPPID is defined for those dialects that support identification of
327
* the parent process IDentifier (PPID) of a process.
333
* HASPRINTDEV, HASPRINTINO, HASPRINTNM, HASPRINTOFF, and HASPRINTSZ
334
* define private dialect-specific functions for printing DEVice numbers,
335
* INOde numbers, NaMes, file OFFsets, and file SiZes. The functions are
336
* called from print_file().
339
/* #define HASPRINTDEV print_dev? */
340
/* #define HASPRINTINO print_ino? */
341
/* #define HASPRINTNM print_nm? */
342
/* #define HASPRINTOFF print_off? */
343
/* #define HASPRINTSZ print_sz? */
347
* HASPRIVFILETYPE and PRIVFILETYPE are defined for dialects that have a
348
* file structure type that isn't defined by a DTYPE_* symbol. They are
349
* used in lib/prfp.c to select the type's processing.
351
* PRIVFILETYPE is the definition of the f_type value in the file struct.
353
* HASPRIVFILETYPE is the name of the processing function.
356
/* #define HASPRIVFILETYPE process_shmf? */
357
/* #define PRIVFILETYPE ?? */
361
* HASPRIVNMCACHE is defined for dialects that have a private method for
362
* printing cached NAME column values for some files. HASPRIVNAMECACHE
363
* is defined to be the name of the function.
365
* The function takes one argument, a struct lfile pointer to the file, and
366
* returns non-zero if it prints a name to stdout.
370
/* #define HASPRIVNMCACHE <function name> */
371
# else /* DARWINV>=800 */
372
#define HASPRIVNMCACHE print_v_path
373
# endif /* DARWINV<800 */
377
* HASPRIVPRIPP is defined for dialects that have a private function for
378
* printing IP protocol names. When HASPRIVPRIPP isn't defined, the
379
* IP protocol name printing function defaults to printiprto().
382
/* #define HASPRIVPRIPP 1 */
386
* HASPROCFS is defined for those dialects that have a proc file system --
387
* usually /proc and usually in SYSV4 derivatives.
389
* HASFSTYPE is defined as 1 for those systems that have a file system type
390
* string, st_fstype, in the stat() buffer; 2, for those systems that have a
391
* file system type integer in the stat() buffer, named MOUNTS_STAT_FSTYPE;
392
* 0, for systems whose stat(2) structure has no file system type member. The
393
* additional symbols MOUNTS_FSTYPE, RMNT_FSTYPE, and RMNT_STAT_FSTYPE may be
394
* defined in dlsof.h to direct how the readmnt() function in lib/rmnt.c
395
* preserves these stat(2) and getmntent(3) buffer values in the local mounts
398
* The defined value is the string that names the file system type.
400
* The HASPROCFS definition usually must be accompanied by the HASFSTYPE
401
* definition and the providing of an fstype element in the local mounts
402
* structure (defined in dlsof.h).
404
* The HASPROCFS definition may be accompanied by the HASPINODEN definition.
405
* HASPINODEN specifies that searching for files in HASPROCFS is to be done
409
# if defined(HASPROCFS)
411
#define HASPROCFS "proc"
412
# endif /* defined(HASPROCFS) */
414
/* #define HASPROCFS "proc?" */
415
/* #define HASFSTYPE 1 */
421
* HASRNODE is defined for those dialects that have rnodes.
424
/* #define HASRNODE 1 */
428
* Define HASSECURITY to restrict the listing of all open files to the
429
* root user. When HASSECURITY is defined, the non-root user may list
430
* only files whose processes have the same user ID as the real user ID
431
* (the one that its user logged on with) of the lsof process.
434
/* #define HASSECURITY 1 */
438
* If HASSECURITY is defined, define HASNOSOCKSECURITY to allow users
439
* restricted by HASSECURITY to list any open socket files, provide their
440
* listing is selected by the "-i" option.
443
/* #define HASNOSOCKSECURITY 1 */
447
* HASSETLOCALE is defined for those dialects that have <locale.h> and
450
* If the dialect also has wide character support for language locales,
451
* HASWIDECHAR activates lsof's wide character support and WIDECHARINCL
452
* defines the header file (if any) that must be #include'd to use the
453
* mblen() and mbtowc() functions.
456
#define HASSETLOCALE 1
459
#define HASWIDECHAR 1
460
# endif /* DARWINV>=700 */
462
/* #define WIDECHARINCL <wchar.h> */
466
* HASSNODE is defined for those dialects that have snodes.
469
/* #define HASSNODE 1 */
473
* HASSOOPT, HASSOSTATE and HASTCPOPT define the availability of information
474
* on socket options (SO_* symbols), socket states (SS_* symbols) and TCP
478
#define HASSOOPT 1 /* has socket option information */
479
#define HASSOSTATE 1 /* has socket state information */
480
#define HASTCPOPT 1 /* has TCP options or flags */
484
* Define HASSPECDEVD to be the name of a function that handles the results
485
* of a successful stat(2) of a file name argument.
487
* For example, HASSPECDEVD() for Darwin makes sure that st_dev is set to
488
* what stat("/dev") returns -- i.e., what's in DevDev.
490
* The function takes two arguments:
492
* 1: pointer to the full path name of file
493
* 2: pointer to the stat(2) result
495
* The function returns void.
498
#define HASSPECDEVD process_dev_stat
502
* HASSTREAMS is defined for those dialects that support streams.
505
/* #define HASSTREAMS 1 */
509
* HASTCPTPIQ is defined for dialects where it is possible to report the
510
* TCP/TPI Recv-Q and Send-Q values produced by netstat.
517
* HASTCPTPIW is defined for dialects where it is possible to report the
518
* TCP/TPI send and receive window sizes produced by netstat.
521
/* #define HASTCPTPIW 1 */
525
* HASTMPNODE is defined for those dialects that have tmpnodes.
528
/* #define HASTMPNODE 1 */
532
* HASVNODE is defined for those dialects that use the Sun virtual file system
533
* node, the vnode. BSD derivatives usually do; System V derivatives prior
534
* to R4 usually don't.
542
* HASXOPT is defined for those dialects that have an X option. It
543
* defines the text for the usage display. HASXOPT_VALUE defines the
544
* option's default binary value -- 0 or 1.
547
/* #define HASXOPT "help text for X option" */
548
/* #define HASXOPT_VALUE 1 */
552
* INODETYPE and INODEPSPEC define the internal node number type and its
553
* printf specification modifier. These need not be defined and lsof.h
554
* can be allowed to define defaults.
556
* These are defined here, because they must be used in dlsof.h.
560
#define INODETYPE unsigned long long
561
/* inode number internal storage type */
562
#define INODEPSPEC "ll" /* INODETYPE printf specification
564
# endif /* DARWINV>=800 */
568
* UID_ARG defines the size of a User ID number when it is passed
569
* as a function argument.
576
* Each USE_LIB_<function_name> is defined for dialects that use the
577
* <function_name> in the lsof library.
579
* Note: other definitions and operations may be required to condition the
580
* library function source code. They may be found in the dialect dlsof.h
584
#define USE_LIB_CKKV 1 /* ckkv.c */
585
/* #define USE_LIB_COMPLETEVFS 1 cvfs.c */
586
#define USE_LIB_FIND_CH_INO 1 /* fino.c */
587
#define USE_LIB_IS_FILE_NAMED 1 /* isfn.c */
588
#define USE_LIB_LKUPDEV 1 /* lkud.c */
589
#define USE_LIB_PRINTDEVNAME 1 /* pdvn.c */
590
/* #define USE_LIB_PROCESS_FILE 1 prfp.c */
591
#define USE_LIB_PRINT_TCPTPI 1 /* ptti.c */
592
/* #define USE_LIB_READDEV 1 rdev.c */
593
/* #define USE_LIB_READMNT 1 rmnt.c */
594
/* #define USE_LIB_REGEX 1 regex.c */
595
/* #define USE_LIB_RNAM 1 rnam.c */
598
#define USE_LIB_RNMH 1 /* rnmh.c */
599
#else /* DARWINV>800 */
600
/* #define USE_LIB_RNMH 1 rnmh.c */
601
#endif /* DARWINV<800 */
603
/* #define USE_LIB_RNCH 1 rnch.c */
604
/* #define USE_LIB_SNPF 1 snpf.c */
605
#define snpf snprintf /* use the system's snprintf() */
609
* WARNDEVACCESS is defined for those dialects that should issue a warning
610
* when lsof can't access /dev (or /device) or one of its sub-directories.
611
* The warning can be inhibited by the lsof caller with the -w option.
614
#define WARNDEVACCESS 1
618
* WARNINGSTATE is defined for those dialects that want to suppress all lsof
622
/* #define WARNINGSTATE 1 warnings are enabled by default */
626
* WILLDROPGID is defined for those dialects whose lsof executable runs
627
* setgid(not_real_GID) and whose setgid power can be relinquished after
628
* the dialect's initialize() function has been executed.
631
#define WILLDROPGID 1
635
* zeromem is a macro that uses bzero or memset.
638
#define zeromem(a, l) memset(a, 0, l)
640
#endif /* !defined(LSOF_MACHINE_H) */