From 32e29e79107a44caa97680c0ff8cad3f06385e13 Mon Sep 17 00:00:00 2001 From: Stephen Worley Date: Wed, 17 Jul 2019 13:15:51 -0400 Subject: [PATCH] zebra: Add nhg refcnt connected helper functions Add some helper functions for ref incrementing and decrementing the depends of a nexthop group hash entry. This just abstracts the RB tree manipulation a bit more. Signed-off-by: Stephen Worley --- zebra/zebra_nhg.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index 443b019828..cf579d7ba9 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -135,6 +135,25 @@ void nhg_connected_head_add(struct nhg_connected_head *head, RB_INSERT(nhg_connected_head, head, new); } +static void nhg_connected_head_decrement_ref(struct nhg_connected_head *head) +{ + struct nhg_connected *rb_node_dep = NULL; + struct nhg_connected *tmp = NULL; + + RB_FOREACH_SAFE (rb_node_dep, nhg_connected_head, head, tmp) { + zebra_nhg_decrement_ref(rb_node_dep->nhe); + } +} + +static void nhg_connected_head_increment_ref(struct nhg_connected_head *head) +{ + struct nhg_connected *rb_node_dep = NULL; + + RB_FOREACH (rb_node_dep, nhg_connected_head, head) { + zebra_nhg_increment_ref(rb_node_dep->nhe); + } +} + struct nhg_hash_entry *zebra_nhg_resolve(struct nhg_hash_entry *nhe) { if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_RECURSIVE) @@ -768,15 +787,8 @@ void zebra_nhg_decrement_ref(struct nhg_hash_entry *nhe) { nhe->refcnt--; - if (!zebra_nhg_depends_is_empty(nhe)) { - struct nhg_connected *rb_node_dep = NULL; - struct nhg_connected *tmp = NULL; - - RB_FOREACH_SAFE (rb_node_dep, nhg_connected_head, - &nhe->nhg_depends, tmp) { - zebra_nhg_decrement_ref(rb_node_dep->nhe); - } - } + if (!zebra_nhg_depends_is_empty(nhe)) + nhg_connected_head_decrement_ref(&nhe->nhg_depends); if (!nhe->is_kernel_nh && nhe->refcnt <= 0) zebra_nhg_uninstall_kernel(nhe); @@ -786,14 +798,8 @@ void zebra_nhg_increment_ref(struct nhg_hash_entry *nhe) { nhe->refcnt++; - if (!zebra_nhg_depends_is_empty(nhe)) { - struct nhg_connected *rb_node_dep = NULL; - - RB_FOREACH (rb_node_dep, nhg_connected_head, - &nhe->nhg_depends) { - zebra_nhg_increment_ref(rb_node_dep->nhe); - } - } + if (!zebra_nhg_depends_is_empty(nhe)) + nhg_connected_head_increment_ref(&nhe->nhg_depends); } void zebra_nhg_set_invalid(struct nhg_hash_entry *nhe)