From: Stephen Worley Date: Tue, 14 May 2019 17:11:30 +0000 (-0700) Subject: zebra: Add interface down marking to NHE's X-Git-Tag: base_7.3~219^2~107 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f862383fc9f0055dc068d5374e5efc7b49a23e2e;p=mirror%2Ffrr.git zebra: Add interface down marking to NHE's Add functionality to allow an interface down event to mark any dependent NHE's as invalid. Signed-off-by: Stephen Worley --- diff --git a/zebra/interface.c b/zebra/interface.c index 8fe7af3f2a..798cb92690 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -983,7 +983,17 @@ bool if_nhg_dependents_is_empty(const struct interface *ifp) return false; } +void if_down_nhg_dependents(const struct interface *ifp) { + if (!if_nhg_dependents_is_empty(ifp)) { + struct nhg_connected *rb_node_dep = NULL; + struct zebra_if *zif = (struct zebra_if *)ifp->info; + + RB_FOREACH (rb_node_dep, nhg_connected_head, + &zif->nhg_dependents) { + zebra_nhg_set_invalid(rb_node_dep->nhe); + } + } } /* Interface is up. */ @@ -1049,6 +1059,8 @@ void if_down(struct interface *ifp) zif->down_count++; quagga_timestamp(2, zif->down_last, sizeof(zif->down_last)); + if_down_nhg_dependents(ifp); + /* Handle interface down for specific types for EVPN. Non-VxLAN * interfaces * are checked to see if (remote) neighbor entries need to be purged diff --git a/zebra/interface.h b/zebra/interface.h index d5c1e17131..c5614a2a60 100644 --- a/zebra/interface.h +++ b/zebra/interface.h @@ -441,6 +441,7 @@ extern void if_nhg_dependents_del(struct interface *ifp, struct nhg_hash_entry *nhe); extern unsigned int if_nhg_dependents_count(const struct interface *ifp); extern bool if_nhg_dependents_is_empty(const struct interface *ifp); +extern void if_down_nhg_dependents(const struct interface *ifp); extern void vrf_add_update(struct vrf *vrfp);