Imported Upstream version 4.89
[platform/upstream/lsof.git] / dialects / darwin / libproc / machine.h
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 abe $
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 "/usr/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) */