mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 01:40:16 +00:00
Merge pull request #7374 from sworleys/Revert-Revert-NHG-Dependents
zebra: Fix the NHG dependents relationship
This commit is contained in:
commit
874e77acce
@ -442,11 +442,8 @@ static void *zebra_nhg_hash_alloc(void *arg)
|
|||||||
/* Mark duplicate nexthops in a group at creation time. */
|
/* Mark duplicate nexthops in a group at creation time. */
|
||||||
nexthop_group_mark_duplicates(&(nhe->nhg));
|
nexthop_group_mark_duplicates(&(nhe->nhg));
|
||||||
|
|
||||||
zebra_nhg_connect_depends(nhe, &(copy->nhg_depends));
|
|
||||||
|
|
||||||
/* Add the ifp now if it's not a group or recursive and has ifindex */
|
/* Add the ifp now if it's not a group or recursive and has ifindex */
|
||||||
if (zebra_nhg_depends_is_empty(nhe) && nhe->nhg.nexthop
|
if (nhe->nhg.nexthop && nhe->nhg.nexthop->ifindex) {
|
||||||
&& nhe->nhg.nexthop->ifindex) {
|
|
||||||
struct interface *ifp = NULL;
|
struct interface *ifp = NULL;
|
||||||
|
|
||||||
ifp = if_lookup_by_index(nhe->nhg.nexthop->ifindex,
|
ifp = if_lookup_by_index(nhe->nhg.nexthop->ifindex,
|
||||||
@ -461,7 +458,6 @@ static void *zebra_nhg_hash_alloc(void *arg)
|
|||||||
nhe->nhg.nexthop->vrf_id, nhe->id);
|
nhe->nhg.nexthop->vrf_id, nhe->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return nhe;
|
return nhe;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -754,7 +750,7 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */
|
|||||||
* resolving nexthop; or a group of nexthops, where we need
|
* resolving nexthop; or a group of nexthops, where we need
|
||||||
* relationships with the corresponding singletons.
|
* relationships with the corresponding singletons.
|
||||||
*/
|
*/
|
||||||
zebra_nhg_depends_init(lookup);
|
zebra_nhg_depends_init(newnhe);
|
||||||
|
|
||||||
nh = newnhe->nhg.nexthop;
|
nh = newnhe->nhg.nexthop;
|
||||||
|
|
||||||
@ -786,7 +782,14 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (recursive)
|
if (recursive)
|
||||||
SET_FLAG((*nhe)->flags, NEXTHOP_GROUP_RECURSIVE);
|
SET_FLAG(newnhe->flags, NEXTHOP_GROUP_RECURSIVE);
|
||||||
|
|
||||||
|
/* Attach dependent backpointers to singletons */
|
||||||
|
zebra_nhg_connect_depends(newnhe, &newnhe->nhg_depends);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backup Nexthops
|
||||||
|
*/
|
||||||
|
|
||||||
if (zebra_nhg_get_backup_nhg(newnhe) == NULL ||
|
if (zebra_nhg_get_backup_nhg(newnhe) == NULL ||
|
||||||
zebra_nhg_get_backup_nhg(newnhe)->nexthop == NULL)
|
zebra_nhg_get_backup_nhg(newnhe)->nexthop == NULL)
|
||||||
@ -1588,6 +1591,7 @@ void zebra_nhg_free(struct nhg_hash_entry *nhe)
|
|||||||
|
|
||||||
void zebra_nhg_hash_free(void *p)
|
void zebra_nhg_hash_free(void *p)
|
||||||
{
|
{
|
||||||
|
zebra_nhg_release_all_deps((struct nhg_hash_entry *)p);
|
||||||
zebra_nhg_free((struct nhg_hash_entry *)p);
|
zebra_nhg_free((struct nhg_hash_entry *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2838,10 +2842,15 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
|
|||||||
if (old) {
|
if (old) {
|
||||||
/*
|
/*
|
||||||
* This is a replace, just release NHE from ID for now, The
|
* This is a replace, just release NHE from ID for now, The
|
||||||
* depends/dependents may still be used in the replacement.
|
* depends/dependents may still be used in the replacement so
|
||||||
|
* we don't touch them other than to remove their refs to their
|
||||||
|
* old parent.
|
||||||
*/
|
*/
|
||||||
replace = true;
|
replace = true;
|
||||||
hash_release(zrouter.nhgs_id, old);
|
hash_release(zrouter.nhgs_id, old);
|
||||||
|
|
||||||
|
/* Free all the things */
|
||||||
|
zebra_nhg_release_all_deps(old);
|
||||||
}
|
}
|
||||||
|
|
||||||
new = zebra_nhg_rib_find_nhe(&lookup, afi);
|
new = zebra_nhg_rib_find_nhe(&lookup, afi);
|
||||||
@ -2878,9 +2887,6 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
|
|||||||
zebra_nhg_decrement_ref(rb_node_dep->nhe);
|
zebra_nhg_decrement_ref(rb_node_dep->nhe);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free all the things */
|
|
||||||
zebra_nhg_release_all_deps(old);
|
|
||||||
|
|
||||||
/* Dont call the dec API, we dont want to uninstall the ID */
|
/* Dont call the dec API, we dont want to uninstall the ID */
|
||||||
old->refcnt = 0;
|
old->refcnt = 0;
|
||||||
zebra_nhg_free(old);
|
zebra_nhg_free(old);
|
||||||
|
Loading…
Reference in New Issue
Block a user