]> git.proxmox.com Git - mirror_frr.git/blob - ldpd/log.c
ldpd: split log.c into two files
[mirror_frr.git] / ldpd / log.c
1 /* $OpenBSD$ */
2
3 /*
4 * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <zebra.h>
20
21 #include "ldpd.h"
22 #include "ldpe.h"
23 #include "lde.h"
24 #include "log.h"
25
26 #include <lib/log.h>
27 #include <lib/log_int.h>
28
29 const char *log_procname;
30
31 void
32 logit(int pri, const char *fmt, ...)
33 {
34 va_list ap;
35
36 va_start(ap, fmt);
37 vlog(pri, fmt, ap);
38 va_end(ap);
39 }
40
41 void
42 vlog(int pri, const char *fmt, va_list ap)
43 {
44 char buf[1024];
45
46 switch (ldpd_process) {
47 case PROC_LDE_ENGINE:
48 vsnprintf(buf, sizeof(buf), fmt, ap);
49 lde_imsg_compose_parent(IMSG_LOG, pri, buf, strlen(buf) + 1);
50 break;
51 case PROC_LDP_ENGINE:
52 vsnprintf(buf, sizeof(buf), fmt, ap);
53 ldpe_imsg_compose_parent(IMSG_LOG, pri, buf, strlen(buf) + 1);
54 break;
55 case PROC_MAIN:
56 vzlog(pri, fmt, ap);
57 break;
58 }
59 }
60
61 void
62 log_warn(const char *emsg, ...)
63 {
64 char *nfmt;
65 va_list ap;
66
67 /* best effort to even work in out of memory situations */
68 if (emsg == NULL)
69 logit(LOG_CRIT, "%s", strerror(errno));
70 else {
71 va_start(ap, emsg);
72
73 if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
74 /* we tried it... */
75 vlog(LOG_CRIT, emsg, ap);
76 logit(LOG_CRIT, "%s", strerror(errno));
77 } else {
78 vlog(LOG_CRIT, nfmt, ap);
79 free(nfmt);
80 }
81 va_end(ap);
82 }
83 }
84
85 void
86 log_warnx(const char *emsg, ...)
87 {
88 va_list ap;
89
90 va_start(ap, emsg);
91 vlog(LOG_CRIT, emsg, ap);
92 va_end(ap);
93 }
94
95 void
96 log_info(const char *emsg, ...)
97 {
98 va_list ap;
99
100 va_start(ap, emsg);
101 vlog(LOG_INFO, emsg, ap);
102 va_end(ap);
103 }
104
105 void
106 log_notice(const char *emsg, ...)
107 {
108 va_list ap;
109
110 va_start(ap, emsg);
111 vlog(LOG_NOTICE, emsg, ap);
112 va_end(ap);
113 }
114
115 void
116 log_debug(const char *emsg, ...)
117 {
118 va_list ap;
119
120 va_start(ap, emsg);
121 vlog(LOG_DEBUG, emsg, ap);
122 va_end(ap);
123 }
124
125 void
126 fatal(const char *emsg)
127 {
128 if (emsg == NULL)
129 logit(LOG_CRIT, "fatal in %s: %s", log_procname,
130 strerror(errno));
131 else
132 if (errno)
133 logit(LOG_CRIT, "fatal in %s: %s: %s",
134 log_procname, emsg, strerror(errno));
135 else
136 logit(LOG_CRIT, "fatal in %s: %s",
137 log_procname, emsg);
138
139 exit(1);
140 }
141
142 void
143 fatalx(const char *emsg)
144 {
145 errno = 0;
146 fatal(emsg);
147 }