summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2003-12-23 18:52:46 +0000
committerclaudio <claudio@openbsd.org>2003-12-23 18:52:46 +0000
commit11370dc32c9786c45f6671b1d274723880506a28 (patch)
tree138e9451e26de609aa058ed129dcc70935ded22e
parentplay nice on exit (when he listening coket is closed) (diff)
downloadwireguard-openbsd-11370dc32c9786c45f6671b1d274723880506a28.tar.xz
wireguard-openbsd-11370dc32c9786c45f6671b1d274723880506a28.zip
In case of exit the RDE need to tell the parent to remove all still active
prefixes from the kernel routing table. This is done with a simple table walk. OK henning@
-rw-r--r--usr.sbin/bgpd/rde.c13
-rw-r--r--usr.sbin/bgpd/rde_decide.c4
2 files changed, 14 insertions, 3 deletions
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 5355191b83d..795bfbd6a1a 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.20 2003/12/23 18:28:05 henning Exp $ */
+/* $OpenBSD: rde.c,v 1.21 2003/12/23 18:52:46 claudio Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -42,6 +42,8 @@ void init_attr_flags(struct attr_flags *);
int rde_update_get_attr(u_char *, u_int16_t, struct attr_flags *);
void rde_update_err(u_int32_t, enum suberr_update);
+void rde_dump_kroute(struct pt_entry *pt, void *ptr);
+
void peer_init(struct bgpd_config *, u_long);
struct rde_peer *peer_add(u_int32_t, struct peer_config *);
void peer_remove(struct rde_peer *);
@@ -254,6 +256,7 @@ rde_dispatch_imsg(struct imsgbuf *ibuf, int idx)
imsg.hdr.peerid, NULL, 0);
break;
case IMSG_SHUTDOWN_REQUEST:
+ pt_dump(rde_dump_kroute, NULL);
imsg_compose(&ibuf_main, IMSG_SHUTDOWN_DONE, 0,
NULL, 0);
break;
@@ -541,6 +544,14 @@ rde_send_kroute(struct prefix *new, struct prefix *old)
imsg_compose(&ibuf_main, type, 0, &kr, sizeof(kr));
}
+void
+rde_dump_kroute(struct pt_entry *pt, void *ptr)
+{
+ if (pt->active == NULL)
+ return;
+ rde_send_kroute(NULL, pt->active);
+}
+
/*
* peer functions
*/
diff --git a/usr.sbin/bgpd/rde_decide.c b/usr.sbin/bgpd/rde_decide.c
index 53b629a2126..8b7584777a5 100644
--- a/usr.sbin/bgpd/rde_decide.c
+++ b/usr.sbin/bgpd/rde_decide.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde_decide.c,v 1.2 2003/12/23 15:59:02 claudio Exp $ */
+/* $OpenBSD: rde_decide.c,v 1.3 2003/12/23 18:52:46 claudio Exp $ */
/*
* Copyright (c) 2003 Claudio Jeker <claudio@openbsd.org>
@@ -211,7 +211,7 @@ prefix_evaluate(struct prefix *p, struct pt_entry *pte)
*/
rde_send_kroute(xp, pte->active);
- if (xp != NULL || xp->aspath->state == NEXTHOP_UNREACH)
+ if (xp == NULL || xp->aspath->state == NEXTHOP_UNREACH)
pte->active = NULL;
else {
pte->active = xp;