1/* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _SYS_ACCTCTL_H 27#define _SYS_ACCTCTL_H 28 29#include <sys/types.h> 30#include <sys/bitmap.h> 31#include <sys/sysmacros.h> 32 33#ifdef __cplusplus 34extern "C" { 35#endif 36 37/* 38 * Definitions for acctctl() system call 39 */ 40 41/* 42 * modes 43 */ 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) 49 50/* 51 * options 52 */ 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) 60 61/* 62 * Process accounting resource IDs 63 */ 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 */ 82 83/* 84 * Task accounting resource IDs 85 */ 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 */ 95 96/* 97 * Flow accounting resource IDs 98 */ 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 */ 113 114/* 115 * Network accounting resource IDs 116 */ 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 */ 140 141#define AC_MAX_RES \ 142 MAX(MAX(MAX(AC_PROC_MAX_RES, AC_TASK_MAX_RES), AC_FLOW_MAX_RES), \ 143 AC_NET_MAX_RES) 144#define AC_MASK_SZ BT_BITOUL(AC_MAX_RES + 1) 145 146/* 147 * resource states 148 */ 149#define AC_ON 1 /* enabled resource */ 150#define AC_OFF 0 /* disabled resource */ 151 152typedef struct ac_res { 153 int ar_id; /* resource ID */ 154 int ar_state; /* resource state; see above */ 155} ac_res_t; 156 157#ifdef _KERNEL 158 159#include <sys/vnode.h> 160#include <sys/zone.h> 161#include <sys/list.h> 162 163typedef 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 */ 169} ac_info_t; 170 171/* 172 * Key used for retrieving per-zone exacct settings. This remains 173 * uninitialized (ZONE_KEY_UNINITIALIZED) until the acctctl module is loaded. 174 */ 175extern zone_key_t exacct_zone_key; 176 177/* 178 * Per-zone exacct settings. Each zone may have its own settings for 179 * process, task, flow, and network accounting. 180 * 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. 185 * 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. 188 */ 189struct exacct_globals { 190 ac_info_t ac_task; 191 ac_info_t ac_proc; 192 ac_info_t ac_flow; 193 ac_info_t ac_net; 194 list_node_t ac_link; 195}; 196 197#else 198 199extern int acctctl(int cmd, void *buf, size_t bufsz); 200 201#endif /* ifdef _KERNEL */ 202 203#ifdef __cplusplus 204} 205#endif 206 207#endif /* _SYS_ACCTCTL_H */ 208