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, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
23/*	  All Rights Reserved	*/
24
25
26/*
27 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
28 * Use is subject to license terms.
29 */
30
31#ifndef _SYS_STRLOG_H
32#define	_SYS_STRLOG_H
33
34#include <sys/types.h>
35#include <sys/types32.h>
36
37#ifdef	__cplusplus
38extern "C" {
39#endif
40
41/*
42 * Streams Log Driver Interface Definitions
43 */
44
45/*
46 * structure of control portion of log message
47 */
48typedef struct log_ctl {
49	short	mid;
50	short	sid;
51	char 	level;		/* level of message for tracing */
52	short	flags;		/* message disposition */
53#if defined(_LP64) || defined(_I32LPx)
54	clock32_t ltime;	/* time in machine ticks since boot */
55	time32_t ttime;		/* time in seconds since 1970 */
56#else
57	clock_t	ltime;
58	time_t	ttime;
59#endif
60	int	seq_no;		/* sequence number */
61	int	pri;		/* priority = (facility|level) */
62} log_ctl_t;
63
64/*
65 * Public flags for log messages
66 */
67#define	SL_FATAL	0x01	/* indicates fatal error */
68#define	SL_NOTIFY	0x02	/* logger must notify administrator */
69#define	SL_ERROR	0x04	/* include on the error log */
70#define	SL_TRACE	0x08	/* include on the trace log */
71#define	SL_CONSOLE	0x10	/* include on the console log */
72#define	SL_WARN		0x20	/* warning message */
73#define	SL_NOTE		0x40	/* notice message */
74
75/*
76 * Private flags for log messages -- used by internal implementation only
77 */
78#define	SL_CONSONLY	0x1000	/* send message only to /dev/console */
79#define	SL_LOGONLY	0x2000	/* send message only to /var/adm/messages */
80#define	SL_USER		0x4000	/* send message to user's terminal */
81#define	SL_PANICMSG	0x8000	/* message was created while panicking */
82
83/*
84 * Structure defining ids and levels desired by the tracer (I_TRCLOG).
85 */
86typedef struct trace_ids {
87	short	ti_mid;
88	short	ti_sid;
89	int8_t	ti_level;
90} trace_ids_t;
91
92/*
93 * Log Driver I_STR ioctl commands
94 */
95
96#define	LOGCTL		(('L')<<8)
97#define	I_TRCLOG	(LOGCTL|1)	/* process is tracer */
98#define	I_ERRLOG	(LOGCTL|2)	/* process is error logger */
99#define	I_CONSLOG	(LOGCTL|3)	/* process is console logger */
100
101#define	STRLOG_MAKE_MSGID(fmt, msgid)					\
102{									\
103	uchar_t *__cp = (uchar_t *)fmt;					\
104	uchar_t __c;							\
105	uint32_t __id = 0;						\
106	while ((__c = *__cp++) != '\0')					\
107		if (__c >= ' ')						\
108			__id = (__id >> 5) + (__id << 27) + __c;	\
109	msgid = (__id % 899981) + 100000;				\
110}
111
112#ifdef _KERNEL
113
114#ifndef _ASM
115#include <sys/va_list.h>
116#endif
117
118/*PRINTFLIKE5*/
119extern int strlog(short, short, char, unsigned short, char *, ...)
120	__KPRINTFLIKE(5);
121extern int vstrlog(short, short, char, unsigned short, char *, __va_list)
122	__KVPRINTFLIKE(5);
123
124/*
125 * STRLOG(mid,sid,level,flags,fmt,args) should be used for those trace
126 * calls that are only to be made during debugging.
127 */
128#if defined(DEBUG) || defined(__lint)
129#define	STRLOG	strlog
130#else
131#define	STRLOG	0 && strlog
132#endif	/* DEBUG || __lint */
133
134#endif	/* _KERNEL */
135
136#ifdef	__cplusplus
137}
138#endif
139
140#endif	/* _SYS_STRLOG_H */
141