17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*da14cebeSEric Cheng * Common Development and Distribution License (the "License"). 6*da14cebeSEric Cheng * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 22*da14cebeSEric Cheng * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 237c478bd9Sstevel@tonic-gate * Use is subject to license terms. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267c478bd9Sstevel@tonic-gate #ifndef _SYS_EXACCT_IMPL_H 277c478bd9Sstevel@tonic-gate #define _SYS_EXACCT_IMPL_H 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate #ifdef __cplusplus 307c478bd9Sstevel@tonic-gate extern "C" { 317c478bd9Sstevel@tonic-gate #endif 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #include <sys/types.h> 347c478bd9Sstevel@tonic-gate #include <sys/utsname.h> 357c478bd9Sstevel@tonic-gate #include <sys/zone.h> 367c478bd9Sstevel@tonic-gate 377c478bd9Sstevel@tonic-gate /* 387c478bd9Sstevel@tonic-gate * Setting the exacct error code. libexacct provides more detailed codes for 397c478bd9Sstevel@tonic-gate * identifying causes of operational failure; the kernel doesn't use this 407c478bd9Sstevel@tonic-gate * facility, since the kernel operations can't fail. (KM_SLEEP allocations, 417c478bd9Sstevel@tonic-gate * for instance.) 427c478bd9Sstevel@tonic-gate */ 437c478bd9Sstevel@tonic-gate #ifdef _KERNEL 447c478bd9Sstevel@tonic-gate #define EXACCT_SET_ERR(x) 457c478bd9Sstevel@tonic-gate #else /* _KERNEL */ 467c478bd9Sstevel@tonic-gate extern void exacct_seterr(int); 477c478bd9Sstevel@tonic-gate #define EXACCT_SET_ERR(x) exacct_seterr(x) 487c478bd9Sstevel@tonic-gate #endif /* _KERNEL */ 497c478bd9Sstevel@tonic-gate 507c478bd9Sstevel@tonic-gate typedef struct task_usage { 517c478bd9Sstevel@tonic-gate hrtime_t tu_utime; /* user time */ 527c478bd9Sstevel@tonic-gate hrtime_t tu_stime; /* system time */ 537c478bd9Sstevel@tonic-gate 547c478bd9Sstevel@tonic-gate uint64_t tu_minflt; /* minor faults */ 557c478bd9Sstevel@tonic-gate uint64_t tu_majflt; /* major faults */ 567c478bd9Sstevel@tonic-gate uint64_t tu_sndmsg; /* messages sent */ 577c478bd9Sstevel@tonic-gate uint64_t tu_rcvmsg; /* messages received */ 587c478bd9Sstevel@tonic-gate uint64_t tu_ioch; /* characters read and written */ 597c478bd9Sstevel@tonic-gate uint64_t tu_iblk; /* input blocks */ 607c478bd9Sstevel@tonic-gate uint64_t tu_oblk; /* output blocks */ 617c478bd9Sstevel@tonic-gate uint64_t tu_vcsw; /* voluntary context switches */ 627c478bd9Sstevel@tonic-gate uint64_t tu_icsw; /* involuntary context switches */ 637c478bd9Sstevel@tonic-gate uint64_t tu_nsig; /* signals received */ 647c478bd9Sstevel@tonic-gate uint64_t tu_nswp; /* swaps */ 657c478bd9Sstevel@tonic-gate uint64_t tu_nscl; /* system calls */ 667c478bd9Sstevel@tonic-gate uint64_t tu_startsec; /* start time (seconds) */ 677c478bd9Sstevel@tonic-gate uint64_t tu_startnsec; /* start time (nanoseconds) */ 687c478bd9Sstevel@tonic-gate uint64_t tu_finishsec; /* finish time (seconds) */ 697c478bd9Sstevel@tonic-gate uint64_t tu_finishnsec; /* finish time (nanoseconds) */ 707c478bd9Sstevel@tonic-gate taskid_t tu_anctaskid; /* ancestor task's ID */ 717c478bd9Sstevel@tonic-gate } task_usage_t; 727c478bd9Sstevel@tonic-gate 737c478bd9Sstevel@tonic-gate typedef struct proc_usage { 747c478bd9Sstevel@tonic-gate uint64_t pu_minflt; /* minor faults */ 757c478bd9Sstevel@tonic-gate uint64_t pu_majflt; /* major faults */ 767c478bd9Sstevel@tonic-gate uint64_t pu_sndmsg; /* messages sent */ 777c478bd9Sstevel@tonic-gate uint64_t pu_rcvmsg; /* messages received */ 787c478bd9Sstevel@tonic-gate uint64_t pu_ioch; /* characters read and written */ 797c478bd9Sstevel@tonic-gate uint64_t pu_iblk; /* input blocks */ 807c478bd9Sstevel@tonic-gate uint64_t pu_oblk; /* output blocks */ 817c478bd9Sstevel@tonic-gate uint64_t pu_vcsw; /* voluntary context switches */ 827c478bd9Sstevel@tonic-gate uint64_t pu_icsw; /* involuntary context switches */ 837c478bd9Sstevel@tonic-gate uint64_t pu_nsig; /* signals received */ 847c478bd9Sstevel@tonic-gate uint64_t pu_nswp; /* swaps */ 857c478bd9Sstevel@tonic-gate uint64_t pu_nscl; /* system calls */ 867c478bd9Sstevel@tonic-gate uint64_t pu_utimesec; /* user time (seconds) */ 877c478bd9Sstevel@tonic-gate uint64_t pu_utimensec; /* user time (nanoseconds) */ 887c478bd9Sstevel@tonic-gate uint64_t pu_stimesec; /* system time (seconds) */ 897c478bd9Sstevel@tonic-gate uint64_t pu_stimensec; /* system time (nanoseconds) */ 907c478bd9Sstevel@tonic-gate uint64_t pu_startsec; /* start time (seconds) */ 917c478bd9Sstevel@tonic-gate uint64_t pu_startnsec; /* start time (nanoseconds) */ 927c478bd9Sstevel@tonic-gate uint64_t pu_finishsec; /* finish time (seconds) */ 937c478bd9Sstevel@tonic-gate uint64_t pu_finishnsec; /* finish time (nanoseconds) */ 947c478bd9Sstevel@tonic-gate uint64_t pu_mem_rss_avg; /* average RSS (K) */ 957c478bd9Sstevel@tonic-gate uint64_t pu_mem_rss_max; /* peak RSS (K) */ 967c478bd9Sstevel@tonic-gate 977c478bd9Sstevel@tonic-gate pid_t pu_pid; /* process ID */ 987c478bd9Sstevel@tonic-gate uid_t pu_ruid; /* user ID */ 997c478bd9Sstevel@tonic-gate gid_t pu_rgid; /* group ID */ 1007c478bd9Sstevel@tonic-gate projid_t pu_projid; /* project ID */ 1017c478bd9Sstevel@tonic-gate taskid_t pu_taskid; /* task ID */ 1027c478bd9Sstevel@tonic-gate uint32_t pu_acflag; /* accounting flags */ 1037c478bd9Sstevel@tonic-gate char *pu_command; /* command string */ 1047c478bd9Sstevel@tonic-gate uint32_t pu_major; /* major number of controlling tty */ 1057c478bd9Sstevel@tonic-gate uint32_t pu_minor; /* minor number of controlling tty */ 1067c478bd9Sstevel@tonic-gate int pu_wstat; /* wait() status */ 1077c478bd9Sstevel@tonic-gate pid_t pu_ancpid; /* ancestor process's ID */ 1087c478bd9Sstevel@tonic-gate char pu_zonename[ZONENAME_MAX]; /* Zone name */ 1097c478bd9Sstevel@tonic-gate char pu_nodename[_SYS_NMLN]; 1107c478bd9Sstevel@tonic-gate } proc_usage_t; 1117c478bd9Sstevel@tonic-gate 1127c478bd9Sstevel@tonic-gate typedef struct flow_usage { 1137c478bd9Sstevel@tonic-gate uint32_t fu_saddr[4]; /* source address */ 1147c478bd9Sstevel@tonic-gate uint32_t fu_daddr[4]; /* remote address */ 1157c478bd9Sstevel@tonic-gate uint8_t fu_protocol; /* protocol type */ 1167c478bd9Sstevel@tonic-gate uint16_t fu_sport; /* source port */ 1177c478bd9Sstevel@tonic-gate uint16_t fu_dport; /* remote port */ 1187c478bd9Sstevel@tonic-gate uint8_t fu_dsfield; /* DS field */ 1197c478bd9Sstevel@tonic-gate uint32_t fu_nbytes; /* number of bytes (incl. IP header) */ 1207c478bd9Sstevel@tonic-gate uint32_t fu_npackets; /* number of packets */ 1217c478bd9Sstevel@tonic-gate uint64_t fu_ctime; /* creation time for this item */ 1227c478bd9Sstevel@tonic-gate uint64_t fu_lseen; /* when the last item of this desc. was seen */ 1237c478bd9Sstevel@tonic-gate projid_t fu_projid; /* project ID */ 1247c478bd9Sstevel@tonic-gate uid_t fu_userid; /* user ID */ 1257c478bd9Sstevel@tonic-gate boolean_t fu_isv4; /* to extract the correct l/r-addr */ 1267c478bd9Sstevel@tonic-gate char *fu_aname; /* action instance name */ 1277c478bd9Sstevel@tonic-gate } flow_usage_t; 1287c478bd9Sstevel@tonic-gate 129*da14cebeSEric Cheng #define EX_NET_LNDESC_REC 1 130*da14cebeSEric Cheng #define EX_NET_FLDESC_REC 2 131*da14cebeSEric Cheng #define EX_NET_LNSTAT_REC 3 132*da14cebeSEric Cheng #define EX_NET_FLSTAT_REC 4 133*da14cebeSEric Cheng 134*da14cebeSEric Cheng typedef struct net_stat_s { 135*da14cebeSEric Cheng char *ns_name; 136*da14cebeSEric Cheng uint64_t ns_ibytes; 137*da14cebeSEric Cheng uint64_t ns_obytes; 138*da14cebeSEric Cheng uint64_t ns_ipackets; 139*da14cebeSEric Cheng uint64_t ns_opackets; 140*da14cebeSEric Cheng uint64_t ns_ierrors; 141*da14cebeSEric Cheng uint64_t ns_oerrors; 142*da14cebeSEric Cheng boolean_t ns_isref; 143*da14cebeSEric Cheng } net_stat_t; 144*da14cebeSEric Cheng 145*da14cebeSEric Cheng typedef struct net_desc_s { 146*da14cebeSEric Cheng char *nd_name; 147*da14cebeSEric Cheng char *nd_devname; 148*da14cebeSEric Cheng uchar_t nd_ehost[6]; 149*da14cebeSEric Cheng uchar_t nd_edest[6]; 150*da14cebeSEric Cheng ushort_t nd_vlan_tpid; 151*da14cebeSEric Cheng ushort_t nd_vlan_tci; 152*da14cebeSEric Cheng ushort_t nd_sap; 153*da14cebeSEric Cheng ushort_t nd_priority; 154*da14cebeSEric Cheng uint64_t nd_bw_limit; 155*da14cebeSEric Cheng uint32_t nd_saddr[4]; 156*da14cebeSEric Cheng uint32_t nd_daddr[4]; 157*da14cebeSEric Cheng boolean_t nd_isv4; 158*da14cebeSEric Cheng uint16_t nd_sport; 159*da14cebeSEric Cheng uint16_t nd_dport; 160*da14cebeSEric Cheng uint8_t nd_protocol; 161*da14cebeSEric Cheng uint8_t nd_dsfield; 162*da14cebeSEric Cheng int nd_type; 163*da14cebeSEric Cheng } net_desc_t; 164*da14cebeSEric Cheng 1657c478bd9Sstevel@tonic-gate extern void exacct_order16(uint16_t *); 1667c478bd9Sstevel@tonic-gate extern void exacct_order32(uint32_t *); 1677c478bd9Sstevel@tonic-gate extern void exacct_order64(uint64_t *); 1687c478bd9Sstevel@tonic-gate 1697c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1707c478bd9Sstevel@tonic-gate } 1717c478bd9Sstevel@tonic-gate #endif 1727c478bd9Sstevel@tonic-gate 1737c478bd9Sstevel@tonic-gate #endif /* _SYS_EXACCT_IMPL_H */ 174