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 <sworley@cumulusnetworks.com>
This commit is contained in:
Stephen Worley 2019-05-14 10:11:30 -07:00
parent fe593b781d
commit f862383fc9
2 changed files with 13 additions and 0 deletions

View File

@ -983,7 +983,17 @@ bool if_nhg_dependents_is_empty(const struct interface *ifp)
return false; 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. */ /* Interface is up. */
@ -1049,6 +1059,8 @@ void if_down(struct interface *ifp)
zif->down_count++; zif->down_count++;
quagga_timestamp(2, zif->down_last, sizeof(zif->down_last)); 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 /* Handle interface down for specific types for EVPN. Non-VxLAN
* interfaces * interfaces
* are checked to see if (remote) neighbor entries need to be purged * are checked to see if (remote) neighbor entries need to be purged

View File

@ -441,6 +441,7 @@ extern void if_nhg_dependents_del(struct interface *ifp,
struct nhg_hash_entry *nhe); struct nhg_hash_entry *nhe);
extern unsigned int if_nhg_dependents_count(const struct interface *ifp); extern unsigned int if_nhg_dependents_count(const struct interface *ifp);
extern bool if_nhg_dependents_is_empty(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); extern void vrf_add_update(struct vrf *vrfp);