diff options
author | 2013-06-01 20:13:04 +0000 | |
---|---|---|
committer | 2013-06-01 20:13:04 +0000 | |
commit | 84f16a94ad738d0e9e6ca159436c3338025dbba1 (patch) | |
tree | d1b550fd8786a67ddc4312a0ace3b54709089636 | |
parent | Stop generating arbitrary directories in /usr/share/locale. (diff) | |
download | wireguard-openbsd-84f16a94ad738d0e9e6ca159436c3338025dbba1.tar.xz wireguard-openbsd-84f16a94ad738d0e9e6ca159436c3338025dbba1.zip |
Filter out route messages we don't need and log kernel messages in
super verbose mode.
From Renato Westphal
-rw-r--r-- | usr.sbin/ldpd/kroute.c | 16 | ||||
-rw-r--r-- | usr.sbin/ldpd/ldpd.c | 6 | ||||
-rw-r--r-- | usr.sbin/ldpd/log.c | 38 | ||||
-rw-r--r-- | usr.sbin/ldpd/log.h | 3 |
4 files changed, 54 insertions, 9 deletions
diff --git a/usr.sbin/ldpd/kroute.c b/usr.sbin/ldpd/kroute.c index 35590e4d032..031ce4111ed 100644 --- a/usr.sbin/ldpd/kroute.c +++ b/usr.sbin/ldpd/kroute.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kroute.c,v 1.25 2011/06/26 19:19:23 claudio Exp $ */ +/* $OpenBSD: kroute.c,v 1.26 2013/06/01 20:13:04 claudio Exp $ */ /* * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org> @@ -129,6 +129,7 @@ kr_init(int fs) { int opt = 0, rcvbuf, default_rcvbuf; socklen_t optlen; + unsigned int rtfilter; kr_state.fib_sync = fs; @@ -140,7 +141,17 @@ kr_init(int fs) /* not interested in my own messages */ if (setsockopt(kr_state.fd, SOL_SOCKET, SO_USELOOPBACK, &opt, sizeof(opt)) == -1) - log_warn("kr_init: setsockopt"); /* not fatal */ + log_warn("kr_init: setsockopt(SO_USELOOPBACK)"); + + /* filter out unwanted messages */ + rtfilter = ROUTE_FILTER(RTM_ADD) | ROUTE_FILTER(RTM_GET) | + ROUTE_FILTER(RTM_CHANGE) | ROUTE_FILTER(RTM_DELETE) | + ROUTE_FILTER(RTM_IFINFO) | ROUTE_FILTER(RTM_NEWADDR) | + ROUTE_FILTER(RTM_DELADDR) | ROUTE_FILTER(RTM_IFANNOUNCE); + + if (setsockopt(kr_state.fd, PF_ROUTE, ROUTE_MSGFILTER, + &rtfilter, sizeof(rtfilter)) == -1) + log_warn("kr_init: setsockopt(ROUTE_MSGFILTER)"); /* grow receive buffer, don't wanna miss messages */ optlen = sizeof(default_rcvbuf); @@ -1149,6 +1160,7 @@ rtmsg_process(char *buf, int len) rtm = (struct rt_msghdr *)next; if (rtm->rtm_version != RTM_VERSION) continue; + log_rtmsg(rtm->rtm_type); prefix.s_addr = 0; prefixlen = 0; diff --git a/usr.sbin/ldpd/ldpd.c b/usr.sbin/ldpd/ldpd.c index 20e05689cec..5d5113c39d1 100644 --- a/usr.sbin/ldpd/ldpd.c +++ b/usr.sbin/ldpd/ldpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ldpd.c,v 1.14 2013/05/04 09:26:24 jsg Exp $ */ +/* $OpenBSD: ldpd.c,v 1.15 2013/06/01 20:13:04 claudio Exp $ */ /* * Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org> @@ -170,8 +170,6 @@ main(int argc, char *argv[]) if ((ldpd_conf = parse_config(conffile, opts)) == NULL ) exit(1); - /* parse config file */ - if (ldpd_conf->opts & LDPD_OPT_NOACTION) { if (ldpd_conf->opts & LDPD_OPT_VERBOSE) print_config(ldpd_conf); @@ -189,7 +187,7 @@ main(int argc, char *argv[]) errx(1, "unknown user %s", LDPD_USER); log_init(debug); - log_verbose(opts & LDPD_OPT_VERBOSE); + log_verbose(opts & (LDPD_OPT_VERBOSE | LDPD_OPT_VERBOSE2)); if (!debug) daemon(1, 0); diff --git a/usr.sbin/ldpd/log.c b/usr.sbin/ldpd/log.c index ee85eedaecc..d6fcc67f9e8 100644 --- a/usr.sbin/ldpd/log.c +++ b/usr.sbin/ldpd/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.10 2013/06/01 18:26:40 claudio Exp $ */ +/* $OpenBSD: log.c,v 1.11 2013/06/01 20:13:04 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -140,7 +140,7 @@ log_debug(const char *emsg, ...) { va_list ap; - if (verbose) { + if (verbose & LDPD_OPT_VERBOSE) { va_start(ap, emsg); vlog(LOG_DEBUG, emsg, ap); va_end(ap); @@ -299,3 +299,37 @@ log_fec(struct map *map) 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(u_char rtm_type) +{ + if (!(verbose & LDPD_OPT_VERBOSE2)) + return; + + if (rtm_type > 0 && + rtm_type < sizeof(msgtypes)/sizeof(msgtypes[0])) + log_debug("rtmsg_process: %s", msgtypes[rtm_type]); + else + log_debug("rtmsg_process: rtm_type %d out of range", + rtm_type); +} diff --git a/usr.sbin/ldpd/log.h b/usr.sbin/ldpd/log.h index 0ea3c201b50..d53d15fe3b2 100644 --- a/usr.sbin/ldpd/log.h +++ b/usr.sbin/ldpd/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.3 2010/06/09 14:01:03 claudio Exp $ */ +/* $OpenBSD: log.h,v 1.4 2013/06/01 20:13:04 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -31,5 +31,6 @@ void log_debug(const char *, ...); void fatal(const char *) __dead; void fatalx(const char *) __dead; const char *log_fec(struct map *); +void log_rtmsg(u_char); #endif /* _LOG_H_ */ |