summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2013-06-01 20:13:04 +0000
committerclaudio <claudio@openbsd.org>2013-06-01 20:13:04 +0000
commit84f16a94ad738d0e9e6ca159436c3338025dbba1 (patch)
treed1b550fd8786a67ddc4312a0ace3b54709089636
parentStop generating arbitrary directories in /usr/share/locale. (diff)
downloadwireguard-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.c16
-rw-r--r--usr.sbin/ldpd/ldpd.c6
-rw-r--r--usr.sbin/ldpd/log.c38
-rw-r--r--usr.sbin/ldpd/log.h3
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_ */