/*
 * machine.h - /dev/kmem-based HP-UX 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.42 2010/07/29 16:03:09 abe Exp $
 */


#if	!defined(LSOF_MACHINE_H)
#define	LSOF_MACHINE_H	1


/*
 * Do HP-UX 11 64 bit preparation.
 */

#if	defined(HPUXKERNBITS) && HPUXKERNBITS>=64
#define	NLIST_TYPE	nlist64
#endif	/* defined(HPUXKERNBITS) && HPUXKERNBITS>=64 */


# if	HPUXV>=1030
#include <sys/types.h>
#include "kernbits.h"
# else	/* HPUXV<1030 */
#  if	HPUXV>=1020
/*
 * Since we need kernel structures from the HP-UX 10.20 <sys/vnode.h>, and
 * since defining _KERNEL before #include'ing it causes a conflict between
 * its FILE enum and the FILE struct definition in <stdio.h>, redefine FILE,
 * #include <stdio.h>, revoke the FILE redefinition, define _KERNEL,
 * #include <sys/vnode.h>, revoke the _KERNEL definition, and restore the
 * FILE redefinition.
 */

#  if	defined(__GNUC__)
/*
 * Do gcc preparation.
 */

#   if	!defined(__STDC_EXT__)
#define	__STDC_EXT__
#   endif	/* !defined(__STDC_EXT__) */
#include <sys/_inttypes.h>
#  endif	/* defined(__GNUC__) */

#define	FILE	STDIO_FILE
#include <stdio.h>
#undef	FILE
#define	_KERNEL	1
#include <sys/vnode.h>
#define	FILE	STDIO_FILE
#undef	_KERNEL
#  endif	/* HPUXV>=1020 */
# endif	/* HPUXV>=1030 */


/*
 * 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	HPUXV>=1020
#define	CAN_USE_CLNT_CREATE	1
#endif	/* HPUXV>=1020 */


/*
 * 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	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.
 */

/* #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.
 *
 * 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	??? */


/*
 * 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.
 */

#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.
 */

/* #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	<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.
 */

/* #define	HASPROCFS	"proc?" */
/* #define	HASFSTYPE	1 */
/* #define	HASPINODEN	1 */


/*
 * 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 <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	HPUXV>=1100
#define	HASWIDECHAR	1
#endif	/* HPUXV>=1100 */

/* #define	WIDECHARINCL	<wchar.h>	*/


/*
 * HASSNODE is defined for those dialects that have snodes.
 */

# if	HPUXV>=900
#define	HASSNODE	1
# endif	/* HPUXV>=900 */


/*
 * 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.
 */

#if	HPUXV>=1030
# if	HPUXV>=1100
#define	HASSOOPT	1	 /* has socket option information */
# endif	/* HPUXV>=1100 */
/* #define	HASSOSTATE	1	has socket state information */
#define	HASTCPOPT	1	/* has TCP options or flags */
#endif	/* HPUXV>=1030 */


/*
 * 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.
 */

# if	HPUXV>=1030
#define	HASTCPTPIW	1
# endif	/* HPUXV>=1030 */


/*
 * 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.
 */

/* #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.
 */

# if	HPUXV>=1000
#define	INODETYPE	unsigned long long
					/* inode number internal storage type */
#define	INODEPSPEC	"ll"		/* INODETYPE printf specification
					 * modifier */
# endif	/* HPUXV>=1000 */


/*
 * 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 */

# if	HPUXV<1030
#define	USE_LIB_PRINT_TCPTPI			1	/* ptti.c */
# else	/* HPUXV>=1030 */
/* #define	USE_LIB_PRINT_TCPTPI		1	   ptti.c */
# endif	/* HPUXV<1030 */

#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 */

# if	HPUXV<1030
#define	USE_LIB_SNPF				1	/* snpf.c */
# else	/* HPUXV>=1030 */
#define	snpf	snprintf	   /* use the system's snprintf() */
# endif	/* HPUXV<1030 */


/*
 * 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) */
