]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Add nhg refcnt connected helper functions
authorStephen Worley <sworley@cumulusnetworks.com>
Wed, 17 Jul 2019 17:15:51 +0000 (13:15 -0400)
committerStephen Worley <sworley@cumulusnetworks.com>
Fri, 25 Oct 2019 15:13:41 +0000 (11:13 -0400)
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 <sworley@cumulusnetworks.com>
zebra/zebra_nhg.c

index 443b0198280b6f2c52fe4729fd566201a6f3a8bd..cf579d7ba9575557ea1e7d925248b9d55b931cb9 100644 (file)
@@ -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)