diff options
author | 2003-12-23 18:52:46 +0000 | |
---|---|---|
committer | 2003-12-23 18:52:46 +0000 | |
commit | 11370dc32c9786c45f6671b1d274723880506a28 (patch) | |
tree | 138e9451e26de609aa058ed129dcc70935ded22e | |
parent | play nice on exit (when he listening coket is closed) (diff) | |
download | wireguard-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.c | 13 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde_decide.c | 4 |
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; |