summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhenning <henning@openbsd.org>2007-10-04 11:43:19 +0000
committerhenning <henning@openbsd.org>2007-10-04 11:43:19 +0000
commit0695653f092babc097d6e8d9962fb5249bee72a6 (patch)
treeab91f474df6d1442b81b4e92ebb623763833efb5
parentonly init screen when in interactive mode; ok ray@ (diff)
downloadwireguard-openbsd-0695653f092babc097d6e8d9962fb5249bee72a6.tar.xz
wireguard-openbsd-0695653f092babc097d6e8d9962fb5249bee72a6.zip
when inserting blackhole or reject routes, set the gateway address to
127.0.0.1 / ::1 unconditioally, since RTF_BLACKHOLE/REJECT are not actually checked in the forwarding path and the gw doesn't matter otherwise. makes them work.. found teh hard way by me. claudio ok
-rw-r--r--usr.sbin/bgpd/kroute.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/usr.sbin/bgpd/kroute.c b/usr.sbin/bgpd/kroute.c
index c7aa602cb54..432bc55c9b1 100644
--- a/usr.sbin/bgpd/kroute.c
+++ b/usr.sbin/bgpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.154 2007/05/11 11:27:59 claudio Exp $ */
+/* $OpenBSD: kroute.c,v 1.155 2007/10/04 11:43:19 henning Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -236,6 +236,10 @@ kr_change(struct kroute_label *kl)
rtlabel_unref(kr->r.labelid);
kl->kr.labelid = rtlabel_name2id(kl->label);
+ /* for blackhole and reject routes nexthop needs to be 127.0.0.1 */
+ if (kl->kr.flags & (F_BLACKHOLE|F_REJECT))
+ kl->kr.nexthop.s_addr = htonl(INADDR_LOOPBACK);
+
if (send_rtmsg(kr_state.fd, action, &kl->kr) == -1)
return (-1);
@@ -301,6 +305,7 @@ kr6_change(struct kroute6_label *kl)
{
struct kroute6_node *kr6;
int action = RTM_ADD;
+ struct in6_addr lo6 = IN6ADDR_LOOPBACK_INIT;
if ((kr6 = kroute6_find(&kl->kr.prefix, kl->kr.prefixlen)) != NULL) {
if (kr6->r.flags & F_BGPD_INSERTED)
@@ -317,6 +322,10 @@ kr6_change(struct kroute6_label *kl)
rtlabel_unref(kr6->r.labelid);
kl->kr.labelid = rtlabel_name2id(kl->label);
+ /* for blackhole and reject routes nexthop needs to be ::1 */
+ if (kl->kr.flags & (F_BLACKHOLE|F_REJECT))
+ bcopy(&lo6, &kl->kr.nexthop, sizeof(kl->kr.nexthop));
+
if (send_rt6msg(kr_state.fd, action, &kl->kr) == -1)
return (-1);