]> git.proxmox.com Git - mirror_frr.git/blob - lib/log.h
2004-11-26 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
[mirror_frr.git] / lib / log.h
1 /* Zebra logging funcions.
2 * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
3 *
4 * This file is part of GNU Zebra.
5 *
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
9 * later version.
10 *
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with GNU Zebra; see the file COPYING. If not, write to the Free
18 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19 * 02111-1307, USA.
20 */
21
22 #ifndef _ZEBRA_LOG_H
23 #define _ZEBRA_LOG_H
24
25 #include <syslog.h>
26
27 #define ZLOG_NOLOG 0x00
28 #define ZLOG_FILE 0x01
29 #define ZLOG_SYSLOG 0x02
30 #define ZLOG_STDOUT 0x04
31 #define ZLOG_STDERR 0x08
32
33 typedef enum
34 {
35 ZLOG_NONE,
36 ZLOG_DEFAULT,
37 ZLOG_ZEBRA,
38 ZLOG_RIP,
39 ZLOG_BGP,
40 ZLOG_OSPF,
41 ZLOG_RIPNG,
42 ZLOG_OSPF6,
43 ZLOG_ISIS,
44 ZLOG_MASC
45 } zlog_proto_t;
46
47 struct zlog
48 {
49 const char *ident;
50 zlog_proto_t protocol;
51 int flags;
52 FILE *fp;
53 char *filename;
54 int syslog;
55 int stat;
56 int connected;
57 int maskpri; /* as per syslog setlogmask */
58 int priority; /* as per syslog priority */
59 int facility; /* as per syslog facility */
60 int record_priority;
61 };
62
63 /* Message structure. */
64 struct message
65 {
66 int key;
67 const char *str;
68 };
69
70 /* Default logging strucutre. */
71 extern struct zlog *zlog_default;
72
73 /* Open zlog function */
74 struct zlog *openzlog (const char *, int, zlog_proto_t, int, int);
75
76 /* Close zlog function. */
77 void closezlog (struct zlog *zl);
78
79 /* GCC have printf type attribute check. */
80 #ifdef __GNUC__
81 #define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
82 #else
83 #define PRINTF_ATTRIBUTE(a,b)
84 #endif /* __GNUC__ */
85
86 /* Generic function for zlog. */
87 void zlog (struct zlog *zl, int priority, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
88
89 /* Handy zlog functions. */
90 void zlog_err (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
91 void zlog_warn (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
92 void zlog_info (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
93 void zlog_notice (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
94 void zlog_debug (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
95
96 /* For bgpd's peer oriented log. */
97 void plog_err (struct zlog *, const char *format, ...);
98 void plog_warn (struct zlog *, const char *format, ...);
99 void plog_info (struct zlog *, const char *format, ...);
100 void plog_notice (struct zlog *, const char *format, ...);
101 void plog_debug (struct zlog *, const char *format, ...);
102
103 /* Set zlog flags. */
104 void zlog_set_flag (struct zlog *zl, int flags);
105 void zlog_reset_flag (struct zlog *zl, int flags);
106
107 /* Set zlog filename. */
108 int zlog_set_file (struct zlog *zl, const char *filename);
109 int zlog_reset_file (struct zlog *zl);
110
111 /* Rotate log. */
112 int zlog_rotate (struct zlog *);
113
114 /* For hackey massage lookup and check */
115 #define LOOKUP(x, y) mes_lookup(x, x ## _max, y)
116
117 const char *lookup (struct message *, int);
118 const char *mes_lookup (struct message *meslist, int max, int index);
119
120 extern const char *zlog_priority[];
121
122 /* Safe version of strerror -- never returns NULL. */
123 extern const char *safe_strerror(int errnum);
124
125 /* To be called when a fatal signal is caught. */
126 extern void zlog_signal(int signo, const char *action);
127
128 /* Log a backtrace. */
129 extern void zlog_backtrace(int priority);
130
131 /* Log a backtrace, but in an async-signal-safe way. Should not be
132 called unless the program is about to exit or abort, since it messes
133 up the state of zlog file pointers. This function needs to be enhanced
134 to support syslog logging. */
135 extern void zlog_backtrace_safe(int priority);
136
137 #endif /* _ZEBRA_LOG_H */