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() approved by claudio@

diff --git usr.sbin/ldpctl/Makefile usr.sbin/ldpctl/Makefile
index 9e915a9bef1..b205e20d329 100644
--- usr.sbin/ldpctl/Makefile
+++ usr.sbin/ldpctl/Makefile
@@ -3,7 +3,7 @@
 .PATH:         ${.CURDIR}/../ldpd
 
 PROG=  ldpctl
-SRCS=  util.c log.c ldpctl.c parser.c
+SRCS=  util.c log.c logmsg.c ldpctl.c parser.c
 CFLAGS+= -Wall
 CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
 CFLAGS+= -Wmissing-declarations
diff --git usr.sbin/ldpd/Makefile usr.sbin/ldpd/Makefile
index 2e0c948de3e..6cc3674c5ce 100644
--- usr.sbin/ldpd/Makefile
+++ usr.sbin/ldpd/Makefile
@@ -3,8 +3,8 @@
 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 usr.sbin/ldpd/kroute.c usr.sbin/ldpd/kroute.c
index 260eddc651b..f9cee6548a0 100644
--- usr.sbin/ldpd/kroute.c
+++ usr.sbin/ldpd/kroute.c
@@ -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 usr.sbin/ldpd/lde.c usr.sbin/ldpd/lde.c
index b5186a8d816..0d57fc23dc2 100644
--- usr.sbin/ldpd/lde.c
+++ usr.sbin/ldpd/lde.c
@@ -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 usr.sbin/ldpd/ldpd.c usr.sbin/ldpd/ldpd.c
index 718702c9371..259efca73d1 100644
--- usr.sbin/ldpd/ldpd.c
+++ usr.sbin/ldpd/ldpd.c
@@ -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 usr.sbin/ldpd/ldpd.h usr.sbin/ldpd/ldpd.h
index 8a5f6292fff..018d4741faf 100644
--- usr.sbin/ldpd/ldpd.h
+++ usr.sbin/ldpd/ldpd.h
@@ -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 usr.sbin/ldpd/ldpe.c usr.sbin/ldpd/ldpe.c
index 218e431fbf7..8ee5f60aab0 100644
--- usr.sbin/ldpd/ldpe.c
+++ usr.sbin/ldpd/ldpe.c
@@ -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 usr.sbin/ldpd/log.c usr.sbin/ldpd/log.c
index bfce33f804a..ca76f227f35 100644
--- usr.sbin/ldpd/log.c
+++ usr.sbin/ldpd/log.c
@@ -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 usr.sbin/ldpd/log.h usr.sbin/ldpd/log.h
index ca221e21848..56f7b9246ac 100644
--- usr.sbin/ldpd/log.h
+++ 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.8 2016/09/02 14:02:48 benno Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henn...@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 usr.sbin/ldpd/logmsg.c usr.sbin/ldpd/logmsg.c
new file mode 100644
index 00000000000..64099f4967a
--- /dev/null
+++ usr.sbin/ldpd/logmsg.c
@@ -0,0 +1,423 @@
+/*     $OpenBSD: log.c,v 1.32 2016/09/02 17:08:02 renato Exp $ */
+
+/*
+ * Copyright (c) 2003, 2004 Henning Brauer <henn...@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);
+       }
+}

Reply via email to