summaryrefslogtreecommitdiff
path: root/zebra/zebra_rib.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_rib.c')
-rw-r--r--zebra/zebra_rib.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index c8684c1a93..3b3bf921bc 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -2411,8 +2411,9 @@ void rib_unlink(struct route_node *rn, struct route_entry *re)
if (dest->selected_fib == re)
dest->selected_fib = NULL;
- zebra_nhg_release(re);
+ zebra_nhg_decrement_ref(re->nhe);
+ // TODO: We need to hold on nh's until refcnt is 0 right?
nexthops_free(re->ng->nexthop);
nexthop_group_delete(&re->ng);
nexthops_free(re->fib_ng.nexthop);
@@ -2658,7 +2659,8 @@ int rib_add_multipath(afi_t afi, safi_t safi, struct prefix *p,
if (src_p)
apply_mask_ipv6(src_p);
- zebra_nhg_find(re->ng, re);
+ re->nhe = zebra_nhg_find(re->ng, re->vrf_id, 0);
+ re->nhe->refcnt++;
/* Set default distance by route type. */
if (re->distance == 0)
re->distance = route_distance(re->type);