diff options
| author | Mark Stapp <mjs@voltanet.io> | 2020-03-10 09:53:42 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-10 09:53:42 -0400 |
| commit | 2bdced5ab3f1f9726b5bbf7cf45b4b0b86a969c3 (patch) | |
| tree | b4d96f500b87d479f79d92f68940becd78806cba | |
| parent | e14175b8a1e2eec1d610933aeb625cb2f0fa0385 (diff) | |
| parent | 5a7aea851d7e5329b9d24e74614b005d0b4efbef (diff) | |
Merge pull request #5955 from dslicenc/v6-ra-leak
zebra: delete ipv6 RA prefix entries when zebra is killed
| -rw-r--r-- | zebra/rtadv.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 4b7fd5060a..60ac471b5a 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -1118,18 +1118,31 @@ void rtadv_stop_ra(struct interface *ifp) } /* - * send router lifetime value of zero in RAs on all interfaces since we're + * Send router lifetime value of zero in RAs on all interfaces since we're * ceasing to advertise globally and want to let all of our neighbors know * RFC 4861 secion 6.2.5 + * + * Delete all ipv6 global prefixes added to the router advertisement prefix + * lists prior to ceasing. */ void rtadv_stop_ra_all(void) { struct vrf *vrf; struct interface *ifp; + struct listnode *node, *nnode; + struct zebra_if *zif; + struct rtadv_prefix *rprefix; RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) - FOR_ALL_INTERFACES (vrf, ifp) + FOR_ALL_INTERFACES (vrf, ifp) { + zif = ifp->info; + + for (ALL_LIST_ELEMENTS(zif->rtadv.AdvPrefixList, + node, nnode, rprefix)) + rtadv_prefix_reset(zif, rprefix); + rtadv_stop_ra(ifp); + } } void zebra_interface_radv_disable(ZAPI_HANDLER_ARGS) |
