summaryrefslogtreecommitdiff
path: root/usr.sbin/ldpd
diff options
context:
space:
mode:
authorSebastian Benoit <benno@cvs.openbsd.org>2017-01-20 12:19:19 +0000
committerSebastian Benoit <benno@cvs.openbsd.org>2017-01-20 12:19:19 +0000
commit40894ea26704129dabb61f6cd38d7923fe901def (patch)
treed5b9784ee8a87aec03681b0b732be8e9aa21a2fb /usr.sbin/ldpd
parentb0f4f969b3aeb2539211fbdb4691aacde9d4330e (diff)
work on making log.c similar in all daemons:
move daemon-local functions into new logmsg.c, and reduce the (mostly whitespace) differences so that log.c's can be diffed easily. removal of log_rtmsg() aproved by claudio@ ok claudio@ krw@
Diffstat (limited to 'usr.sbin/ldpd')
-rw-r--r--usr.sbin/ldpd/Makefile6
-rw-r--r--usr.sbin/ldpd/kroute.c3
-rw-r--r--usr.sbin/ldpd/lde.c3
-rw-r--r--usr.sbin/ldpd/ldpd.c3
-rw-r--r--usr.sbin/ldpd/ldpd.h31
-rw-r--r--usr.sbin/ldpd/ldpe.c3
-rw-r--r--usr.sbin/ldpd/log.c457
-rw-r--r--usr.sbin/ldpd/log.h64
-rw-r--r--usr.sbin/ldpd/logmsg.c423
9 files changed, 495 insertions, 498 deletions
diff --git a/usr.sbin/ldpd/Makefile b/usr.sbin/ldpd/Makefile
index 2e0c948de3e..7875f49bdf8 100644
--- a/usr.sbin/ldpd/Makefile
+++ b/usr.sbin/ldpd/Makefile
@@ -1,10 +1,10 @@
-# $OpenBSD: Makefile,v 1.11 2016/05/23 18:55:21 renato Exp $
+# $OpenBSD: Makefile,v 1.12 2017/01/20 12:19:18 benno Exp $
PROG= ldpd
SRCS= accept.c address.c adjacency.c control.c hello.c init.c interface.c \
keepalive.c kroute.c l2vpn.c labelmapping.c lde.c lde_lib.c ldpd.c \
- ldpe.c log.c neighbor.c notification.c packet.c parse.y pfkey.c \
- printconf.c socket.c util.c
+ ldpe.c log.c logmsg.c neighbor.c notification.c packet.c parse.y \
+ pfkey.c printconf.c socket.c util.c
MAN= ldpd.8 ldpd.conf.5
diff --git a/usr.sbin/ldpd/kroute.c b/usr.sbin/ldpd/kroute.c
index 260eddc651b..fefc57af341 100644
--- a/usr.sbin/ldpd/kroute.c
+++ b/usr.sbin/ldpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.61 2016/06/18 01:25:53 renato Exp $ */
+/* $OpenBSD: kroute.c,v 1.62 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2015, 2016 Renato Westphal <renato@openbsd.org>
@@ -1414,7 +1414,6 @@ rtmsg_process(char *buf, size_t len)
fatalx("rtmsg_process: partial rtm in buffer");
if (rtm->rtm_version != RTM_VERSION)
continue;
- log_rtmsg(rtm->rtm_type);
sa = (struct sockaddr *)(next + rtm->rtm_hdrlen);
get_rtaddrs(rtm->rtm_addrs, sa, rti_info);
diff --git a/usr.sbin/ldpd/lde.c b/usr.sbin/ldpd/lde.c
index b5186a8d816..8eada02827d 100644
--- a/usr.sbin/ldpd/lde.c
+++ b/usr.sbin/ldpd/lde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lde.c,v 1.67 2016/09/02 17:10:34 renato Exp $ */
+/* $OpenBSD: lde.c,v 1.68 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2013, 2016 Renato Westphal <renato@openbsd.org>
@@ -98,6 +98,7 @@ lde(int debug, int verbose)
setproctitle("label decision engine");
ldpd_process = PROC_LDE_ENGINE;
+ log_procname = log_procnames[PROC_LDE_ENGINE];
if ((pw = getpwnam(LDPD_USER)) == NULL)
fatal("getpwnam");
diff --git a/usr.sbin/ldpd/ldpd.c b/usr.sbin/ldpd/ldpd.c
index 718702c9371..d912b8830eb 100644
--- a/usr.sbin/ldpd/ldpd.c
+++ b/usr.sbin/ldpd/ldpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ldpd.c,v 1.59 2016/09/28 14:39:52 krw Exp $ */
+/* $OpenBSD: ldpd.c,v 1.60 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2013, 2016 Renato Westphal <renato@openbsd.org>
@@ -113,6 +113,7 @@ main(int argc, char *argv[])
conffile = CONF_FILE;
ldpd_process = PROC_MAIN;
+ log_procname = log_procnames[ldpd_process];
log_init(1); /* log to stderr until daemonized */
log_verbose(1);
diff --git a/usr.sbin/ldpd/ldpd.h b/usr.sbin/ldpd/ldpd.h
index 8a5f6292fff..b43d576a72a 100644
--- a/usr.sbin/ldpd/ldpd.h
+++ b/usr.sbin/ldpd/ldpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ldpd.h,v 1.80 2016/07/01 23:36:38 renato Exp $ */
+/* $OpenBSD: ldpd.h,v 1.81 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2013, 2016 Renato Westphal <renato@openbsd.org>
@@ -357,6 +357,12 @@ enum ldpd_process {
PROC_LDE_ENGINE
} ldpd_process;
+static const char * const log_procnames[] = {
+ "parent",
+ "ldpe",
+ "lde"
+};
+
enum socket_type {
LDP_SOCKET_DISC,
LDP_SOCKET_EDISC,
@@ -603,4 +609,27 @@ int sock_set_ipv6_mcast_loop(int);
/* printconf.c */
void print_config(struct ldpd_conf *);
+/* logmsg.h */
+struct in6_addr;
+union ldpd_addr;
+struct hello_source;
+struct fec;
+
+const char *log_sockaddr(void *);
+const char *log_in6addr(const struct in6_addr *);
+const char *log_in6addr_scope(const struct in6_addr *, unsigned int);
+const char *log_addr(int, const union ldpd_addr *);
+char *log_label(uint32_t);
+char *log_hello_src(const struct hello_source *);
+const char *log_map(const struct map *);
+const char *log_fec(const struct fec *);
+const char *af_name(int);
+const char *socket_name(int);
+const char *nbr_state_name(int);
+const char *if_state_name(int);
+const char *if_type_name(enum iface_type);
+const char *msg_name(uint16_t);
+const char *status_code_name(uint32_t);
+const char *pw_type_name(uint16_t);
+
#endif /* _LDPD_H_ */
diff --git a/usr.sbin/ldpd/ldpe.c b/usr.sbin/ldpd/ldpe.c
index 218e431fbf7..95fe65a1a8a 100644
--- a/usr.sbin/ldpd/ldpe.c
+++ b/usr.sbin/ldpd/ldpe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ldpe.c,v 1.70 2016/09/02 17:10:34 renato Exp $ */
+/* $OpenBSD: ldpe.c,v 1.71 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2013, 2016 Renato Westphal <renato@openbsd.org>
@@ -78,6 +78,7 @@ ldpe(int debug, int verbose)
setproctitle("ldp engine");
ldpd_process = PROC_LDP_ENGINE;
+ log_procname = log_procnames[ldpd_process];
/* create ldpd control socket outside chroot */
if (control_init() == -1)
diff --git a/usr.sbin/ldpd/log.c b/usr.sbin/ldpd/log.c
index bfce33f804a..fd46cf65969 100644
--- a/usr.sbin/ldpd/log.c
+++ b/usr.sbin/ldpd/log.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.c,v 1.32 2016/09/02 17:08:02 renato Exp $ */
+/* $OpenBSD: log.c,v 1.33 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -16,10 +16,6 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netmpls/mpls.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -29,21 +25,12 @@
#include <netdb.h>
#include <limits.h>
-#include "ldpd.h"
-#include "ldpe.h"
-#include "lde.h"
#include "log.h"
+#include "ldpd.h"
-static const char * const procnames[] = {
- "parent",
- "ldpe",
- "lde"
-};
-
-static void vlog(int, const char *, va_list);
-
-static int debug;
-static int verbose;
+int debug;
+int verbose;
+const char *log_procname;
void
log_init(int n_debug)
@@ -74,7 +61,7 @@ logit(int pri, const char *fmt, ...)
va_end(ap);
}
-static void
+void
vlog(int pri, const char *fmt, va_list ap)
{
char *nfmt;
@@ -153,15 +140,15 @@ void
fatal(const char *emsg)
{
if (emsg == NULL)
- logit(LOG_CRIT, "fatal in %s: %s", procnames[ldpd_process],
+ logit(LOG_CRIT, "fatal in %s: %s", log_procname,
strerror(errno));
else
if (errno)
logit(LOG_CRIT, "fatal in %s: %s: %s",
- procnames[ldpd_process], emsg, strerror(errno));
+ log_procname, emsg, strerror(errno));
else
logit(LOG_CRIT, "fatal in %s: %s",
- procnames[ldpd_process], emsg);
+ log_procname, emsg);
exit(1);
}
@@ -172,429 +159,3 @@ fatalx(const char *emsg)
errno = 0;
fatal(emsg);
}
-
-#define NUM_LOGS 4
-const char *
-log_sockaddr(void *vp)
-{
- static char buf[NUM_LOGS][NI_MAXHOST];
- static int round = 0;
- struct sockaddr *sa = vp;
-
- round = (round + 1) % NUM_LOGS;
-
- if (getnameinfo(sa, sa->sa_len, buf[round], NI_MAXHOST, NULL, 0,
- NI_NUMERICHOST))
- return ("(unknown)");
- else
- return (buf[round]);
-}
-
-const char *
-log_in6addr(const struct in6_addr *addr)
-{
- struct sockaddr_in6 sa_in6;
-
- memset(&sa_in6, 0, sizeof(sa_in6));
- sa_in6.sin6_len = sizeof(sa_in6);
- sa_in6.sin6_family = AF_INET6;
- sa_in6.sin6_addr = *addr;
-
- recoverscope(&sa_in6);
-
- return (log_sockaddr(&sa_in6));
-}
-
-const char *
-log_in6addr_scope(const struct in6_addr *addr, unsigned int ifindex)
-{
- struct sockaddr_in6 sa_in6;
-
- memset(&sa_in6, 0, sizeof(sa_in6));
- sa_in6.sin6_len = sizeof(sa_in6);
- sa_in6.sin6_family = AF_INET6;
- sa_in6.sin6_addr = *addr;
-
- addscope(&sa_in6, ifindex);
-
- return (log_sockaddr(&sa_in6));
-}
-
-const char *
-log_addr(int af, const union ldpd_addr *addr)
-{
- static char buf[NUM_LOGS][INET6_ADDRSTRLEN];
- static int round = 0;
-
- switch (af) {
- case AF_INET:
- round = (round + 1) % NUM_LOGS;
- if (inet_ntop(AF_INET, &addr->v4, buf[round],
- sizeof(buf[round])) == NULL)
- return ("???");
- return (buf[round]);
- case AF_INET6:
- return (log_in6addr(&addr->v6));
- default:
- break;
- }
-
- return ("???");
-}
-
-#define TF_BUFS 4
-#define TF_LEN 32
-
-char *
-log_label(uint32_t label)
-{
- char *buf;
- static char tfbuf[TF_BUFS][TF_LEN]; /* ring buffer */
- static int idx = 0;
-
- buf = tfbuf[idx++];
- if (idx == TF_BUFS)
- idx = 0;
-
- switch (label) {
- case NO_LABEL:
- snprintf(buf, TF_LEN, "-");
- break;
- case MPLS_LABEL_IMPLNULL:
- snprintf(buf, TF_LEN, "imp-null");
- break;
- case MPLS_LABEL_IPV4NULL:
- case MPLS_LABEL_IPV6NULL:
- snprintf(buf, TF_LEN, "exp-null");
- break;
- default:
- snprintf(buf, TF_LEN, "%u", label);
- break;
- }
-
- return (buf);
-}
-
-char *
-log_hello_src(const struct hello_source *src)
-{
- static char buf[64];
-
- switch (src->type) {
- case HELLO_LINK:
- snprintf(buf, sizeof(buf), "iface %s",
- src->link.ia->iface->name);
- break;
- case HELLO_TARGETED:
- snprintf(buf, sizeof(buf), "source %s",
- log_addr(src->target->af, &src->target->addr));
- break;
- }
-
- return (buf);
-}
-
-const char *
-log_map(const struct map *map)
-{
- static char buf[64];
-
- switch (map->type) {
- case MAP_TYPE_WILDCARD:
- if (snprintf(buf, sizeof(buf), "wildcard") < 0)
- return ("???");
- break;
- case MAP_TYPE_PREFIX:
- if (snprintf(buf, sizeof(buf), "%s/%u",
- log_addr(map->fec.prefix.af, &map->fec.prefix.prefix),
- map->fec.prefix.prefixlen) == -1)
- return ("???");
- break;
- case MAP_TYPE_PWID:
- if (snprintf(buf, sizeof(buf), "pwid %u (%s)",
- map->fec.pwid.pwid,
- pw_type_name(map->fec.pwid.type)) == -1)
- return ("???");
- break;
- default:
- return ("???");
- }
-
- return (buf);
-}
-
-const char *
-log_fec(const struct fec *fec)
-{
- static char buf[64];
- union ldpd_addr addr;
-
- switch (fec->type) {
- case FEC_TYPE_IPV4:
- addr.v4 = fec->u.ipv4.prefix;
- if (snprintf(buf, sizeof(buf), "ipv4 %s/%u",
- log_addr(AF_INET, &addr), fec->u.ipv4.prefixlen) == -1)
- return ("???");
- break;
- case FEC_TYPE_IPV6:
- addr.v6 = fec->u.ipv6.prefix;
- if (snprintf(buf, sizeof(buf), "ipv6 %s/%u",
- log_addr(AF_INET6, &addr), fec->u.ipv6.prefixlen) == -1)
- return ("???");
- break;
- case FEC_TYPE_PWID:
- if (snprintf(buf, sizeof(buf),
- "pwid %u (%s) - %s",
- fec->u.pwid.pwid, pw_type_name(fec->u.pwid.type),
- inet_ntoa(fec->u.pwid.lsr_id)) == -1)
- return ("???");
- break;
- default:
- return ("???");
- }
-
- return (buf);
-}
-
-/* names */
-const char *
-af_name(int af)
-{
- switch (af) {
- case AF_INET:
- return ("ipv4");
- case AF_INET6:
- return ("ipv6");
- case AF_MPLS:
- return ("mpls");
- default:
- return ("UNKNOWN");
- }
-}
-
-const char *
-socket_name(int type)
-{
- switch (type) {
- case LDP_SOCKET_DISC:
- return ("discovery");
- case LDP_SOCKET_EDISC:
- return ("extended discovery");
- case LDP_SOCKET_SESSION:
- return ("session");
- default:
- return ("UNKNOWN");
- }
-}
-
-const char *
-nbr_state_name(int state)
-{
- switch (state) {
- case NBR_STA_PRESENT:
- return ("PRESENT");
- case NBR_STA_INITIAL:
- return ("INITIALIZED");
- case NBR_STA_OPENREC:
- return ("OPENREC");
- case NBR_STA_OPENSENT:
- return ("OPENSENT");
- case NBR_STA_OPER:
- return ("OPERATIONAL");
- default:
- return ("UNKNOWN");
- }
-}
-
-const char *
-if_state_name(int state)
-{
- switch (state) {
- case IF_STA_DOWN:
- return ("DOWN");
- case IF_STA_ACTIVE:
- return ("ACTIVE");
- default:
- return ("UNKNOWN");
- }
-}
-
-const char *
-if_type_name(enum iface_type type)
-{
- switch (type) {
- case IF_TYPE_POINTOPOINT:
- return ("POINTOPOINT");
- case IF_TYPE_BROADCAST:
- return ("BROADCAST");
- }
- /* NOTREACHED */
- return ("UNKNOWN");
-}
-
-const char *
-msg_name(uint16_t msg)
-{
- static char buf[16];
-
- switch (msg) {
- case MSG_TYPE_NOTIFICATION:
- return ("notification");
- case MSG_TYPE_HELLO:
- return ("hello");
- case MSG_TYPE_INIT:
- return ("initialization");
- case MSG_TYPE_KEEPALIVE:
- return ("keepalive");
- case MSG_TYPE_ADDR:
- return ("address");
- case MSG_TYPE_ADDRWITHDRAW:
- return ("address withdraw");
- case MSG_TYPE_LABELMAPPING:
- return ("label mapping");
- case MSG_TYPE_LABELREQUEST:
- return ("label request");
- case MSG_TYPE_LABELWITHDRAW:
- return ("label withdraw");
- case MSG_TYPE_LABELRELEASE:
- return ("label release");
- case MSG_TYPE_LABELABORTREQ:
- default:
- snprintf(buf, sizeof(buf), "[%08x]", msg);
- return (buf);
- }
-}
-
-const char *
-status_code_name(uint32_t status)
-{
- static char buf[16];
-
- switch (status) {
- case S_SUCCESS:
- return ("Success");
- case S_BAD_LDP_ID:
- return ("Bad LDP Identifier");
- case S_BAD_PROTO_VER:
- return ("Bad Protocol Version");
- case S_BAD_PDU_LEN:
- return ("Bad PDU Length");
- case S_UNKNOWN_MSG:
- return ("Unknown Message Type");
- case S_BAD_MSG_LEN:
- return ("Bad Message Length");
- case S_UNKNOWN_TLV:
- return ("Unknown TLV");
- case S_BAD_TLV_LEN:
- return ("Bad TLV Length");
- case S_BAD_TLV_VAL:
- return ("Malformed TLV Value");
- case S_HOLDTIME_EXP:
- return ("Hold Timer Expired");
- case S_SHUTDOWN:
- return ("Shutdown");
- case S_LOOP_DETECTED:
- return ("Loop Detected");
- case S_UNKNOWN_FEC:
- return ("Unknown FEC");
- case S_NO_ROUTE:
- return ("No Route");
- case S_NO_LABEL_RES:
- return ("No Label Resources");
- case S_AVAILABLE:
- return ("Label Resources Available");
- case S_NO_HELLO:
- return ("Session Rejected, No Hello");
- case S_PARM_ADV_MODE:
- return ("Rejected Advertisement Mode Parameter");
- case S_MAX_PDU_LEN:
- return ("Rejected Max PDU Length Parameter");
- case S_PARM_L_RANGE:
- return ("Rejected Label Range Parameter");
- case S_KEEPALIVE_TMR:
- return ("KeepAlive Timer Expired");
- case S_LAB_REQ_ABRT:
- return ("Label Request Aborted");
- case S_MISS_MSG:
- return ("Missing Message Parameters");
- case S_UNSUP_ADDR:
- return ("Unsupported Address Family");
- case S_KEEPALIVE_BAD:
- return ("Bad KeepAlive Time");
- case S_INTERN_ERR:
- return ("Internal Error");
- case S_ILLEGAL_CBIT:
- return ("Illegal C-Bit");
- case S_WRONG_CBIT:
- return ("Wrong C-Bit");
- case S_INCPT_BITRATE:
- return ("Incompatible bit-rate");
- case S_CEP_MISCONF:
- return ("CEP-TDM mis-configuration");
- case S_PW_STATUS:
- return ("PW Status");
- case S_UNASSIGN_TAI:
- return ("Unassigned/Unrecognized TAI");
- case S_MISCONF_ERR:
- return ("Generic Misconfiguration Error");
- case S_WITHDRAW_MTHD:
- return ("Label Withdraw PW Status Method");
- case S_TRANS_MISMTCH:
- return ("Transport Connection Mismatch");
- case S_DS_NONCMPLNCE:
- return ("Dual-Stack Noncompliance");
- default:
- snprintf(buf, sizeof(buf), "[%08x]", status);
- return (buf);
- }
-}
-
-const char *
-pw_type_name(uint16_t pw_type)
-{
- static char buf[64];
-
- switch (pw_type) {
- case PW_TYPE_ETHERNET_TAGGED:
- return ("Eth Tagged");
- case PW_TYPE_ETHERNET:
- return ("Ethernet");
- default:
- snprintf(buf, sizeof(buf), "[%0x]", pw_type);
- return (buf);
- }
-}
-
-static char *msgtypes[] = {
- "",
- "RTM_ADD: Add Route",
- "RTM_DELETE: Delete Route",
- "RTM_CHANGE: Change Metrics or flags",
- "RTM_GET: Report Metrics",
- "RTM_LOSING: Kernel Suspects Partitioning",
- "RTM_REDIRECT: Told to use different route",
- "RTM_MISS: Lookup failed on this address",
- "RTM_LOCK: fix specified metrics",
- "RTM_OLDADD: caused by SIOCADDRT",
- "RTM_OLDDEL: caused by SIOCDELRT",
- "RTM_RESOLVE: Route created by cloning",
- "RTM_NEWADDR: address being added to iface",
- "RTM_DELADDR: address being removed from iface",
- "RTM_IFINFO: iface status change",
- "RTM_IFANNOUNCE: iface arrival/departure",
- "RTM_DESYNC: route socket overflow",
-};
-
-void
-log_rtmsg(unsigned char rtm_type)
-{
- if (!(verbose & LDPD_OPT_VERBOSE2))
- return;
-
- if (rtm_type > 0 &&
- rtm_type < sizeof(msgtypes)/sizeof(msgtypes[0]))
- log_debug("kernel message: %s", msgtypes[rtm_type]);
- else
- log_debug("kernel message: rtm_type %d out of range",
- rtm_type);
-}
diff --git a/usr.sbin/ldpd/log.h b/usr.sbin/ldpd/log.h
index ca221e21848..5de6bf8d02e 100644
--- a/usr.sbin/ldpd/log.h
+++ b/usr.sbin/ldpd/log.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.h,v 1.15 2016/09/02 17:08:02 renato Exp $ */
+/* $OpenBSD: log.h,v 1.16 2017/01/20 12:19:18 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -16,48 +16,30 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#ifndef _LOG_H_
-#define _LOG_H_
+#ifndef LOG_H
+#define LOG_H
#include <stdarg.h>
-struct in6_addr;
-union ldpd_addr;
-struct hello_source;
-struct fec;
+extern const char *log_procname;
-void log_init(int);
-void log_verbose(int);
-void logit(int, const char *, ...)
- __attribute__((__format__ (printf, 2, 3)));
-void log_warn(const char *, ...)
- __attribute__((__format__ (printf, 1, 2)));
-void log_warnx(const char *, ...)
- __attribute__((__format__ (printf, 1, 2)));
-void log_info(const char *, ...)
- __attribute__((__format__ (printf, 1, 2)));
-void log_debug(const char *, ...)
- __attribute__((__format__ (printf, 1, 2)));
-void fatal(const char *) __dead
- __attribute__((__format__ (printf, 1, 0)));
-void fatalx(const char *) __dead
- __attribute__((__format__ (printf, 1, 0)));
-const char *log_sockaddr(void *);
-const char *log_in6addr(const struct in6_addr *);
-const char *log_in6addr_scope(const struct in6_addr *, unsigned int);
-const char *log_addr(int, const union ldpd_addr *);
-char *log_label(uint32_t);
-char *log_hello_src(const struct hello_source *);
-const char *log_map(const struct map *);
-const char *log_fec(const struct fec *);
-const char *af_name(int);
-const char *socket_name(int);
-const char *nbr_state_name(int);
-const char *if_state_name(int);
-const char *if_type_name(enum iface_type);
-const char *msg_name(uint16_t);
-const char *status_code_name(uint32_t);
-const char *pw_type_name(uint16_t);
-void log_rtmsg(unsigned char);
+void log_init(int);
+void log_verbose(int);
+void logit(int, const char *, ...)
+ __attribute__((__format__ (printf, 2, 3)));
+void vlog(int, const char *, va_list)
+ __attribute__((__format__ (printf, 2, 0)));
+void log_warn(const char *, ...)
+ __attribute__((__format__ (printf, 1, 2)));
+void log_warnx(const char *, ...)
+ __attribute__((__format__ (printf, 1, 2)));
+void log_info(const char *, ...)
+ __attribute__((__format__ (printf, 1, 2)));
+void log_debug(const char *, ...)
+ __attribute__((__format__ (printf, 1, 2)));
+void fatal(const char *) __dead
+ __attribute__((__format__ (printf, 1, 0)));
+void fatalx(const char *) __dead
+ __attribute__((__format__ (printf, 1, 0)));
-#endif /* _LOG_H_ */
+#endif /* LOG_H */
diff --git a/usr.sbin/ldpd/logmsg.c b/usr.sbin/ldpd/logmsg.c
new file mode 100644
index 00000000000..ab32a89c9cf
--- /dev/null
+++ b/usr.sbin/ldpd/logmsg.c
@@ -0,0 +1,423 @@
+/* $OpenBSD: logmsg.c,v 1.1 2017/01/20 12:19:18 benno Exp $ */
+
+/*
+ * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netmpls/mpls.h>
+#include <stdio.h>
+#include <string.h>
+#include <netdb.h>
+
+#include "ldp.h"
+#include "ldpd.h"
+#include "ldpe.h"
+#include "lde.h"
+
+#define NUM_LOGS 4
+const char *
+log_sockaddr(void *vp)
+{
+ static char buf[NUM_LOGS][NI_MAXHOST];
+ static int round = 0;
+ struct sockaddr *sa = vp;
+
+ round = (round + 1) % NUM_LOGS;
+
+ if (getnameinfo(sa, sa->sa_len, buf[round], NI_MAXHOST, NULL, 0,
+ NI_NUMERICHOST))
+ return ("(unknown)");
+ else
+ return (buf[round]);
+}
+
+const char *
+log_in6addr(const struct in6_addr *addr)
+{
+ struct sockaddr_in6 sa_in6;
+
+ memset(&sa_in6, 0, sizeof(sa_in6));
+ sa_in6.sin6_len = sizeof(sa_in6);
+ sa_in6.sin6_family = AF_INET6;
+ sa_in6.sin6_addr = *addr;
+
+ recoverscope(&sa_in6);
+
+ return (log_sockaddr(&sa_in6));
+}
+
+const char *
+log_in6addr_scope(const struct in6_addr *addr, unsigned int ifindex)
+{
+ struct sockaddr_in6 sa_in6;
+
+ memset(&sa_in6, 0, sizeof(sa_in6));
+ sa_in6.sin6_len = sizeof(sa_in6);
+ sa_in6.sin6_family = AF_INET6;
+ sa_in6.sin6_addr = *addr;
+
+ addscope(&sa_in6, ifindex);
+
+ return (log_sockaddr(&sa_in6));
+}
+
+const char *
+log_addr(int af, const union ldpd_addr *addr)
+{
+ static char buf[NUM_LOGS][INET6_ADDRSTRLEN];
+ static int round = 0;
+
+ switch (af) {
+ case AF_INET:
+ round = (round + 1) % NUM_LOGS;
+ if (inet_ntop(AF_INET, &addr->v4, buf[round],
+ sizeof(buf[round])) == NULL)
+ return ("???");
+ return (buf[round]);
+ case AF_INET6:
+ return (log_in6addr(&addr->v6));
+ default:
+ break;
+ }
+
+ return ("???");
+}
+
+#define TF_BUFS 4
+#define TF_LEN 32
+
+char *
+log_label(uint32_t label)
+{
+ char *buf;
+ static char tfbuf[TF_BUFS][TF_LEN]; /* ring buffer */
+ static int idx = 0;
+
+ buf = tfbuf[idx++];
+ if (idx == TF_BUFS)
+ idx = 0;
+
+ switch (label) {
+ case NO_LABEL:
+ snprintf(buf, TF_LEN, "-");
+ break;
+ case MPLS_LABEL_IMPLNULL:
+ snprintf(buf, TF_LEN, "imp-null");
+ break;
+ case MPLS_LABEL_IPV4NULL:
+ case MPLS_LABEL_IPV6NULL:
+ snprintf(buf, TF_LEN, "exp-null");
+ break;
+ default:
+ snprintf(buf, TF_LEN, "%u", label);
+ break;
+ }
+
+ return (buf);
+}
+
+char *
+log_hello_src(const struct hello_source *src)
+{
+ static char buf[64];
+
+ switch (src->type) {
+ case HELLO_LINK:
+ snprintf(buf, sizeof(buf), "iface %s",
+ src->link.ia->iface->name);
+ break;
+ case HELLO_TARGETED:
+ snprintf(buf, sizeof(buf), "source %s",
+ log_addr(src->target->af, &src->target->addr));
+ break;
+ }
+
+ return (buf);
+}
+
+const char *
+log_map(const struct map *map)
+{
+ static char buf[64];
+
+ switch (map->type) {
+ case MAP_TYPE_WILDCARD:
+ if (snprintf(buf, sizeof(buf), "wildcard") < 0)
+ return ("???");
+ break;
+ case MAP_TYPE_PREFIX:
+ if (snprintf(buf, sizeof(buf), "%s/%u",
+ log_addr(map->fec.prefix.af, &map->fec.prefix.prefix),
+ map->fec.prefix.prefixlen) == -1)
+ return ("???");
+ break;
+ case MAP_TYPE_PWID:
+ if (snprintf(buf, sizeof(buf), "pwid %u (%s)",
+ map->fec.pwid.pwid,
+ pw_type_name(map->fec.pwid.type)) == -1)
+ return ("???");
+ break;
+ default:
+ return ("???");
+ }
+
+ return (buf);
+}
+
+const char *
+log_fec(const struct fec *fec)
+{
+ static char buf[64];
+ union ldpd_addr addr;
+
+ switch (fec->type) {
+ case FEC_TYPE_IPV4:
+ addr.v4 = fec->u.ipv4.prefix;
+ if (snprintf(buf, sizeof(buf), "ipv4 %s/%u",
+ log_addr(AF_INET, &addr), fec->u.ipv4.prefixlen) == -1)
+ return ("???");
+ break;
+ case FEC_TYPE_IPV6:
+ addr.v6 = fec->u.ipv6.prefix;
+ if (snprintf(buf, sizeof(buf), "ipv6 %s/%u",
+ log_addr(AF_INET6, &addr), fec->u.ipv6.prefixlen) == -1)
+ return ("???");
+ break;
+ case FEC_TYPE_PWID:
+ if (snprintf(buf, sizeof(buf),
+ "pwid %u (%s) - %s",
+ fec->u.pwid.pwid, pw_type_name(fec->u.pwid.type),
+ inet_ntoa(fec->u.pwid.lsr_id)) == -1)
+ return ("???");
+ break;
+ default:
+ return ("???");
+ }
+
+ return (buf);
+}
+
+/* names */
+const char *
+af_name(int af)
+{
+ switch (af) {
+ case AF_INET:
+ return ("ipv4");
+ case AF_INET6:
+ return ("ipv6");
+ case AF_MPLS:
+ return ("mpls");
+ default:
+ return ("UNKNOWN");
+ }
+}
+
+const char *
+socket_name(int type)
+{
+ switch (type) {
+ case LDP_SOCKET_DISC:
+ return ("discovery");
+ case LDP_SOCKET_EDISC:
+ return ("extended discovery");
+ case LDP_SOCKET_SESSION:
+ return ("session");
+ default:
+ return ("UNKNOWN");
+ }
+}
+
+const char *
+nbr_state_name(int state)
+{
+ switch (state) {
+ case NBR_STA_PRESENT:
+ return ("PRESENT");
+ case NBR_STA_INITIAL:
+ return ("INITIALIZED");
+ case NBR_STA_OPENREC:
+ return ("OPENREC");
+ case NBR_STA_OPENSENT:
+ return ("OPENSENT");
+ case NBR_STA_OPER:
+ return ("OPERATIONAL");
+ default:
+ return ("UNKNOWN");
+ }
+}
+
+const char *
+if_state_name(int state)
+{
+ switch (state) {
+ case IF_STA_DOWN:
+ return ("DOWN");
+ case IF_STA_ACTIVE:
+ return ("ACTIVE");
+ default:
+ return ("UNKNOWN");
+ }
+}
+
+const char *
+if_type_name(enum iface_type type)
+{
+ switch (type) {
+ case IF_TYPE_POINTOPOINT:
+ return ("POINTOPOINT");
+ case IF_TYPE_BROADCAST:
+ return ("BROADCAST");
+ }
+ /* NOTREACHED */
+ return ("UNKNOWN");
+}
+
+const char *
+msg_name(uint16_t msg)
+{
+ static char buf[16];
+
+ switch (msg) {
+ case MSG_TYPE_NOTIFICATION:
+ return ("notification");
+ case MSG_TYPE_HELLO:
+ return ("hello");
+ case MSG_TYPE_INIT:
+ return ("initialization");
+ case MSG_TYPE_KEEPALIVE:
+ return ("keepalive");
+ case MSG_TYPE_ADDR:
+ return ("address");
+ case MSG_TYPE_ADDRWITHDRAW:
+ return ("address withdraw");
+ case MSG_TYPE_LABELMAPPING:
+ return ("label mapping");
+ case MSG_TYPE_LABELREQUEST:
+ return ("label request");
+ case MSG_TYPE_LABELWITHDRAW:
+ return ("label withdraw");
+ case MSG_TYPE_LABELRELEASE:
+ return ("label release");
+ case MSG_TYPE_LABELABORTREQ:
+ default:
+ snprintf(buf, sizeof(buf), "[%08x]", msg);
+ return (buf);
+ }
+}
+
+const char *
+status_code_name(uint32_t status)
+{
+ static char buf[16];
+
+ switch (status) {
+ case S_SUCCESS:
+ return ("Success");
+ case S_BAD_LDP_ID:
+ return ("Bad LDP Identifier");
+ case S_BAD_PROTO_VER:
+ return ("Bad Protocol Version");
+ case S_BAD_PDU_LEN:
+ return ("Bad PDU Length");
+ case S_UNKNOWN_MSG:
+ return ("Unknown Message Type");
+ case S_BAD_MSG_LEN:
+ return ("Bad Message Length");
+ case S_UNKNOWN_TLV:
+ return ("Unknown TLV");
+ case S_BAD_TLV_LEN:
+ return ("Bad TLV Length");
+ case S_BAD_TLV_VAL:
+ return ("Malformed TLV Value");
+ case S_HOLDTIME_EXP:
+ return ("Hold Timer Expired");
+ case S_SHUTDOWN:
+ return ("Shutdown");
+ case S_LOOP_DETECTED:
+ return ("Loop Detected");
+ case S_UNKNOWN_FEC:
+ return ("Unknown FEC");
+ case S_NO_ROUTE:
+ return ("No Route");
+ case S_NO_LABEL_RES:
+ return ("No Label Resources");
+ case S_AVAILABLE:
+ return ("Label Resources Available");
+ case S_NO_HELLO:
+ return ("Session Rejected, No Hello");
+ case S_PARM_ADV_MODE:
+ return ("Rejected Advertisement Mode Parameter");
+ case S_MAX_PDU_LEN:
+ return ("Rejected Max PDU Length Parameter");
+ case S_PARM_L_RANGE:
+ return ("Rejected Label Range Parameter");
+ case S_KEEPALIVE_TMR:
+ return ("KeepAlive Timer Expired");
+ case S_LAB_REQ_ABRT:
+ return ("Label Request Aborted");
+ case S_MISS_MSG:
+ return ("Missing Message Parameters");
+ case S_UNSUP_ADDR:
+ return ("Unsupported Address Family");
+ case S_KEEPALIVE_BAD:
+ return ("Bad KeepAlive Time");
+ case S_INTERN_ERR:
+ return ("Internal Error");
+ case S_ILLEGAL_CBIT:
+ return ("Illegal C-Bit");
+ case S_WRONG_CBIT:
+ return ("Wrong C-Bit");
+ case S_INCPT_BITRATE:
+ return ("Incompatible bit-rate");
+ case S_CEP_MISCONF:
+ return ("CEP-TDM mis-configuration");
+ case S_PW_STATUS:
+ return ("PW Status");
+ case S_UNASSIGN_TAI:
+ return ("Unassigned/Unrecognized TAI");
+ case S_MISCONF_ERR:
+ return ("Generic Misconfiguration Error");
+ case S_WITHDRAW_MTHD:
+ return ("Label Withdraw PW Status Method");
+ case S_TRANS_MISMTCH:
+ return ("Transport Connection Mismatch");
+ case S_DS_NONCMPLNCE:
+ return ("Dual-Stack Noncompliance");
+ default:
+ snprintf(buf, sizeof(buf), "[%08x]", status);
+ return (buf);
+ }
+}
+
+const char *
+pw_type_name(uint16_t pw_type)
+{
+ static char buf[64];
+
+ switch (pw_type) {
+ case PW_TYPE_ETHERNET_TAGGED:
+ return ("Eth Tagged");
+ case PW_TYPE_ETHERNET:
+ return ("Ethernet");
+ default:
+ snprintf(buf, sizeof(buf), "[%0x]", pw_type);
+ return (buf);
+ }
+}