diff options
author | 2003-12-25 01:59:34 +0000 | |
---|---|---|
committer | 2003-12-25 01:59:34 +0000 | |
commit | 76d253b89ff045cd6504788e4b79203c7637bec9 (patch) | |
tree | bd13c752058821004353a5a53e6f5e089a78a31f | |
parent | oups, remove debugging cruft (diff) | |
download | wireguard-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.c | 18 |
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) |