]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Abstract zebra_delete_rnh
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 4 Jan 2019 16:02:35 +0000 (11:02 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 4 Jan 2019 16:02:35 +0000 (11:02 -0500)
The deletion of a rnh is always proceeded by the same checks
to see if it is done.  Just let zebra_delete_rnh do this test.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_rnh.c

index b1fbe8a6536de6dbdf2bf91b6f520ec8664a7266..eb224722c3b072391f8bc1c3365a080852f96ddc 100644 (file)
@@ -182,7 +182,11 @@ void zebra_delete_rnh(struct rnh *rnh, rnh_type_t type)
 {
        struct route_node *rn;
 
-       if (!rnh || (rnh->flags & ZEBRA_NHT_DELETED) || !(rn = rnh->node))
+       if (!list_isempty(rnh->client_list)
+           || !list_isempty(rnh->zebra_pseudowire_list))
+               return;
+
+       if ((rnh->flags & ZEBRA_NHT_DELETED) || !(rn = rnh->node))
                return;
 
        if (IS_ZEBRA_DEBUG_NHT) {
@@ -233,9 +237,7 @@ void zebra_remove_rnh_client(struct rnh *rnh, struct zserv *client,
                           rnh_str(rnh, buf, sizeof(buf)), type);
        }
        listnode_delete(rnh->client_list, client);
-       if (list_isempty(rnh->client_list)
-           && list_isempty(rnh->zebra_pseudowire_list))
-               zebra_delete_rnh(rnh, type);
+       zebra_delete_rnh(rnh, type);
 }
 
 /* XXX move this utility function elsewhere? */
@@ -291,9 +293,7 @@ void zebra_deregister_rnh_pseudowire(vrf_id_t vrf_id, struct zebra_pw *pw)
        listnode_delete(rnh->zebra_pseudowire_list, pw);
        pw->rnh = NULL;
 
-       if (list_isempty(rnh->client_list)
-           && list_isempty(rnh->zebra_pseudowire_list))
-               zebra_delete_rnh(rnh, RNH_NEXTHOP_TYPE);
+       zebra_delete_rnh(rnh, RNH_NEXTHOP_TYPE);
 }
 
 /* Apply the NHT route-map for a client to the route (and nexthops)