summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Benoit <benno@cvs.openbsd.org>2016-09-02 14:00:30 +0000
committerSebastian Benoit <benno@cvs.openbsd.org>2016-09-02 14:00:30 +0000
commitaa3b6762016a886f814101479e2d0dead65f7415 (patch)
treec0d0d871a17413b000fd52db478a222c9984c8ea
parent2d7c48de747954357d788728d987a52faac5fb10 (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. ok claudio@, feedback from henning@, deraadt@, reyk@
-rw-r--r--usr.sbin/bgpd/Makefile4
-rw-r--r--usr.sbin/bgpd/bgpd.c3
-rw-r--r--usr.sbin/bgpd/bgpd.h134
-rw-r--r--usr.sbin/bgpd/log.c192
-rw-r--r--usr.sbin/bgpd/log.h158
-rw-r--r--usr.sbin/bgpd/rde.c6
-rw-r--r--usr.sbin/bgpd/session.c6
7 files changed, 181 insertions, 322 deletions
diff --git a/usr.sbin/bgpd/Makefile b/usr.sbin/bgpd/Makefile
index c8b92dcb403..6310f29d272 100644
--- a/usr.sbin/bgpd/Makefile
+++ b/usr.sbin/bgpd/Makefile
@@ -1,7 +1,7 @@
-# $OpenBSD: Makefile,v 1.29 2010/05/26 16:44:32 nicm Exp $
+# $OpenBSD: Makefile,v 1.30 2016/09/02 14:00:29 benno Exp $
PROG= bgpd
-SRCS= bgpd.c session.c log.c parse.y config.c \
+SRCS= bgpd.c session.c log.c logmsg.c parse.y config.c \
rde.c rde_rib.c rde_decide.c rde_prefix.c mrt.c kroute.c \
control.c pfkey.c rde_update.c rde_attr.c printconf.c \
rde_filter.c pftable.c name2id.c util.c carp.c timer.c
diff --git a/usr.sbin/bgpd/bgpd.c b/usr.sbin/bgpd/bgpd.c
index 297a8536950..e4d2fc020cf 100644
--- a/usr.sbin/bgpd/bgpd.c
+++ b/usr.sbin/bgpd/bgpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bgpd.c,v 1.185 2016/06/20 20:12:52 benno Exp $ */
+/* $OpenBSD: bgpd.c,v 1.186 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -117,6 +117,7 @@ main(int argc, char *argv[])
conffile = CONFFILE;
bgpd_process = PROC_MAIN;
+ log_procname = log_procnames[bgpd_process];
log_init(1); /* log to stderr until daemonized */
log_verbose(1);
diff --git a/usr.sbin/bgpd/bgpd.h b/usr.sbin/bgpd/bgpd.h
index 3dc70d8dc0d..6bd19c19c55 100644
--- a/usr.sbin/bgpd/bgpd.h
+++ b/usr.sbin/bgpd/bgpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: bgpd.h,v 1.294 2016/06/06 15:59:10 benno Exp $ */
+/* $OpenBSD: bgpd.h,v 1.295 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -33,6 +33,8 @@
#include <imsg.h>
+#include "log.h"
+
#define BGP_VERSION 4
#define BGP_PORT 179
#define CONFFILE "/etc/bgpd.conf"
@@ -1079,4 +1081,134 @@ int af2aid(sa_family_t, u_int8_t, u_int8_t *);
struct sockaddr *addr2sa(struct bgpd_addr *, u_int16_t);
void sa2addr(struct sockaddr *, struct bgpd_addr *);
+static const char * const log_procnames[] = {
+ "parent",
+ "SE",
+ "RDE"
+};
+
+/* logmsg.c and needed by bgpctl */
+static const char * const statenames[] = {
+ "None",
+ "Idle",
+ "Connect",
+ "Active",
+ "OpenSent",
+ "OpenConfirm",
+ "Established"
+};
+
+static const char * const msgtypenames[] = {
+ "NONE",
+ "OPEN",
+ "UPDATE",
+ "NOTIFICATION",
+ "KEEPALIVE",
+ "RREFRESH"
+};
+
+static const char * const eventnames[] = {
+ "None",
+ "Start",
+ "Stop",
+ "Connection opened",
+ "Connection closed",
+ "Connection open failed",
+ "Fatal error",
+ "ConnectRetryTimer expired",
+ "HoldTimer expired",
+ "KeepaliveTimer expired",
+ "OPEN message received",
+ "KEEPALIVE message received",
+ "UPDATE message received",
+ "NOTIFICATION received"
+};
+
+static const char * const errnames[] = {
+ "none",
+ "Header error",
+ "error in OPEN message",
+ "error in UPDATE message",
+ "HoldTimer expired",
+ "Finite State Machine error",
+ "Cease"
+};
+
+static const char * const suberr_header_names[] = {
+ "none",
+ "synchronization error",
+ "wrong length",
+ "unknown message type"
+};
+
+static const char * const suberr_open_names[] = {
+ "none",
+ "version mismatch",
+ "AS unacceptable",
+ "BGPID invalid",
+ "optional parameter error",
+ "authentication error",
+ "unacceptable holdtime",
+ "unsupported capability",
+ "group membership conflict", /* draft-ietf-idr-bgp-multisession-07 */
+ "group membership required" /* draft-ietf-idr-bgp-multisession-07 */
+};
+
+static const char * const suberr_fsm_names[] = {
+ "unspecified error",
+ "received unexpected message in OpenSent",
+ "received unexpected message in OpenConfirm",
+ "received unexpected message in Established"
+};
+
+static const char * const suberr_update_names[] = {
+ "none",
+ "attribute list error",
+ "unknown well-known attribute",
+ "well-known attribute missing",
+ "attribute flags error",
+ "attribute length wrong",
+ "origin unacceptable",
+ "loop detected",
+ "nexthop unacceptable",
+ "optional attribute error",
+ "network unacceptable",
+ "AS-Path unacceptable"
+};
+
+static const char * const suberr_cease_names[] = {
+ "none",
+ "max-prefix exceeded",
+ "administratively down",
+ "peer unconfigured",
+ "administrative reset",
+ "connection rejected",
+ "other config change",
+ "collision",
+ "resource exhaustion"
+};
+
+static const char * const ctl_res_strerror[] = {
+ "no error",
+ "no such neighbor",
+ "permission denied",
+ "neighbor does not have this capability",
+ "config file has errors, reload failed",
+ "previous reload still running",
+ "out of memory",
+ "not a cloned peer",
+ "peer still active, down peer first"
+};
+
+static const char * const timernames[] = {
+ "None",
+ "ConnectRetryTimer",
+ "KeepaliveTimer",
+ "HoldTimer",
+ "IdleHoldTimer",
+ "IdleHoldResetTimer",
+ "CarpUndemoteTimer",
+ ""
+};
+
#endif /* __BGPD_H__ */
diff --git a/usr.sbin/bgpd/log.c b/usr.sbin/bgpd/log.c
index 025cf1d2ce4..ae724a478b3 100644
--- a/usr.sbin/bgpd/log.c
+++ b/usr.sbin/bgpd/log.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.c,v 1.60 2016/08/08 21:44:00 renato Exp $ */
+/* $OpenBSD: log.c,v 1.61 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -16,52 +16,19 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <err.h>
#include <errno.h>
-#include <netdb.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <time.h>
-#include <unistd.h>
-#include "bgpd.h"
-#include "session.h"
#include "log.h"
-int debug;
-int verbose;
-
-char *
-log_fmt_peer(const struct peer_config *peer)
-{
- const char *ip;
- char *pfmt, *p;
-
- ip = log_addr(&peer->remote_addr);
- if ((peer->remote_addr.aid == AID_INET && peer->remote_masklen != 32) ||
- (peer->remote_addr.aid == AID_INET6 &&
- peer->remote_masklen != 128)) {
- if (asprintf(&p, "%s/%u", ip, peer->remote_masklen) == -1)
- fatal(NULL);
- } else {
- if ((p = strdup(ip)) == NULL)
- fatal(NULL);
- }
-
- if (peer->descr[0]) {
- if (asprintf(&pfmt, "neighbor %s (%s)", p, peer->descr) ==
- -1)
- fatal(NULL);
- } else {
- if (asprintf(&pfmt, "neighbor %s", p) == -1)
- fatal(NULL);
- }
- free(p);
- return (pfmt);
-}
+int debug;
+int verbose;
+const char *log_procname;
void
log_init(int n_debug)
@@ -111,45 +78,6 @@ vlog(int pri, const char *fmt, va_list ap)
vsyslog(pri, fmt, ap);
}
-
-void
-log_peer_warn(const struct peer_config *peer, const char *emsg, ...)
-{
- char *p, *nfmt;
- va_list ap;
-
- p = log_fmt_peer(peer);
- if (emsg == NULL) {
- if (asprintf(&nfmt, "%s: %s", p, strerror(errno)) == -1)
- fatal(NULL);
- } else {
- if (asprintf(&nfmt, "%s: %s: %s", p, emsg, strerror(errno)) ==
- -1)
- fatal(NULL);
- }
- va_start(ap, emsg);
- vlog(LOG_CRIT, nfmt, ap);
- va_end(ap);
- free(p);
- free(nfmt);
-}
-
-void
-log_peer_warnx(const struct peer_config *peer, const char *emsg, ...)
-{
- char *p, *nfmt;
- va_list ap;
-
- p = log_fmt_peer(peer);
- if (asprintf(&nfmt, "%s: %s", p, emsg) == -1)
- fatal(NULL);
- va_start(ap, emsg);
- vlog(LOG_CRIT, nfmt, ap);
- va_end(ap);
- free(p);
- free(nfmt);
-}
-
void
log_warn(const char *emsg, ...)
{
@@ -217,15 +145,15 @@ fatal(const char *emsg, ...)
va_end(ap);
if (emsg == NULL)
- logit(LOG_CRIT, "fatal in %s: %s", procnames[bgpd_process],
+ logit(LOG_CRIT, "fatal in %s: %s", log_procname,
strerror(errno));
else
if (errno)
logit(LOG_CRIT, "fatal in %s: %s: %s",
- procnames[bgpd_process], s, strerror(errno));
+ log_procname, s, strerror(errno));
else
logit(LOG_CRIT, "fatal in %s: %s",
- procnames[bgpd_process], s);
+ log_procname, s);
exit(1);
}
@@ -236,109 +164,3 @@ fatalx(const char *emsg)
errno = 0;
fatal(emsg);
}
-
-void
-log_statechange(struct peer *peer, enum session_state nstate,
- enum session_events event)
-{
- char *p;
-
- /* don't clutter the logs with constant Connect -> Active -> Connect */
- if (nstate == STATE_CONNECT && peer->state == STATE_ACTIVE &&
- peer->prev_state == STATE_CONNECT)
- return;
- if (nstate == STATE_ACTIVE && peer->state == STATE_CONNECT &&
- peer->prev_state == STATE_ACTIVE)
- return;
-
- peer->lasterr = 0;
- p = log_fmt_peer(&peer->conf);
- logit(LOG_INFO, "%s: state change %s -> %s, reason: %s",
- p, statenames[peer->state], statenames[nstate], eventnames[event]);
- free(p);
-}
-
-void
-log_notification(const struct peer *peer, u_int8_t errcode, u_int8_t subcode,
- u_char *data, u_int16_t datalen, const char *dir)
-{
- char *p;
- const char *suberrname = NULL;
- int uk = 0;
-
- p = log_fmt_peer(&peer->conf);
- switch (errcode) {
- case ERR_HEADER:
- if (subcode >= sizeof(suberr_header_names)/sizeof(char *))
- uk = 1;
- else
- suberrname = suberr_header_names[subcode];
- break;
- case ERR_OPEN:
- if (subcode >= sizeof(suberr_open_names)/sizeof(char *))
- uk = 1;
- else
- suberrname = suberr_open_names[subcode];
- break;
- case ERR_UPDATE:
- if (subcode >= sizeof(suberr_update_names)/sizeof(char *))
- uk = 1;
- else
- suberrname = suberr_update_names[subcode];
- break;
- case ERR_CEASE:
- if (subcode >= sizeof(suberr_cease_names)/sizeof(char *))
- uk = 1;
- else
- suberrname = suberr_cease_names[subcode];
- break;
- case ERR_HOLDTIMEREXPIRED:
- if (subcode != 0)
- uk = 1;
- break;
- case ERR_FSM:
- if (subcode >= sizeof(suberr_fsm_names)/sizeof(char *))
- uk = 1;
- else
- suberrname = suberr_fsm_names[subcode];
- break;
- default:
- logit(LOG_CRIT, "%s: %s notification, unknown errcode "
- "%u, subcode %u", p, dir, errcode, subcode);
- free(p);
- return;
- }
-
- if (uk)
- logit(LOG_CRIT, "%s: %s notification: %s, unknown subcode %u",
- p, dir, errnames[errcode], subcode);
- else {
- if (suberrname == NULL)
- logit(LOG_CRIT, "%s: %s notification: %s", p,
- dir, errnames[errcode]);
- else
- logit(LOG_CRIT, "%s: %s notification: %s, %s",
- p, dir, errnames[errcode], suberrname);
- }
- free(p);
-}
-
-void
-log_conn_attempt(const struct peer *peer, struct sockaddr *sa)
-{
- char *p;
- const char *b;
-
- if (peer == NULL) { /* connection from non-peer, drop */
- b = log_sockaddr(sa);
- logit(LOG_INFO, "connection from non-peer %s refused", b);
- } else {
- /* only log if there is a chance that the session may come up */
- if (peer->conf.down && peer->state == STATE_IDLE)
- return;
- p = log_fmt_peer(&peer->conf);
- logit(LOG_INFO, "Connection attempt from %s while session is "
- "in state %s", p, statenames[peer->state]);
- free(p);
- }
-}
diff --git a/usr.sbin/bgpd/log.h b/usr.sbin/bgpd/log.h
index 5b86548e8b5..d8a07707501 100644
--- a/usr.sbin/bgpd/log.h
+++ b/usr.sbin/bgpd/log.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.h,v 1.17 2015/10/24 08:06:45 claudio Exp $ */
+/* $OpenBSD: log.h,v 1.18 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -16,131 +16,31 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-static const char * const statenames[] = {
- "None",
- "Idle",
- "Connect",
- "Active",
- "OpenSent",
- "OpenConfirm",
- "Established"
-};
-
-static const char * const msgtypenames[] = {
- "NONE",
- "OPEN",
- "UPDATE",
- "NOTIFICATION",
- "KEEPALIVE",
- "RREFRESH"
-};
-
-static const char * const eventnames[] = {
- "None",
- "Start",
- "Stop",
- "Connection opened",
- "Connection closed",
- "Connection open failed",
- "Fatal error",
- "ConnectRetryTimer expired",
- "HoldTimer expired",
- "KeepaliveTimer expired",
- "OPEN message received",
- "KEEPALIVE message received",
- "UPDATE message received",
- "NOTIFICATION received"
-};
-
-static const char * const errnames[] = {
- "none",
- "Header error",
- "error in OPEN message",
- "error in UPDATE message",
- "HoldTimer expired",
- "Finite State Machine error",
- "Cease"
-};
-
-static const char * const suberr_header_names[] = {
- "none",
- "synchronization error",
- "wrong length",
- "unknown message type"
-};
-
-static const char * const suberr_open_names[] = {
- "none",
- "version mismatch",
- "AS unacceptable",
- "BGPID invalid",
- "optional parameter error",
- "authentication error",
- "unacceptable holdtime",
- "unsupported capability",
- "group membership conflict", /* draft-ietf-idr-bgp-multisession-07 */
- "group membership required" /* draft-ietf-idr-bgp-multisession-07 */
-};
-
-static const char * const suberr_fsm_names[] = {
- "unspecified error",
- "received unexpected message in OpenSent",
- "received unexpected message in OpenConfirm",
- "received unexpected message in Established"
-};
-
-static const char * const suberr_update_names[] = {
- "none",
- "attribute list error",
- "unknown well-known attribute",
- "well-known attribute missing",
- "attribute flags error",
- "attribute length wrong",
- "origin unacceptable",
- "loop detected",
- "nexthop unacceptable",
- "optional attribute error",
- "network unacceptable",
- "AS-Path unacceptable"
-};
-
-static const char * const suberr_cease_names[] = {
- "none",
- "max-prefix exceeded",
- "administratively down",
- "peer unconfigured",
- "administrative reset",
- "connection rejected",
- "other config change",
- "collision",
- "resource exhaustion"
-};
-
-static const char * const procnames[] = {
- "parent",
- "SE",
- "RDE"
-};
-
-static const char * const ctl_res_strerror[] = {
- "no error",
- "no such neighbor",
- "permission denied",
- "neighbor does not have this capability",
- "config file has errors, reload failed",
- "previous reload still running",
- "out of memory",
- "not a cloned peer",
- "peer still active, down peer first"
-};
-
-static const char * const timernames[] = {
- "None",
- "ConnectRetryTimer",
- "KeepaliveTimer",
- "HoldTimer",
- "IdleHoldTimer",
- "IdleHoldResetTimer",
- "CarpUndemoteTimer",
- ""
-};
+#ifndef LOG_H
+#define LOG_H
+
+#include <stdarg.h>
+#include <sys/cdefs.h>
+
+extern const char *log_procname;
+
+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, 2)));
+void fatalx(const char *) __dead
+ __attribute__((__format__ (printf, 1, 0)));
+
+#endif /* LOG_H */
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 0b19f569787..e608e85a1ea 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.348 2016/08/08 21:44:00 renato Exp $ */
+/* $OpenBSD: rde.c,v 1.349 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -168,6 +168,9 @@ rde_main(int debug, int verbose)
int timeout;
u_int8_t aid;
+ bgpd_process = PROC_RDE;
+ log_procname = log_procnames[bgpd_process];
+
log_init(debug);
log_verbose(verbose);
@@ -180,7 +183,6 @@ rde_main(int debug, int verbose)
fatal("chdir(\"/\")");
setproctitle("route decision engine");
- bgpd_process = PROC_RDE;
if (setgroups(1, &pw->pw_gid) ||
setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
diff --git a/usr.sbin/bgpd/session.c b/usr.sbin/bgpd/session.c
index a99a26a83c8..afef8bed905 100644
--- a/usr.sbin/bgpd/session.c
+++ b/usr.sbin/bgpd/session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: session.c,v 1.352 2016/08/08 21:44:00 renato Exp $ */
+/* $OpenBSD: session.c,v 1.353 2016/09/02 14:00:29 benno Exp $ */
/*
* Copyright (c) 2003, 2004, 2005 Henning Brauer <henning@openbsd.org>
@@ -202,6 +202,9 @@ session_main(int debug, int verbose)
void *newp;
short events;
+ bgpd_process = PROC_SE;
+ log_procname = log_procnames[bgpd_process];
+
log_init(debug);
log_verbose(verbose);
@@ -214,7 +217,6 @@ session_main(int debug, int verbose)
fatal("chdir(\"/\")");
setproctitle("session engine");
- bgpd_process = PROC_SE;
pfkeysock = pfkey_init(&sysdep);
if (setgroups(1, &pw->pw_gid) ||