summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2005-06-07 18:56:51 +0000
committerclaudio <claudio@openbsd.org>2005-06-07 18:56:51 +0000
commited2a6feeb1498ef850b4fbbc32a70bee539e3b9b (patch)
treec5ebfb5257e24af0e4afebede5a24983673a2066
parentFix the mask2prefixlen6() function once and for all. Netmasks are stored in (diff)
downloadwireguard-openbsd-ed2a6feeb1498ef850b4fbbc32a70bee539e3b9b.tar.xz
wireguard-openbsd-ed2a6feeb1498ef850b4fbbc32a70bee539e3b9b.zip
Set the reject and blackhole flags for kernel routes too. This makes the
bgpctl show fib output more logical, especially for INET6 because many prfixes have the reject flag set. OK henning@
-rw-r--r--usr.sbin/bgpd/kroute.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/usr.sbin/bgpd/kroute.c b/usr.sbin/bgpd/kroute.c
index 48c6456ab73..dbfb8f27eca 100644
--- a/usr.sbin/bgpd/kroute.c
+++ b/usr.sbin/bgpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.135 2005/06/07 18:43:31 claudio Exp $ */
+/* $OpenBSD: kroute.c,v 1.136 2005/06/07 18:56:51 claudio Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -1891,6 +1891,10 @@ fetchtable(void)
sa_in = (struct sockaddr_in *)rti_info[RTAX_NETMASK];
if (rtm->rtm_flags & RTF_STATIC)
kr->r.flags |= F_STATIC;
+ if (rtm->rtm_flags & RTF_BLACKHOLE)
+ kr->r.flags |= F_BLACKHOLE;
+ if (rtm->rtm_flags & RTF_REJECT)
+ kr->r.flags |= F_REJECT;
if (sa_in != NULL) {
if (sa_in->sin_len == 0)
break;
@@ -1919,6 +1923,10 @@ fetchtable(void)
sa_in6 = (struct sockaddr_in6 *)rti_info[RTAX_NETMASK];
if (rtm->rtm_flags & RTF_STATIC)
kr6->r.flags |= F_STATIC;
+ if (rtm->rtm_flags & RTF_BLACKHOLE)
+ kr6->r.flags |= F_BLACKHOLE;
+ if (rtm->rtm_flags & RTF_REJECT)
+ kr6->r.flags |= F_REJECT;
if (sa_in6 != NULL) {
if (sa_in6->sin6_len == 0)
break;
@@ -2114,13 +2122,18 @@ dispatch_rtmsg_addr(struct rt_msghdr *rtm, struct sockaddr *rti_info[RTAX_MAX])
if ((sa = rti_info[RTAX_DST]) == NULL)
return (-1);
+ if (rtm->rtm_flags & RTF_STATIC)
+ flags |= F_STATIC;
+ if (rtm->rtm_flags & RTF_BLACKHOLE)
+ flags |= F_BLACKHOLE;
+ if (rtm->rtm_flags & RTF_REJECT)
+ flags |= F_REJECT;
+
prefix.af = sa->sa_family;
switch (prefix.af) {
case AF_INET:
prefix.v4.s_addr = ((struct sockaddr_in *)sa)->sin_addr.s_addr;
sa_in = (struct sockaddr_in *)rti_info[RTAX_NETMASK];
- if (rtm->rtm_flags & RTF_STATIC)
- flags |= F_STATIC;
if (sa_in != NULL) {
if (sa_in->sin_len != 0)
prefixlen = mask2prefixlen(
@@ -2135,8 +2148,6 @@ dispatch_rtmsg_addr(struct rt_msghdr *rtm, struct sockaddr *rti_info[RTAX_MAX])
memcpy(&prefix.v6, &((struct sockaddr_in6 *)sa)->sin6_addr,
sizeof(struct in6_addr));
sa_in6 = (struct sockaddr_in6 *)rti_info[RTAX_NETMASK];
- if (rtm->rtm_flags & RTF_STATIC)
- flags |= F_STATIC;
if (sa_in6 != NULL) {
if (sa_in6->sin6_len != 0)
prefixlen = mask2prefixlen6(sa_in6);