1/*
2 * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
29/*
30 * Copyright (c) 1982, 1986, 1988, 1993
31 *	The Regents of the University of California.  All rights reserved.
32 *
33 * Redistribution and use in source and binary forms, with or without
34 * modification, are permitted provided that the following conditions
35 * are met:
36 * 1. Redistributions of source code must retain the above copyright
37 *    notice, this list of conditions and the following disclaimer.
38 * 2. Redistributions in binary form must reproduce the above copyright
39 *    notice, this list of conditions and the following disclaimer in the
40 *    documentation and/or other materials provided with the distribution.
41 * 3. All advertising materials mentioning features or use of this software
42 *    must display the following acknowledgement:
43 *	This product includes software developed by the University of
44 *	California, Berkeley and its contributors.
45 * 4. Neither the name of the University nor the names of its contributors
46 *    may be used to endorse or promote products derived from this software
47 *    without specific prior written permission.
48 *
49 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
50 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
52 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
55 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
56 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
57 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
58 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59 * SUCH DAMAGE.
60 *
61 *	@(#)syslog.h	8.1 (Berkeley) 6/2/93
62 */
63
64#ifndef	_SYS_SYSLOG_H_
65#define _SYS_SYSLOG_H_
66
67#include <sys/appleapiopts.h>
68#include <sys/cdefs.h>
69
70#define	_PATH_LOG	"/var/run/syslog"
71
72/*
73 * priorities/facilities are encoded into a single 32-bit quantity, where the
74 * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
75 * (0-big number).  Both the priorities and the facilities map roughly
76 * one-to-one to strings in the syslogd(8) source code.  This mapping is
77 * included in this file.
78 *
79 * priorities (these are ordered)
80 */
81#define	LOG_EMERG	0	/* system is unusable */
82#define	LOG_ALERT	1	/* action must be taken immediately */
83#define	LOG_CRIT	2	/* critical conditions */
84#define	LOG_ERR		3	/* error conditions */
85#define	LOG_WARNING	4	/* warning conditions */
86#define	LOG_NOTICE	5	/* normal but significant condition */
87#define	LOG_INFO	6	/* informational */
88#define	LOG_DEBUG	7	/* debug-level messages */
89
90#define	LOG_PRIMASK	0x07	/* mask to extract priority part (internal) */
91				/* extract priority */
92#define	LOG_PRI(p)	((p) & LOG_PRIMASK)
93#define	LOG_MAKEPRI(fac, pri)	(((fac) << 3) | (pri))
94
95#ifdef SYSLOG_NAMES
96#define	INTERNAL_NOPRI	0x10	/* the "no priority" priority */
97				/* mark "facility" */
98#define	INTERNAL_MARK	LOG_MAKEPRI(LOG_NFACILITIES, 0)
99typedef struct _code {
100	char	*c_name;
101	int	c_val;
102} CODE;
103
104CODE prioritynames[] = {
105	{ "alert",	LOG_ALERT },
106	{ "crit",	LOG_CRIT },
107	{ "debug",	LOG_DEBUG },
108	{ "emerg",	LOG_EMERG },
109	{ "err",	LOG_ERR },
110	{ "error",	LOG_ERR },		/* DEPRECATED */
111	{ "info",	LOG_INFO },
112	{ "none",	INTERNAL_NOPRI },	/* INTERNAL */
113	{ "notice",	LOG_NOTICE },
114	{ "panic", 	LOG_EMERG },		/* DEPRECATED */
115	{ "warn",	LOG_WARNING },		/* DEPRECATED */
116	{ "warning",	LOG_WARNING },
117	{ 0,		-1 }
118};
119#endif
120
121/* facility codes */
122#define	LOG_KERN		(0<<3)	/* kernel messages */
123#define	LOG_USER		(1<<3)	/* random user-level messages */
124#define	LOG_MAIL		(2<<3)	/* mail system */
125#define	LOG_DAEMON		(3<<3)	/* system daemons */
126#define	LOG_AUTH		(4<<3)	/* security/authorization messages */
127#define	LOG_SYSLOG		(5<<3)	/* messages generated internally by syslogd */
128#define	LOG_LPR			(6<<3)	/* line printer subsystem */
129#define	LOG_NEWS		(7<<3)	/* network news subsystem */
130#define	LOG_UUCP		(8<<3)	/* UUCP subsystem */
131#define	LOG_CRON		(9<<3)	/* clock daemon */
132#define	LOG_AUTHPRIV 	(10<<3)	/* security/authorization messages (private) */
133#define	LOG_FTP			(11<<3)	/* ftp daemon */
134#define	LOG_NETINFO		(12<<3)	/* NetInfo */
135#define	LOG_REMOTEAUTH	(13<<3)	/* remote authentication/authorization */
136#define	LOG_INSTALL		(14<<3)	/* installer subsystem */
137#define	LOG_RAS			(15<<3)	/* Remote Access Service (VPN / PPP) */
138
139#define	LOG_LOCAL0	(16<<3)	/* reserved for local use */
140#define	LOG_LOCAL1	(17<<3)	/* reserved for local use */
141#define	LOG_LOCAL2	(18<<3)	/* reserved for local use */
142#define	LOG_LOCAL3	(19<<3)	/* reserved for local use */
143#define	LOG_LOCAL4	(20<<3)	/* reserved for local use */
144#define	LOG_LOCAL5	(21<<3)	/* reserved for local use */
145#define	LOG_LOCAL6	(22<<3)	/* reserved for local use */
146#define	LOG_LOCAL7	(23<<3)	/* reserved for local use */
147
148#define	LOG_LAUNCHD		(24<<3)	/* launchd - general bootstrap daemon */
149
150#define	LOG_NFACILITIES	25	/* current number of facilities */
151#define	LOG_FACMASK	0x03f8	/* mask to extract facility part */
152				/* facility of pri */
153#define	LOG_FAC(p)	(((p) & LOG_FACMASK) >> 3)
154
155#ifdef SYSLOG_NAMES
156CODE facilitynames[] = {
157	{ "auth",	LOG_AUTH },
158	{ "authpriv",	LOG_AUTHPRIV },
159	{ "cron", 	LOG_CRON },
160	{ "daemon",	LOG_DAEMON },
161	{ "ftp",	LOG_FTP },
162	{ "install",	LOG_INSTALL },
163	{ "kern",	LOG_KERN },
164	{ "lpr",	LOG_LPR },
165	{ "mail",	LOG_MAIL },
166	{ "mark", 	INTERNAL_MARK },	/* INTERNAL */
167	{ "netinfo",	LOG_NETINFO },
168	{ "ras", 	LOG_RAS },
169	{ "remoteauth", LOG_REMOTEAUTH },
170	{ "news",	LOG_NEWS },
171	{ "security",	LOG_AUTH },		/* DEPRECATED */
172	{ "syslog",	LOG_SYSLOG },
173	{ "user",	LOG_USER },
174	{ "uucp",	LOG_UUCP },
175	{ "local0",	LOG_LOCAL0 },
176	{ "local1",	LOG_LOCAL1 },
177	{ "local2",	LOG_LOCAL2 },
178	{ "local3",	LOG_LOCAL3 },
179	{ "local4",	LOG_LOCAL4 },
180	{ "local5",	LOG_LOCAL5 },
181	{ "local6",	LOG_LOCAL6 },
182	{ "local7",	LOG_LOCAL7 },
183	{ "launchd", 	LOG_LAUNCHD },
184	{ 0,		-1 }
185};
186#endif
187
188#ifdef KERNEL
189#ifdef __APPLE_API_PRIVATE
190#define	LOG_PRINTF	-1	/* pseudo-priority to indicate use of printf */
191#endif /* __APPLE_API_PRIVATE */
192#endif
193
194/*
195 * arguments to setlogmask.
196 */
197#define	LOG_MASK(pri)	(1 << (pri))		/* mask for one priority */
198#define	LOG_UPTO(pri)	((1 << ((pri)+1)) - 1)	/* all priorities through pri */
199
200/*
201 * Option flags for openlog.
202 *
203 * LOG_ODELAY no longer does anything.
204 * LOG_NDELAY is the inverse of what it used to be.
205 */
206#define	LOG_PID		0x01	/* log the pid with each message */
207#define	LOG_CONS	0x02	/* log on the console if errors in sending */
208#define	LOG_ODELAY	0x04	/* delay open until first syslog() (default) */
209#define	LOG_NDELAY	0x08	/* don't delay open */
210#define	LOG_NOWAIT	0x10	/* don't wait for console forks: DEPRECATED */
211#define	LOG_PERROR	0x20	/* log to stderr as well */
212
213#ifndef KERNEL
214#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
215#include <sys/_types.h>		/* for __darwin_va_list */
216#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
217
218__BEGIN_DECLS
219void	closelog(void);
220void	openlog(const char *, int, int);
221int	setlogmask(int);
222void	syslog(int, const char *, ...) __DARWIN_LDBL_COMPAT(syslog);
223#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
224void	vsyslog(int, const char *, __darwin_va_list) __DARWIN_LDBL_COMPAT(vsyslog);
225#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
226__END_DECLS
227
228#else /* !KERNEL */
229#ifdef __APPLE_API_OBSOLETE
230/*
231 * bit field descriptions for printf %r and %R formats
232 */
233
234/*
235 * printf("%r %R", val, reg_descp);
236 * struct reg_desc *reg_descp;
237 *
238 * the %r and %R formats allow formatted output of bit fields.
239 * reg_descp points to an array of reg_desc structures, each element of the
240 * array describes a range of bits within val.  the array should have a
241 * final element with all structure elements 0.
242 * %r outputs a string of the format "<bit field descriptions>"
243 * %R outputs a string of the format "0x%x<bit field descriptions>"
244 *
245 * The fields in a reg_desc are:
246 *	unsigned rd_mask;	An appropriate mask to isolate the bit field
247 *				within a word, and'ed with val
248 *
249 *	int rd_shift;		A shift amount to be done to the isolated
250 *				bit field.  done before printing the isolate
251 *				bit field with rd_format and before searching
252 *				for symbolic value names in rd_values
253 *
254 *	char *rd_name;		If non-null, a bit field name to label any
255 *				out from rd_format or searching rd_values.
256 *				if neither rd_format or rd_values is non-null
257 *				rd_name is printed only if the isolated
258 *				bit field is non-null.
259 *
260 *	char *rd_format;	If non-null, the shifted bit field value
261 *				is printed using this format.
262 *
263 *	struct reg_values *rd_values;	If non-null, a pointer to a table
264 *				matching numeric values with symbolic names.
265 *				rd_values are searched and the symbolic
266 *				value is printed if a match is found, if no
267 *				match is found "???" is printed.
268 *
269 * printf("%n %N", val, reg_valuesp);
270 * struct reg_values *reg_valuesp;
271 *
272 * the %n and %N formats allow formatted output of symbolic constants
273 * Reg_valuesp is a pointer to an array of struct reg_values which pairs
274 * numeric values (rv_value) with symbolic names (rv_name).  The array is
275 * terminated with a reg_values entry that has a null pointer for the
276 * rv_name field.  When %n or %N is used rd_values are searched and the
277 * symbolic value is printed if a match is found, if no match is found
278 * "???" is printed.
279 *
280 * printf("%C", val);
281 * int val;
282 *
283 * the %C format prints an int as a 4 character string.
284 * The most significant byte of the int is printed first, the least
285 * significant byte is printed last.
286 */
287
288/*
289 * register values
290 * map between numeric values and symbolic values
291 */
292struct reg_values {
293	unsigned rv_value;
294	char *rv_name;
295};
296
297/*
298 * register descriptors are used for formatted prints of register values
299 * rd_mask and rd_shift must be defined, other entries may be null
300 */
301struct reg_desc {
302	unsigned rd_mask;	/* mask to extract field */
303	int rd_shift;		/* shift for extracted value, - >>, + << */
304	char *rd_name;		/* field name */
305	char *rd_format;	/* format to print field */
306	struct reg_values *rd_values;	/* symbolic names of values */
307};
308
309#endif /* __APPLE_API_OBSOLETE */
310
311#include <stdarg.h>
312__BEGIN_DECLS
313void	logpri(int);
314void	log(int, const char *, ...);
315int	vaddlog(const char *, va_list);
316void	logtime(time_t);
317__END_DECLS
318
319#endif /* !KERNEL */
320#endif /* !_SYS_SYSLOG_H_ */
321