4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_ACCTCTL_H
27 #define _SYS_ACCTCTL_H
29 #include <sys/types.h>
30 #include <sys/bitmap.h>
31 #include <sys/sysmacros.h>
38 * Definitions for acctctl() system call
44 #define AC_PROC (0x1 << 24) /* change process accounting settings */
45 #define AC_TASK (0x2 << 24) /* change task accounting settings */
46 #define AC_FLOW (0x4 << 24) /* change flow accounting settings */
47 #define AC_NET (0x8 << 24) /* change network accounting settings */
48 #define AC_MODE(x) ((x) & 0xff000000)
53 #define AC_FILE_SET (0x01) /* set accounting file name */
54 #define AC_FILE_GET (0x02) /* get accounting file name */
55 #define AC_RES_SET (0x04) /* set (enable/disable) resources */
56 #define AC_RES_GET (0x08) /* get a list of enabled resources */
57 #define AC_STATE_SET (0x10) /* set accounting mode state (on/off) */
58 #define AC_STATE_GET (0x20) /* get accounting mode state */
59 #define AC_OPTION(x) ((x) & 0x00ffffff)
62 * Process accounting resource IDs
64 #define AC_NONE 0 /* special end-of-list identifier */
65 #define AC_PROC_PID 1 /* process ID */
66 #define AC_PROC_UID 2 /* user ID */
67 #define AC_PROC_GID 3 /* group ID */
68 #define AC_PROC_PROJID 4 /* project ID */
69 #define AC_PROC_TASKID 5 /* task ID */
70 #define AC_PROC_CPU 6 /* user/system cpu time */
71 #define AC_PROC_TIME 7 /* start/finish time */
72 #define AC_PROC_COMMAND 8 /* command name */
73 #define AC_PROC_TTY 9 /* control tty */
74 #define AC_PROC_HOSTNAME 10 /* hostname */
75 #define AC_PROC_MICROSTATE 11 /* microstate accounting */
76 #define AC_PROC_FLAG 12 /* accounting flags */
77 #define AC_PROC_ANCPID 13 /* ancestor process's ID */
78 #define AC_PROC_WAIT_STATUS 14 /* process wait status */
79 #define AC_PROC_ZONENAME 15 /* zone name */
80 #define AC_PROC_MEM 16 /* memory usage */
81 #define AC_PROC_MAX_RES 16 /* must be equal to the number above */
84 * Task accounting resource IDs
86 #define AC_TASK_TASKID 1 /* task ID */
87 #define AC_TASK_PROJID 2 /* project ID */
88 #define AC_TASK_CPU 3 /* user/system cpu time */
89 #define AC_TASK_TIME 4 /* start/finish time */
90 #define AC_TASK_HOSTNAME 5 /* hostname */
91 #define AC_TASK_MICROSTATE 6 /* microstate accounting */
92 #define AC_TASK_ANCTASKID 7 /* ancestor task's taskid */
93 #define AC_TASK_ZONENAME 8 /* zone name */
94 #define AC_TASK_MAX_RES 8 /* must be equal to the number above */
97 * Flow accounting resource IDs
99 #define AC_FLOW_SADDR 1 /* source address */
100 #define AC_FLOW_DADDR 2 /* destination address */
101 #define AC_FLOW_SPORT 3 /* source port */
102 #define AC_FLOW_DPORT 4 /* destination port */
103 #define AC_FLOW_PROTOCOL 5 /* protocol */
104 #define AC_FLOW_DSFIELD 6 /* dsfield */
105 #define AC_FLOW_CTIME 7 /* creation time for this flow */
106 #define AC_FLOW_LSEEN 8 /* pkt last seen for this flow */
107 #define AC_FLOW_NBYTES 9 /* no. of bytes in this flow */
108 #define AC_FLOW_NPKTS 10 /* no. of packets for this flow */
109 #define AC_FLOW_PROJID 11 /* project id */
110 #define AC_FLOW_UID 12 /* user id */
111 #define AC_FLOW_ANAME 13 /* action instance name */
112 #define AC_FLOW_MAX_RES 13 /* must be equal to the number above */
115 * Network accounting resource IDs
117 #define AC_NET_NAME 1 /* flow name */
118 #define AC_NET_EHOST 2 /* ethernet source address */
119 #define AC_NET_EDEST 3 /* ethernet destination address */
120 #define AC_NET_VLAN_TPID 4 /* VLAN protocol ID */
121 #define AC_NET_VLAN_TCI 5 /* VLAN tag control info. */
122 #define AC_NET_SAP 6 /* SAP */
123 #define AC_NET_PRIORITY 7 /* Priority */
124 #define AC_NET_BWLIMIT 8 /* Bandwidth limit */
125 #define AC_NET_DEVNAME 9 /* Device name */
126 #define AC_NET_SADDR 10 /* Source IP address */
127 #define AC_NET_DADDR 11 /* Dest IP address */
128 #define AC_NET_SPORT 12 /* Source Port */
129 #define AC_NET_DPORT 13 /* Dest Port */
130 #define AC_NET_PROTOCOL 14 /* Protocol */
131 #define AC_NET_DSFIELD 15 /* DiffServ field */
132 #define AC_NET_CURTIME 16 /* Current Time */
133 #define AC_NET_IBYTES 17 /* Inbound Bytes */
134 #define AC_NET_OBYTES 18 /* Outbound Bytes */
135 #define AC_NET_IPKTS 19 /* Inbound Packets */
136 #define AC_NET_OPKTS 20 /* Outbound Packets */
137 #define AC_NET_IERRPKTS 21 /* Inbound Error Packets */
138 #define AC_NET_OERRPKTS 22 /* Outbound Error Packets */
139 #define AC_NET_MAX_RES 22 /* must be equal to the number above */
142 MAX(MAX(MAX(AC_PROC_MAX_RES, AC_TASK_MAX_RES), AC_FLOW_MAX_RES), \
144 #define AC_MASK_SZ BT_BITOUL(AC_MAX_RES + 1)
149 #define AC_ON 1 /* enabled resource */
150 #define AC_OFF 0 /* disabled resource */
152 typedef struct ac_res
{
153 int ar_id
; /* resource ID */
154 int ar_state
; /* resource state; see above */
159 #include <sys/vnode.h>
160 #include <sys/zone.h>
161 #include <sys/list.h>
163 typedef struct ac_info
{
164 kmutex_t ac_lock
; /* protects the structure */
165 vnode_t
*ac_vnode
; /* exacct file vnode pointer */
166 char *ac_file
; /* exacct file name */
167 int ac_state
; /* accounting state */
168 ulong_t ac_mask
[AC_MASK_SZ
]; /* bitmask of resources */
172 * Key used for retrieving per-zone exacct settings. This remains
173 * uninitialized (ZONE_KEY_UNINITIALIZED) until the acctctl module is loaded.
175 extern zone_key_t exacct_zone_key
;
178 * Per-zone exacct settings. Each zone may have its own settings for
179 * process, task, flow, and network accounting.
181 * Per-zone flow accounting has not yet been implemented, so this
182 * provides zones with the view that flow accounting in the zone hasn't
183 * been initialized (which is true). The various system calls will fail
184 * to set flow accounting parameters from within a zone.
186 * The global list of accounting settings is used when we check to see
187 * if the accounting file is already in use by any zone.
189 struct exacct_globals
{
199 extern int acctctl(int cmd
, void *buf
, size_t bufsz
);
201 #endif /* ifdef _KERNEL */
207 #endif /* _SYS_ACCTCTL_H */