Source to machdep/i386/pmon_ipc.h


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
 * Reserved.  This file contains Original Code and/or Modifications of
 * Original Code as defined in and that are subject to the Apple Public
 * Source License Version 1.0 (the 'License').  You may not use this file
 * except in compliance with the License.  Please obtain a copy of the
 * License at http://www.apple.com/publicsource and read it before using
 * this file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License."
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

/*
 * pmon_ipc.h - message structs used by performance monitor
 *
 * History
 * -------
 * 03/21/90	dmitch
 *	Added PMON_SOURCE_FD.
 * 18-Dec-89	dmitch
 *	Created.
 */
 
#import	<sys/types.h>
#import	<sys/message.h>
#import <sys/time_stamp.h>

/*
 * Each logged event is described by one of these structs. The exact 
 * definitions and meanings of each field is application specific; the
 * server which collects this data merely collects raw data.
 *
 * Warning: all fields must be int-aligned. This struct is typed as an
 * array of ints during ipc to maintain word alignment.
 */
struct pmon_event {

	int		source;		/* where event occurred (kernel, 
					 * DPS, etc.). */
	int		event_type;	/* Actual event (page out, disk read,
					 * NXPing(), etc.). Formatted as one
					 * bit out of 32; bits are in the same
					 * format as in the event_type argument
					 * to pmon_target_cntrl(). */
	struct tsval	time;		/* when event occurred */
	int		data1;		/* event-specific descriptors */
	int		data2;
	int		data3;
	
}; /* pmon_event */

typedef	struct pmon_event *pmon_event_t; 

/* 
 * event message. Sent by target to pmon server and from server to client.
 *
 * Each message can contain up to PM_EVENT_MAX event descriptors. All data is 
 * inline.
 *
 * All event message are sent by msg_send(), NOT msg_rpc() to minimize
 * ipc traffic.
 */
struct pmon_event_msg {

	msg_header_t	header;		/* generic message header */
	msg_type_t	ne_type;	/* describes num_events */
	int		num_events;	/* how many pmon_events in this 
					 * message */
	msg_type_t	e_type;		/* describes event */
	struct pmon_event event[1];	/* first event */
};

typedef struct pmon_event_msg *pmon_event_msg_t;

/*
 * control message. Sent by client to pmon server and from pmon server to
 * target. All ipc done with control messages are rpc's to ensure
 * integrity.
 */
#define PMON_STRING_LEN		40

struct pmon_cntrl_msg {

	msg_header_t	header;		/* generic message header */
	msg_type_t	ser_type;	/* describes source, event_type, 
					 * rtn_status */
	int		source;		/* same as pmon_event.source. */
	int		event_type;	/* same as pmon_event.event_type. */
	int		rtn_status;	/* status returned to client */
	msg_type_t	hd_type;	/* describes hostname, devname */
	
	/*
	 * the following two fields are only used for PM_CTL_ENABLE and 
	 * PM_CTL_DISABLE messages.
	 */
	char		hostname[PMON_STRING_LEN];	/* in ASCII */
	char 		devname[PMON_STRING_LEN];	/* in ASCII */
	
	/* 
	 * the following is only used for PM_CONNECT and PM_DISCONNECT
	 * messages.
	 */
	msg_type_t	ep_type;	/* describes event_port */
	port_name_t	event_port;	/* port to which events are to be 
					 * sent. This is a server port for 
					 * target control messages and a client 
					 * port for connect/disconnect 
					 * messages. */
};

typedef struct pmon_cntrl_msg *pmon_cntrl_msg_t;

/* 
 * msg_id values for all pmon messages
 */
#define PM_CTL_ENABLE		0x1300	/* enable events at target level */
#define PM_CTL_DISABLE		0x1301	/* disable events at target level */
#define PM_CTL_CONNECT		0x1302	/* send events to client */
#define PM_CTL_DISCONNECT	0x1303	/* stop sending events to client */
#define PM_EVENT		0x1304	/* event message */

/*
 * Standard sources for known pmon targets
 */
#define	PMON_SOURCE_NULL	0
#define PMON_SOURCE_TEST	1	/* test target */

#define PMON_SOURCE_KERN	2	/* kernel (in general) */
#define PMON_SOURCE_SCSI	3	/* scsi disk driver */
#define PMON_SOURCE_VM		4	/* vm system */
#define PMON_SOURCE_VFS		5	/* file system ops at the VFS level */
#define PMON_SOURCE_UFS		6	/* ufs activity */
#define PMON_SOURCE_NFS		7	/* nfs activity */
#define PMON_SOURCE_IPC		8	/* ipc events */
#define PMON_SOURCE_SCHED	9	/* scheduling activity */
#define PMON_SOURCE_NP		10	/* printer driver */
#define PMON_SOURCE_XP		11	/* default external pager */
#define PMON_SOURCE_NET		12	/* networking in general */
#define PMON_SOURCE_IP		13	/* ip */
#define PMON_SOURCE_TCP		14	/* tcp */
#define PMON_SOURCE_FD		15	/* floppy disk driver */
#define PMON_SOURCE_EV		16	/* ev driver */

#define PMON_SOURCE_DPS		100	/* Display PostScript main thread */
#define PMON_SOURCE_DPS_WORK	101	/* Display PostScript worker thread */

#define PMON_SOURCE_APPKIT	200	/* appkit, in general */

#define PMON_SOURCE_BAD		-1
#define PMON_SOURCES_MAX	300
#define PMON_KERNEL_SOURCES_MAX	100

/*
 * miscellaneous constants
 */
#define PMON_CMSG_SIZE	(sizeof(struct pmon_cntrl_msg))

/* event msg size (hack accounts for kern_msg) */
#define PMON_EMSG_SIZE	(8192 - 44)

#define PM_EVENT_MAX	((PMON_EMSG_SIZE - sizeof(struct pmon_event_msg)) / \
				sizeof(struct pmon_event) + 1)

#define PMON_SERVER_NAME "pmon_server"	/* netname_name_t of pmon server */
					 

/* end of pmon_ipc.h */