summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhenning <henning@openbsd.org>2003-12-25 01:59:34 +0000
committerhenning <henning@openbsd.org>2003-12-25 01:59:34 +0000
commit76d253b89ff045cd6504788e4b79203c7637bec9 (patch)
treebd13c752058821004353a5a53e6f5e089a78a31f
parentoups, remove debugging cruft (diff)
downloadwireguard-openbsd-76d253b89ff045cd6504788e4b79203c7637bec9.tar.xz
wireguard-openbsd-76d253b89ff045cd6504788e4b79203c7637bec9.zip
check with our local view wether there is already an entry for the to be
added prefix in the kernel routing table. if yes and inserted by us change action from ADD to CHANGE, if not added by us do not add or change that prefix.
-rw-r--r--usr.sbin/bgpd/kroute.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/usr.sbin/bgpd/kroute.c b/usr.sbin/bgpd/kroute.c
index 15b96aac06f..015b1b7b29d 100644
--- a/usr.sbin/bgpd/kroute.c
+++ b/usr.sbin/bgpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.11 2003/12/25 01:49:53 henning Exp $ */
+/* $OpenBSD: kroute.c,v 1.12 2003/12/25 01:59:34 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -130,13 +130,21 @@ retry:
int
kroute_add(int fd, struct kroute *kroute)
{
- struct kroute_node *kr;
+ struct kroute_node *kr, s;
int n;
+ int action = RTM_ADD;
- if ((n = kroute_msg(fd, RTM_ADD, kroute)) == -2) /* connected route */
- return (0);
+ s.r.prefix = kroute->prefix;
+ s.r.prefixlen = kroute->prefixlen;
+
+ if ((kr = RB_FIND(kroute_tree, &krt, &s)) != NULL) {
+ if (kr->flags & F_BGPD_INSERTED)
+ action = RTM_CHANGE;
+ else
+ return (0);
+ }
- if (n == -1)
+ if ((n = kroute_msg(fd, RTM_ADD, kroute)) == -1)
return (-1);
if ((kr = calloc(1, sizeof(struct kroute_node))) == NULL)