|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * pmon_ipc.h - message structs used by performance monitor
27: *
28: * History
29: * -------
30: * 03/21/90 dmitch
31: * Added PMON_SOURCE_FD.
32: * 18-Dec-89 dmitch
33: * Created.
34: */
35:
36: #import <sys/types.h>
37: #import <sys/message.h>
38: #import <sys/time_stamp.h>
39:
40: /*
41: * Each logged event is described by one of these structs. The exact
42: * definitions and meanings of each field is application specific; the
43: * server which collects this data merely collects raw data.
44: *
45: * Warning: all fields must be int-aligned. This struct is typed as an
46: * array of ints during ipc to maintain word alignment.
47: */
48: struct pmon_event {
49:
50: int source; /* where event occurred (kernel,
51: * DPS, etc.). */
52: int event_type; /* Actual event (page out, disk read,
53: * NXPing(), etc.). Formatted as one
54: * bit out of 32; bits are in the same
55: * format as in the event_type argument
56: * to pmon_target_cntrl(). */
57: struct tsval time; /* when event occurred */
58: int data1; /* event-specific descriptors */
59: int data2;
60: int data3;
61:
62: }; /* pmon_event */
63:
64: typedef struct pmon_event *pmon_event_t;
65:
66: /*
67: * event message. Sent by target to pmon server and from server to client.
68: *
69: * Each message can contain up to PM_EVENT_MAX event descriptors. All data is
70: * inline.
71: *
72: * All event message are sent by msg_send(), NOT msg_rpc() to minimize
73: * ipc traffic.
74: */
75: struct pmon_event_msg {
76:
77: msg_header_t header; /* generic message header */
78: msg_type_t ne_type; /* describes num_events */
79: int num_events; /* how many pmon_events in this
80: * message */
81: msg_type_t e_type; /* describes event */
82: struct pmon_event event[1]; /* first event */
83: };
84:
85: typedef struct pmon_event_msg *pmon_event_msg_t;
86:
87: /*
88: * control message. Sent by client to pmon server and from pmon server to
89: * target. All ipc done with control messages are rpc's to ensure
90: * integrity.
91: */
92: #define PMON_STRING_LEN 40
93:
94: struct pmon_cntrl_msg {
95:
96: msg_header_t header; /* generic message header */
97: msg_type_t ser_type; /* describes source, event_type,
98: * rtn_status */
99: int source; /* same as pmon_event.source. */
100: int event_type; /* same as pmon_event.event_type. */
101: int rtn_status; /* status returned to client */
102: msg_type_t hd_type; /* describes hostname, devname */
103:
104: /*
105: * the following two fields are only used for PM_CTL_ENABLE and
106: * PM_CTL_DISABLE messages.
107: */
108: char hostname[PMON_STRING_LEN]; /* in ASCII */
109: char devname[PMON_STRING_LEN]; /* in ASCII */
110:
111: /*
112: * the following is only used for PM_CONNECT and PM_DISCONNECT
113: * messages.
114: */
115: msg_type_t ep_type; /* describes event_port */
116: port_name_t event_port; /* port to which events are to be
117: * sent. This is a server port for
118: * target control messages and a client
119: * port for connect/disconnect
120: * messages. */
121: };
122:
123: typedef struct pmon_cntrl_msg *pmon_cntrl_msg_t;
124:
125: /*
126: * msg_id values for all pmon messages
127: */
128: #define PM_CTL_ENABLE 0x1300 /* enable events at target level */
129: #define PM_CTL_DISABLE 0x1301 /* disable events at target level */
130: #define PM_CTL_CONNECT 0x1302 /* send events to client */
131: #define PM_CTL_DISCONNECT 0x1303 /* stop sending events to client */
132: #define PM_EVENT 0x1304 /* event message */
133:
134: /*
135: * Standard sources for known pmon targets
136: */
137: #define PMON_SOURCE_NULL 0
138: #define PMON_SOURCE_TEST 1 /* test target */
139:
140: #define PMON_SOURCE_KERN 2 /* kernel (in general) */
141: #define PMON_SOURCE_SCSI 3 /* scsi disk driver */
142: #define PMON_SOURCE_VM 4 /* vm system */
143: #define PMON_SOURCE_VFS 5 /* file system ops at the VFS level */
144: #define PMON_SOURCE_UFS 6 /* ufs activity */
145: #define PMON_SOURCE_NFS 7 /* nfs activity */
146: #define PMON_SOURCE_IPC 8 /* ipc events */
147: #define PMON_SOURCE_SCHED 9 /* scheduling activity */
148: #define PMON_SOURCE_NP 10 /* printer driver */
149: #define PMON_SOURCE_XP 11 /* default external pager */
150: #define PMON_SOURCE_NET 12 /* networking in general */
151: #define PMON_SOURCE_IP 13 /* ip */
152: #define PMON_SOURCE_TCP 14 /* tcp */
153: #define PMON_SOURCE_FD 15 /* floppy disk driver */
154: #define PMON_SOURCE_EV 16 /* ev driver */
155:
156: #define PMON_SOURCE_DPS 100 /* Display PostScript main thread */
157: #define PMON_SOURCE_DPS_WORK 101 /* Display PostScript worker thread */
158:
159: #define PMON_SOURCE_APPKIT 200 /* appkit, in general */
160:
161: #define PMON_SOURCE_BAD -1
162: #define PMON_SOURCES_MAX 300
163: #define PMON_KERNEL_SOURCES_MAX 100
164:
165: /*
166: * miscellaneous constants
167: */
168: #define PMON_CMSG_SIZE (sizeof(struct pmon_cntrl_msg))
169:
170: /* event msg size (hack accounts for kern_msg) */
171: #define PMON_EMSG_SIZE (8192 - 44)
172:
173: #define PM_EVENT_MAX ((PMON_EMSG_SIZE - sizeof(struct pmon_event_msg)) / \
174: sizeof(struct pmon_event) + 1)
175:
176: #define PMON_SERVER_NAME "pmon_server" /* netname_name_t of pmon server */
177:
178:
179: /* end of pmon_ipc.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.