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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (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 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_ACCTCTL_H
#define _SYS_ACCTCTL_H
#include <sys/types.h>
#include <sys/bitmap.h>
#include <sys/sysmacros.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Definitions for acctctl() system call
*/
/*
* modes
*/
#define AC_PROC (0x1 << 24) /* change process accounting settings */
#define AC_TASK (0x2 << 24) /* change task accounting settings */
#define AC_FLOW (0x4 << 24) /* change flow accounting settings */
#define AC_NET (0x8 << 24) /* change network accounting settings */
#define AC_MODE(x) ((x) & 0xff000000)
/*
* options
*/
#define AC_FILE_SET (0x01) /* set accounting file name */
#define AC_FILE_GET (0x02) /* get accounting file name */
#define AC_RES_SET (0x04) /* set (enable/disable) resources */
#define AC_RES_GET (0x08) /* get a list of enabled resources */
#define AC_STATE_SET (0x10) /* set accounting mode state (on/off) */
#define AC_STATE_GET (0x20) /* get accounting mode state */
#define AC_OPTION(x) ((x) & 0x00ffffff)
/*
* Process accounting resource IDs
*/
#define AC_NONE 0 /* special end-of-list identifier */
#define AC_PROC_PID 1 /* process ID */
#define AC_PROC_UID 2 /* user ID */
#define AC_PROC_GID 3 /* group ID */
#define AC_PROC_PROJID 4 /* project ID */
#define AC_PROC_TASKID 5 /* task ID */
#define AC_PROC_CPU 6 /* user/system cpu time */
#define AC_PROC_TIME 7 /* start/finish time */
#define AC_PROC_COMMAND 8 /* command name */
#define AC_PROC_TTY 9 /* control tty */
#define AC_PROC_HOSTNAME 10 /* hostname */
#define AC_PROC_MICROSTATE 11 /* microstate accounting */
#define AC_PROC_FLAG 12 /* accounting flags */
#define AC_PROC_ANCPID 13 /* ancestor process's ID */
#define AC_PROC_WAIT_STATUS 14 /* process wait status */
#define AC_PROC_ZONENAME 15 /* zone name */
#define AC_PROC_MEM 16 /* memory usage */
#define AC_PROC_MAX_RES 16 /* must be equal to the number above */
/*
* Task accounting resource IDs
*/
#define AC_TASK_TASKID 1 /* task ID */
#define AC_TASK_PROJID 2 /* project ID */
#define AC_TASK_CPU 3 /* user/system cpu time */
#define AC_TASK_TIME 4 /* start/finish time */
#define AC_TASK_HOSTNAME 5 /* hostname */
#define AC_TASK_MICROSTATE 6 /* microstate accounting */
#define AC_TASK_ANCTASKID 7 /* ancestor task's taskid */
#define AC_TASK_ZONENAME 8 /* zone name */
#define AC_TASK_MAX_RES 8 /* must be equal to the number above */
/*
* Flow accounting resource IDs
*/
#define AC_FLOW_SADDR 1 /* source address */
#define AC_FLOW_DADDR 2 /* destination address */
#define AC_FLOW_SPORT 3 /* source port */
#define AC_FLOW_DPORT 4 /* destination port */
#define AC_FLOW_PROTOCOL 5 /* protocol */
#define AC_FLOW_DSFIELD 6 /* dsfield */
#define AC_FLOW_CTIME 7 /* creation time for this flow */
#define AC_FLOW_LSEEN 8 /* pkt last seen for this flow */
#define AC_FLOW_NBYTES 9 /* no. of bytes in this flow */
#define AC_FLOW_NPKTS 10 /* no. of packets for this flow */
#define AC_FLOW_PROJID 11 /* project id */
#define AC_FLOW_UID 12 /* user id */
#define AC_FLOW_ANAME 13 /* action instance name */
#define AC_FLOW_MAX_RES 13 /* must be equal to the number above */
/*
* Network accounting resource IDs
*/
#define AC_NET_NAME 1 /* flow name */
#define AC_NET_EHOST 2 /* ethernet source address */
#define AC_NET_EDEST 3 /* ethernet destination address */
#define AC_NET_VLAN_TPID 4 /* VLAN protocol ID */
#define AC_NET_VLAN_TCI 5 /* VLAN tag control info. */
#define AC_NET_SAP 6 /* SAP */
#define AC_NET_PRIORITY 7 /* Priority */
#define AC_NET_BWLIMIT 8 /* Bandwidth limit */
#define AC_NET_DEVNAME 9 /* Device name */
#define AC_NET_SADDR 10 /* Source IP address */
#define AC_NET_DADDR 11 /* Dest IP address */
#define AC_NET_SPORT 12 /* Source Port */
#define AC_NET_DPORT 13 /* Dest Port */
#define AC_NET_PROTOCOL 14 /* Protocol */
#define AC_NET_DSFIELD 15 /* DiffServ field */
#define AC_NET_CURTIME 16 /* Current Time */
#define AC_NET_IBYTES 17 /* Inbound Bytes */
#define AC_NET_OBYTES 18 /* Outbound Bytes */
#define AC_NET_IPKTS 19 /* Inbound Packets */
#define AC_NET_OPKTS 20 /* Outbound Packets */
#define AC_NET_IERRPKTS 21 /* Inbound Error Packets */
#define AC_NET_OERRPKTS 22 /* Outbound Error Packets */
#define AC_NET_MAX_RES 22 /* must be equal to the number above */
#define AC_MAX_RES \
MAX(MAX(MAX(AC_PROC_MAX_RES, AC_TASK_MAX_RES), AC_FLOW_MAX_RES), \
AC_NET_MAX_RES)
#define AC_MASK_SZ BT_BITOUL(AC_MAX_RES + 1)
/*
* resource states
*/
#define AC_ON 1 /* enabled resource */
#define AC_OFF 0 /* disabled resource */
typedef struct ac_res {
int ar_id; /* resource ID */
int ar_state; /* resource state; see above */
} ac_res_t;
#ifdef _KERNEL
#include <sys/vnode.h>
#include <sys/zone.h>
#include <sys/list.h>
typedef struct ac_info {
kmutex_t ac_lock; /* protects the structure */
vnode_t *ac_vnode; /* exacct file vnode pointer */
char *ac_file; /* exacct file name */
int ac_state; /* accounting state */
ulong_t ac_mask[AC_MASK_SZ]; /* bitmask of resources */
} ac_info_t;
/*
* Key used for retrieving per-zone exacct settings. This remains
* uninitialized (ZONE_KEY_UNINITIALIZED) until the acctctl module is loaded.
*/
extern zone_key_t exacct_zone_key;
/*
* Per-zone exacct settings. Each zone may have its own settings for
* process, task, flow, and network accounting.
*
* Per-zone flow accounting has not yet been implemented, so this
* provides zones with the view that flow accounting in the zone hasn't
* been initialized (which is true). The various system calls will fail
* to set flow accounting parameters from within a zone.
*
* The global list of accounting settings is used when we check to see
* if the accounting file is already in use by any zone.
*/
struct exacct_globals {
ac_info_t ac_task;
ac_info_t ac_proc;
ac_info_t ac_flow;
ac_info_t ac_net;
list_node_t ac_link;
};
#else
extern int acctctl(int cmd, void *buf, size_t bufsz);
#endif /* ifdef _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_ACCTCTL_H */
|