1/*
2 * machine.h -- Darwin definitions for libproc-based lsof
3 */
4
5
6/*
7 * Portions Copyright 2005 Apple Computer, Inc.  All rights reserved.
8 *
9 * Copyright 2005 Purdue Research Foundation, West Lafayette, Indiana
10 * 47907.  All rights reserved.
11 *
12 * Written by Allan Nathanson, Apple Computer, Inc., and Victor A.
13 * Abell, Purdue University.
14 *
15 * This software is not subject to any license of the American Telephone
16 * and Telegraph Company or the Regents of the University of California.
17 *
18 * Permission is granted to anyone to use this software for any purpose on
19 * any computer system, and to alter it and redistribute it freely, subject
20 * to the following restrictions:
21 *
22 * 1. Neither the authors, nor Apple Computer, Inc. nor Purdue University
23 *    are responsible for any consequences of the use of this software.
24 *
25 * 2. The origin of this software must not be misrepresented, either
26 *    by explicit claim or by omission.  Credit to the authors, Apple
27 *    Computer, Inc. and Purdue University must appear in documentation
28 *    and sources.
29 *
30 * 3. Altered versions must be plainly marked as such, and must not be
31 *    misrepresented as being the original software.
32 *
33 * 4. This notice may not be removed or altered.
34 */
35
36
37/*
38 * $Id: machine.h,v 1.10 2013/01/02 17:03:05 abe Exp $
39 */
40
41
42#if	!defined(LSOF_MACHINE_H)
43#define	LSOF_MACHINE_H	1
44
45
46#include <sys/types.h>
47#include <sys/param.h>
48
49# if	defined(NEEDS_MACH_PORT_T)
50# include <device/device_types.h>
51# endif	/* NEED_MACH_PORT_T */
52
53#include <string.h>
54
55
56/*
57 * CAN_USE_CLNT_CREATE is defined for those dialects where RPC clnt_create()
58 * can be used to obtain a CLIENT handle in lieu of clnttcp_create().
59 */
60
61#define	CAN_USE_CLNT_CREATE	1
62
63
64/*
65 * DEVDEV_PATH defines the path to the directory that contains device
66 * nodes.
67 */
68
69#define	DEVDEV_PATH	"/dev"
70
71
72/*
73 * GET_MAX_FD is defined for those dialects that provide a function other than
74 * getdtablesize() to obtain the maximum file descriptor number plus one.
75 */
76
77/* #define	GET_MAX_FD	?	*/
78
79
80/*
81 * HASAOPT is defined for those dialects that have AFS support; it specifies
82 * that the default path to an alternate AFS kernel name list file may be
83 * supplied with the -A <path> option.
84 */
85
86/* #define	HASAOPT		1 */
87
88
89/*
90 * HASBLKDEV is defined for those dialects that want block device information
91 * recorded in BDevtp[].
92 */
93
94#define	HASBLKDEV	1
95
96
97/*
98 * HASDCACHE is defined for those dialects that support a device cache
99 * file.
100 *
101 * HASENVDC defined the name of an environment variable that contains the
102 * device cache file path.  The HASENVDC environment variable is ignored when
103 * the lsof process is setuid(root) or its real UID is 0.
104 *
105 * HASPERSDC defines the format for the last component of a personal device
106 * cache file path.  The first will be the home directory of the real UID that
107 * executes lsof.
108 *
109 * HASPERSDCPATH defines the environment variable whose value is the middle
110 * component of the personal device cache file path.  The middle component
111 * follows the home directory and precedes the results of applying HASPERSDC.
112 * The HASPERSDCPATH environment variable is ignored when the lsof process is
113 * setuid(root) or its real UID is 0.
114 *
115 * HASSYSDC defines a public device cache file path.  When it's defined, it's
116 * used as the path from which to read the device cache.
117 *
118 * Consult the 00DCACHE and 00FAQ files of the lsof distribution for more
119 * information on device cache file path construction.
120 */
121
122/* #define	HASDCACHE	1			*/
123/* #define	HASENVDC	"LSOFDEVCACHE"		*/
124/* #define	HASPERSDC	"%h/%p.lsof_%L"		*/
125/* #define	HASPERSDCPATH	"LSOFPERSDCPATH"	*/
126/* #define	HASSYSDC	"/your/choice/of/path"	*/
127
128
129/*
130 * HASCDRNODE is defined for those dialects that have CD-ROM nodes.
131 */
132
133/* #define	HASCDRNODE	1 */
134
135
136/*
137 * HASFIFONODE is defined for those dialects that have FIFO nodes.
138 */
139
140/* #define	HASFIFONODE	1 */
141
142
143/*
144 * HASFSINO is defined for those dialects that have the file system
145 * inode element, fs_ino, in the lfile structure definition in lsof.h.
146 */
147
148#define	HASFSINO	1
149
150
151/*
152 * HASFSTRUCT is defined if the dialect has a file structure.
153 *
154 * FSV_DEFAULT defines the default set of file structure values to list.
155 * It defaults to zero (0), but may be made up of a combination of the
156 * FSV_* symbols from lsof.h.
157 *
158 *   HASNOFSADDR  -- has no file structure address
159 *   HASNOFSFLAGS -- has no file structure flags
160 *   HASNOFSCOUNT -- has no file structure count
161 *   HASNOFSNADDR -- has no file structure node address
162 */
163
164#define	HASFSTRUCT	1
165/* #define	FSV_DEFAULT	FSV_? | FSV_? | FSV_? */
166#define	HASNOFSADDR	1	/* has no file structure address */
167/* #define	HASNOFSFLAGS	1	has no file structure flags */
168/* #define	HASNOFSCOUNT	1	has no file structure count */
169#define	HASNOFSNADDR	1	/* has no file structure node address */
170
171
172/*
173 * HASGNODE is defined for those dialects that have gnodes.
174 */
175
176/* #define	HASGNODE	1 */
177
178
179/*
180 * HASHSNODE is defined for those dialects that have High Sierra nodes.
181 */
182
183/* #define	HASHSNODE	1 */
184
185
186/*
187 * HASINODE is defined for those dialects that have inodes and wish to
188 * use readinode() from node.c.
189 */
190
191/* #define	HASINODE	1 */
192
193
194/*
195 * HASINTSIGNAL is defined for those dialects whose signal function returns
196 * an int.
197 */
198
199/* #define	HASINTSIGNAL	1 */
200
201
202/*
203 * HASKERNIDCK is defined for those dialects that support the comparison of
204 * the build to running kernel identity.
205 */
206
207#define	HASKERNIDCK	1
208
209
210/*
211 * HASKOPT is defined for those dialects that support the -k option of
212 * reading the kernel's name list from an optional file.
213 */
214
215/* #define	HASKOPT	1	*/
216
217
218/*
219 * HASLFILEADD is defined for those dialects that need additional elements
220 * in struct lfile.  The HASLFILEADD definition is a macro that defines
221 * them.  If any of the additional elements need to be preset in the
222 * alloc_lfile() function of proc.c, the SETLFILEADD macro may be defined
223 * to do that.
224 *
225 * If any additional elements need to be cleared in alloc_lfile() or in the
226 * free_proc() function of proc.c, the CLRLFILEADD macro may be defined to
227 * do that.  Note that CLRLFILEADD takes one argument, the pointer to the
228 * lfile struct.  The CLRLFILEADD macro is expected to expand to statements
229 * that are complete -- i.e., have terminating semi-colons -- so the macro is
230 * called without a terminating semicolon by proc.c.
231 *
232 * The HASXOPT definition may be used to select the conditions under which
233 * private lfile elements are used.
234 */
235
236#define	HASLFILEADD char *V_path; \
237		    mach_port_t fileport; \
238		    uint32_t guardflags;
239#define CLRLFILEADD(lf)	if (lf->V_path) { \
240			    (void) free((FREE_P *)lf->V_path); \
241			    lf->V_path = (char *)NULL; \
242			} \
243			lf->fileport = MACH_PORT_NULL; \
244			lf->guardflags = 0;
245#define SETLFILEADD Lf->V_path = (char *)NULL; \
246		    Lf->fileport = MACH_PORT_NULL; \
247	 	    Lf->guardflags = 0;
248
249
250/*
251 * HASMNTSTAT indicates the dialect supports the mount stat(2) result option
252 * in its l_vfs and mounts structures.
253 */
254
255/* #define	HASMNTSTAT	1	*/
256
257
258/*
259 * HASMNTSUP is defined for those dialects that support the mount supplement
260 * option.
261 */
262
263/* #define	HASMNTSUP	1	*/
264
265
266/*
267 * HASMOPT is defined for those dialects that support the reading of
268 * kernel memory from an alternate file.
269 */
270
271/* #define	HASMOPT	1	*/
272
273
274/*
275 * HASNCACHE is defined for those dialects that have a kernel name cache
276 * that lsof can search.  A value of 1 directs printname() to prefix the
277 * cache value with the file system directory name; 2, avoid the prefix.
278 *
279 * NCACHELDPFX is a set of C commands to execute before calling ncache_load().
280 *
281 * NCACHELDSFX is a set of C commands to execute after calling ncache_load().
282 */
283
284/* #define	HASNCACHE	1   */
285/* #define	NCACHELDPFX	??? */
286/* #define	NCACHELDSFX	??? */
287
288
289/*
290 * HASNLIST is defined for those dialects that use nlist() to acccess
291 * kernel symbols.
292 */
293
294/* #define	HASNLIST	1	*/
295
296
297/*
298 * HASPIPEFN is defined for those dialects that have a special function to
299 * process DTYPE_PIPE file structure entries.  Its value is the name of the
300 * function.
301 *
302 * NOTE: don't forget to define a prototype for this function in dproto.h.
303 */
304
305/* #define	HASPIPEFN	process_pipe?	*/
306
307
308/*
309 * HASPIPENODE is defined for those dialects that have pipe nodes.
310 */
311
312/* #define	HASPIPENODE	1 */
313
314
315/*
316 * HASPMAPENABLED is defined when the reporting of portmapper registration
317 * info is enabled by default.
318 */
319
320/* #define	HASPMAPENABLED	1 */
321
322
323/*
324 * HASPPID is defined for those dialects that support identification of
325 * the parent process IDentifier (PPID) of a process.
326 */
327
328#define	HASPPID		1
329
330
331/*
332 * HASPRINTDEV, HASPRINTINO, HASPRINTNM, HASPRINTOFF, and HASPRINTSZ
333 * define private dialect-specific functions for printing DEVice numbers,
334 * INOde numbers, NaMes, file OFFsets, and file SiZes.  The functions are
335 * called from print_file().
336 */
337
338/* #define	HASPRINTDEV	print_dev	*/
339/* #define	HASPRINTINO	print_ino?	*/
340#define	HASPRINTNM	print_nm
341/* #define	HASPRINTOFF	print_off?	*/
342/* #define	HASPRINTSZ	print_sz?	*/
343
344
345/*
346 * HASPRIVFILETYPE and PRIVFILETYPE are defined for dialects that have a
347 * file structure type that isn't defined by a DTYPE_* symbol.  They are
348 * used in lib/prfp.c to select the type's processing.
349 *
350 * PRIVFILETYPE is the definition of the f_type value in the file struct.
351 *
352 * HASPRIVFILETYPE is the name of the processing function.
353 */
354
355/* #define	HASPRIVFILETYPE	process_shmf?	*/
356/* #define	PRIVFILETYPE	??	*/
357
358
359/*
360 * HASPRIVNMCACHE is defined for dialects that have a private method for
361 * printing cached NAME column values for some files.  HASPRIVNAMECACHE
362 * is defined to be the name of the function.
363 *
364 * The function takes one argument, a struct lfile pointer to the file, and
365 * returns non-zero if it prints a name to stdout.
366 */
367
368#define	HASPRIVNMCACHE	print_v_path
369
370
371/*
372 * HASPRIVPRIPP is defined for dialects that have a private function for
373 * printing IP protocol names.  When HASPRIVPRIPP isn't defined, the
374 * IP protocol name printing function defaults to printiprto().
375 */
376
377/* #define	HASPRIVPRIPP	1	*/
378
379
380/*
381 * HASPROCFS is defined for those dialects that have a proc file system --
382 * usually /proc and usually in SYSV4 derivatives.
383 *
384 * HASFSTYPE is defined as 1 for those systems that have a file system type
385 * string, st_fstype, in the stat() buffer; 2, for those systems that have a
386 * file system type integer in the stat() buffer, named MOUNTS_STAT_FSTYPE;
387 * 0, for systems whose stat(2) structure has no file system type member.  The
388 * additional symbols MOUNTS_FSTYPE, RMNT_FSTYPE, and RMNT_STAT_FSTYPE may be
389 * defined in dlsof.h to direct how the readmnt() function in lib/rmnt.c
390 * preserves these stat(2) and getmntent(3) buffer values in the local mounts
391 * structure.
392 *
393 * The defined value is the string that names the file system type.
394 *
395 * The HASPROCFS definition usually must be accompanied by the HASFSTYPE
396 * definition and the providing of an fstype element in the local mounts
397 * structure (defined in dlsof.h).
398 *
399 * The HASPROCFS definition may be accompanied by the HASPINODEN definition.
400 * HASPINODEN specifies that searching for files in HASPROCFS is to be done
401 * by inode number.
402 */
403
404/* #define	HASPROCFS	"proc?"	*/
405/* #define	HASFSTYPE	1	*/
406/* #define	HASPINODEN	1	*/
407
408
409/*
410 * HASRNODE is defined for those dialects that have rnodes.
411 */
412
413/* #define	HASRNODE	1	*/
414
415
416/*
417 * Define HASSECURITY to restrict the listing of all open files to the
418 * root user.  When HASSECURITY is defined, the non-root user may list
419 * only files whose processes have the same user ID as the real user ID
420 * (the one that its user logged on with) of the lsof process.
421 */
422
423/* #define	HASSECURITY	1	*/
424
425
426/*
427 * If HASSECURITY is defined, define HASNOSOCKSECURITY to allow users
428 * restricted by HASSECURITY to list any open socket files, provide their
429 * listing is selected by the "-i" option.
430 */
431
432/* #define	HASNOSOCKSECURITY	1	*/
433
434
435/*
436 * HASSETLOCALE is defined for those dialects that have <locale.h> and
437 * setlocale().
438 *
439 * If the dialect also has wide character support for language locales,
440 * HASWIDECHAR activates lsof's wide character support and WIDECHARINCL
441 * defines the header file (if any) that must be #include'd to use the
442 * mblen() and mbtowc() functions.
443 */
444
445#define	HASSETLOCALE	1
446#define	HASWIDECHAR	1
447/* #define	WIDECHARINCL	<wchar.h>	*/
448
449
450/*
451 * HASSNODE is defined for those dialects that have snodes.
452 */
453
454/* #define	HASSNODE	1	*/
455
456
457/*
458 * HASTASKS is defined for those dialects that have task reporting support.
459 */
460
461/* #define	HASTASKS	1 */
462
463
464/*
465 * HASSOOPT, HASSOSTATE and HASTCPOPT define the availability of information
466 * on socket options (SO_* symbols), socket states (SS_* symbols) and TCP
467 * options.
468 */
469
470#define	HASSOOPT	1	/* has socket option information */
471#define	HASSOSTATE	1	/* has socket state information */
472#define	HASTCPOPT	1	/* has TCP options or flags */
473
474
475/*
476 * Define HASSPECDEVD to be the name of a function that handles the results
477 * of a successful stat(2) of a file name argument.
478 *
479 * For example, HASSPECDEVD() for Darwin makes sure that st_dev is set to
480 * what stat("/dev") returns -- i.e., what's in DevDev.
481 *
482 * The function takes two arguments:
483 *
484 *	1: pointer to the full path name of file
485 *	2: pointer to the stat(2) result
486 *
487 * The function returns void.
488 */
489
490#define	HASSPECDEVD	process_dev_stat
491
492
493/*
494 * HASSTREAMS is defined for those dialects that support streams.
495 */
496
497/* #define	HASSTREAMS	1 */
498
499
500/*
501 * HASTCPTPIQ is defined for dialects where it is possible to report the
502 * TCP/TPI Recv-Q and Send-Q values produced by netstat.
503 */
504
505#define	HASTCPTPIQ	1
506
507
508/*
509 * HASTCPTPIW is defined for dialects where it is possible to report the
510 * TCP/TPI send and receive window sizes produced by netstat.
511 */
512
513/* #define	HASTCPTPIW	1 */
514
515
516/*
517 * HASTCPUDPSTATE is defined for dialects that have TCP and UDP state
518 * support -- i.e., for the "-stcp|udp:state" option and its associated
519 * speed improvements.
520 */
521
522#define	HASTCPUDPSTATE	1
523
524
525/*
526 * HASTMPNODE is defined for those dialects that have tmpnodes.
527 */
528
529/* #define	HASTMPNODE	1 */
530
531
532/*
533 * HASVNODE is defined for those dialects that use the Sun virtual file system
534 * node, the vnode.  BSD derivatives usually do; System V derivatives prior to
535 * R4 usually don't.
536 */
537
538/* #define	HASVNODE	1	*/
539
540
541/*
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.
545 */
546
547/* #define	HASXOPT		"help text for X option" */
548/* #define	HASXOPT_VALUE	1 */
549
550
551/*
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.
555 *
556 * These are defined here, because they must be used in dlsof.h.
557 */
558
559#define	INODETYPE	unsigned long long
560					/* inode number internal storage type */
561#define	INODEPSPEC	"ll"		/* INODETYPE printf specification
562					 * modifier */
563
564
565/*
566 * UID_ARG defines the size of a User ID number when it is passed
567 * as a function argument.
568 */
569
570#define	UID_ARG	int
571
572
573/*
574 * Each USE_LIB_<function_name> is defined for dialects that use the
575 * <function_name> in the lsof library.
576 *
577 * Note: other definitions and operations may be required to condition the
578 * library function source code.  They may be found in the dialect dlsof.h
579 * header files.
580 */
581
582#define	USE_LIB_CKKV				1	/* ckkv.c */
583/* #define	USE_LIB_COMPLETEVFS		1	   cvfs.c */
584#define	USE_LIB_FIND_CH_INO			1	/* fino.c */
585#define	USE_LIB_IS_FILE_NAMED			1	/* isfn.c */
586#define	USE_LIB_LKUPDEV				1	/* lkud.c */
587/* #define	USE_LIB_PRINTDEVNAME		1	   pdvn.c */
588/* #define	USE_LIB_PROCESS_FILE		1	   prfp.c */
589#define	USE_LIB_PRINT_TCPTPI			1	/* ptti.c */
590/* #define	USE_LIB_READDEV			1	   rdev.c */
591/* #define	USE_LIB_READMNT			1	   rmnt.c */
592/* #define	USE_LIB_REGEX			1	   regex.c */
593/* #define	USE_LIB_RNAM			1	   rnam.c */
594/* #define	USE_LIB_RNCH			1	   rnch.c */
595/* #define	USE_LIB_RNMH			1	   rnmh.c */
596/* #define	USE_LIB_SNPF			1	   snpf.c */
597#define	snpf	snprintf		/* use the system's snprintf() */
598
599
600/*
601 * WARNDEVACCESS is defined for those dialects that should issue a warning
602 * when lsof can't access /dev (or /device) or one of its sub-directories.
603 * The warning can be inhibited by the lsof caller with the -w option.
604 */
605
606/* #define	WARNDEVACCESS	1	*/
607
608
609/*
610 * WARNINGSTATE is defined for those dialects that want to suppress all lsof
611 * warning messages.
612 */
613
614/* #define	WARNINGSTATE	1	warnings are enabled by default */
615
616
617/*
618 * WILLDROPGID is defined for those dialects whose lsof executable runs
619 * setgid(not_real_GID) and whose setgid power can be relinquished after
620 * the dialect's initialize() function has been executed.
621 */
622
623#define	WILLDROPGID	1
624
625
626/*
627 * zeromem is a macro that uses bzero or memset.
628 */
629
630#define	zeromem(a, l)	memset(a, 0, l)
631
632#endif	/* !defined(LSOF_MACHINE_H) */
633