diff options
author | 2005-06-07 18:56:51 +0000 | |
---|---|---|
committer | 2005-06-07 18:56:51 +0000 | |
commit | ed2a6feeb1498ef850b4fbbc32a70bee539e3b9b (patch) | |
tree | c5ebfb5257e24af0e4afebede5a24983673a2066 | |
parent | Fix the mask2prefixlen6() function once and for all. Netmasks are stored in (diff) | |
download | wireguard-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.c | 21 |
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); |