]> git.proxmox.com Git - mirror_frr.git/blame - ldpd/log.c
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / ldpd / log.c
CommitLineData
acddc0ed 1// SPDX-License-Identifier: ISC
8429abe0
RW
2/* $OpenBSD$ */
3
4/*
5 * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
8429abe0
RW
6 */
7
eac6e3f0 8#include <zebra.h>
8429abe0
RW
9
10#include "ldpd.h"
11#include "ldpe.h"
12#include "lde.h"
13#include "log.h"
5f004539 14#include "printfrr.h"
8429abe0 15
eac6e3f0 16#include <lib/log.h>
eac6e3f0 17
fa68f9da 18const char *log_procname;
8429abe0
RW
19
20void
21logit(int pri, const char *fmt, ...)
22{
23 va_list ap;
24
25 va_start(ap, fmt);
26 vlog(pri, fmt, ap);
27 va_end(ap);
28}
29
eac6e3f0 30void
8429abe0
RW
31vlog(int pri, const char *fmt, va_list ap)
32{
eac6e3f0 33 char buf[1024];
8429abe0 34
eac6e3f0
RW
35 switch (ldpd_process) {
36 case PROC_LDE_ENGINE:
5f004539 37 vsnprintfrr(buf, sizeof(buf), fmt, ap);
f2232fdf
RW
38 lde_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
39 strlen(buf) + 1);
eac6e3f0
RW
40 break;
41 case PROC_LDP_ENGINE:
5f004539 42 vsnprintfrr(buf, sizeof(buf), fmt, ap);
f2232fdf
RW
43 ldpe_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
44 strlen(buf) + 1);
eac6e3f0
RW
45 break;
46 case PROC_MAIN:
bb85d700 47 vzlog(pri, fmt, ap);
eac6e3f0
RW
48 break;
49 }
8429abe0
RW
50}
51
52void
53log_warn(const char *emsg, ...)
54{
55 char *nfmt;
56 va_list ap;
57
58 /* best effort to even work in out of memory situations */
59 if (emsg == NULL)
a9916d2b 60 logit(LOG_ERR, "%s", strerror(errno));
8429abe0
RW
61 else {
62 va_start(ap, emsg);
63
64 if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
65 /* we tried it... */
a9916d2b
RW
66 vlog(LOG_ERR, emsg, ap);
67 logit(LOG_ERR, "%s", strerror(errno));
8429abe0 68 } else {
c84e5187
DL
69#pragma GCC diagnostic push
70#pragma GCC diagnostic ignored "-Wformat-nonliteral"
71 /* format extended above */
a9916d2b 72 vlog(LOG_ERR, nfmt, ap);
c84e5187 73#pragma GCC diagnostic pop
8429abe0
RW
74 free(nfmt);
75 }
76 va_end(ap);
77 }
78}
79
80void
81log_warnx(const char *emsg, ...)
82{
83 va_list ap;
84
85 va_start(ap, emsg);
a9916d2b 86 vlog(LOG_ERR, emsg, ap);
8429abe0
RW
87 va_end(ap);
88}
89
90void
91log_info(const char *emsg, ...)
92{
93 va_list ap;
94
95 va_start(ap, emsg);
96 vlog(LOG_INFO, emsg, ap);
97 va_end(ap);
98}
99
eac6e3f0
RW
100void
101log_notice(const char *emsg, ...)
102{
103 va_list ap;
104
105 va_start(ap, emsg);
106 vlog(LOG_NOTICE, emsg, ap);
107 va_end(ap);
108}
109
8429abe0
RW
110void
111log_debug(const char *emsg, ...)
112{
113 va_list ap;
114
eac6e3f0
RW
115 va_start(ap, emsg);
116 vlog(LOG_DEBUG, emsg, ap);
117 va_end(ap);
8429abe0
RW
118}
119
120void
121fatal(const char *emsg)
122{
123 if (emsg == NULL)
fa68f9da 124 logit(LOG_CRIT, "fatal in %s: %s", log_procname,
8429abe0
RW
125 strerror(errno));
126 else
127 if (errno)
128 logit(LOG_CRIT, "fatal in %s: %s: %s",
fa68f9da 129 log_procname, emsg, strerror(errno));
8429abe0
RW
130 else
131 logit(LOG_CRIT, "fatal in %s: %s",
fa68f9da 132 log_procname, emsg);
8429abe0
RW
133
134 exit(1);
135}
136
137void
138fatalx(const char *emsg)
139{
140 errno = 0;
141 fatal(emsg);
142}