diff options
author | Sebastian Benoit <benno@cvs.openbsd.org> | 2016-09-02 14:00:30 +0000 |
---|---|---|
committer | Sebastian Benoit <benno@cvs.openbsd.org> | 2016-09-02 14:00:30 +0000 |
commit | aa3b6762016a886f814101479e2d0dead65f7415 (patch) | |
tree | c0d0d871a17413b000fd52db478a222c9984c8ea | |
parent | 2d7c48de747954357d788728d987a52faac5fb10 (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/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/bgpd/bgpd.c | 3 | ||||
-rw-r--r-- | usr.sbin/bgpd/bgpd.h | 134 | ||||
-rw-r--r-- | usr.sbin/bgpd/log.c | 192 | ||||
-rw-r--r-- | usr.sbin/bgpd/log.h | 158 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde.c | 6 | ||||
-rw-r--r-- | usr.sbin/bgpd/session.c | 6 |
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) || |