summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/exacct_impl.h
blob: 14cee43d5f1f5c03b291b1e90fc84edae2b4d301 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_EXACCT_IMPL_H
#define	_SYS_EXACCT_IMPL_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <sys/utsname.h>
#include <sys/zone.h>

/*
 * Setting the exacct error code.  libexacct provides more detailed codes for
 * identifying causes of operational failure; the kernel doesn't use this
 * facility, since the kernel operations can't fail.  (KM_SLEEP allocations,
 * for instance.)
 */
#ifdef _KERNEL
#define	EXACCT_SET_ERR(x)
#else /* _KERNEL */
extern void exacct_seterr(int);
#define	EXACCT_SET_ERR(x)   exacct_seterr(x)
#endif /* _KERNEL */

typedef struct task_usage {
	hrtime_t tu_utime;	/* user time */
	hrtime_t tu_stime;	/* system time */

	uint64_t tu_minflt;	/* minor faults */
	uint64_t tu_majflt;	/* major faults */
	uint64_t tu_sndmsg;	/* messages sent */
	uint64_t tu_rcvmsg;	/* messages received */
	uint64_t tu_ioch;	/* characters read and written */
	uint64_t tu_iblk;	/* input blocks */
	uint64_t tu_oblk;	/* output blocks */
	uint64_t tu_vcsw;	/* voluntary context switches */
	uint64_t tu_icsw;	/* involuntary context switches */
	uint64_t tu_nsig;	/* signals received */
	uint64_t tu_nswp;	/* swaps */
	uint64_t tu_nscl;	/* system calls */
	uint64_t tu_startsec;	/* start time (seconds) */
	uint64_t tu_startnsec;	/* start time (nanoseconds) */
	uint64_t tu_finishsec;	/* finish time (seconds) */
	uint64_t tu_finishnsec;	/* finish time (nanoseconds) */
	taskid_t tu_anctaskid;	/* ancestor task's ID */
} task_usage_t;

typedef struct proc_usage {
	uint64_t pu_minflt;	/* minor faults */
	uint64_t pu_majflt;	/* major faults */
	uint64_t pu_sndmsg;	/* messages sent */
	uint64_t pu_rcvmsg;	/* messages received */
	uint64_t pu_ioch;	/* characters read and written */
	uint64_t pu_iblk;	/* input blocks */
	uint64_t pu_oblk;	/* output blocks */
	uint64_t pu_vcsw;	/* voluntary context switches */
	uint64_t pu_icsw;	/* involuntary context switches */
	uint64_t pu_nsig;	/* signals received */
	uint64_t pu_nswp;	/* swaps */
	uint64_t pu_nscl;	/* system calls */
	uint64_t pu_utimesec;	/* user time (seconds) */
	uint64_t pu_utimensec;	/* user time (nanoseconds) */
	uint64_t pu_stimesec;	/* system time (seconds) */
	uint64_t pu_stimensec;	/* system time (nanoseconds) */
	uint64_t pu_startsec;	/* start time (seconds) */
	uint64_t pu_startnsec;	/* start time (nanoseconds) */
	uint64_t pu_finishsec;	/* finish time (seconds) */
	uint64_t pu_finishnsec;	/* finish time (nanoseconds) */
	uint64_t pu_mem_rss_avg;	/* average RSS (K) */
	uint64_t pu_mem_rss_max;	/* peak RSS (K) */

	pid_t pu_pid;		/* process ID */
	uid_t pu_ruid;		/* user ID */
	gid_t pu_rgid;		/* group ID */
	projid_t pu_projid;	/* project ID */
	taskid_t pu_taskid;	/* task ID */
	uint32_t pu_acflag;	/* accounting flags */
	char *pu_command;	/* command string */
	uint32_t pu_major;	/* major number of controlling tty */
	uint32_t pu_minor;	/* minor number of controlling tty */
	int pu_wstat;		/* wait() status */
	pid_t pu_ancpid;	/* ancestor process's ID */
	char pu_zonename[ZONENAME_MAX];	/* Zone name */
	char pu_nodename[_SYS_NMLN];
} proc_usage_t;

typedef struct flow_usage {
	uint32_t fu_saddr[4];	/* source address */
	uint32_t fu_daddr[4];	/* remote address */
	uint8_t fu_protocol;	/* protocol type */
	uint16_t fu_sport;	/* source port */
	uint16_t fu_dport;	/* remote port */
	uint8_t fu_dsfield;	/* DS field */
	uint32_t fu_nbytes;	/* number of bytes (incl. IP header) */
	uint32_t fu_npackets;	/* number of packets */
	uint64_t fu_ctime;	/* creation time for this item */
	uint64_t fu_lseen;	/* when the last item of this desc. was seen */
	projid_t fu_projid;	/* project ID */
	uid_t fu_userid;		/* user ID */
	boolean_t fu_isv4;	/* to extract the correct l/r-addr */
	char *fu_aname;		/* action instance name */
} flow_usage_t;

extern void exacct_order16(uint16_t *);
extern void exacct_order32(uint32_t *);
extern void exacct_order64(uint64_t *);

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_EXACCT_IMPL_H */