]> git.proxmox.com Git - mirror_frr.git/blame - ldpd/log.c
ldpd: split log.c into two files
[mirror_frr.git] / ldpd / log.c
CommitLineData
8429abe0
RW
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
eac6e3f0 19#include <zebra.h>
8429abe0
RW
20
21#include "ldpd.h"
22#include "ldpe.h"
23#include "lde.h"
24#include "log.h"
25
eac6e3f0 26#include <lib/log.h>
deaa50db 27#include <lib/log_int.h>
eac6e3f0 28
fa68f9da 29const char *log_procname;
8429abe0
RW
30
31void
32logit(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
eac6e3f0 41void
8429abe0
RW
42vlog(int pri, const char *fmt, va_list ap)
43{
eac6e3f0 44 char buf[1024];
8429abe0 45
eac6e3f0
RW
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:
bb85d700 56 vzlog(pri, fmt, ap);
eac6e3f0
RW
57 break;
58 }
8429abe0
RW
59}
60
61void
62log_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
85void
86log_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
95void
96log_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
eac6e3f0
RW
105void
106log_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
8429abe0
RW
115void
116log_debug(const char *emsg, ...)
117{
118 va_list ap;
119
eac6e3f0
RW
120 va_start(ap, emsg);
121 vlog(LOG_DEBUG, emsg, ap);
122 va_end(ap);
8429abe0
RW
123}
124
125void
126fatal(const char *emsg)
127{
128 if (emsg == NULL)
fa68f9da 129 logit(LOG_CRIT, "fatal in %s: %s", log_procname,
8429abe0
RW
130 strerror(errno));
131 else
132 if (errno)
133 logit(LOG_CRIT, "fatal in %s: %s: %s",
fa68f9da 134 log_procname, emsg, strerror(errno));
8429abe0
RW
135 else
136 logit(LOG_CRIT, "fatal in %s: %s",
fa68f9da 137 log_procname, emsg);
8429abe0
RW
138
139 exit(1);
140}
141
142void
143fatalx(const char *emsg)
144{
145 errno = 0;
146 fatal(emsg);
147}