summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2019-01-04 11:02:35 -0500
committerDonald Sharp <sharpd@cumulusnetworks.com>2019-01-04 11:02:35 -0500
commit8d6848dde21145ce71fd440d7021c965cc3129ff (patch)
tree7e7e6cb683b6b8916121d47dc0be9647e93702b5
parentc05f659a58466dd1a8dfe2a2ebbefeeb0b9c8ee0 (diff)
zebra: Abstract zebra_delete_rnh
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>
-rw-r--r--zebra/zebra_rnh.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/zebra/zebra_rnh.c b/zebra/zebra_rnh.c
index b1fbe8a653..eb224722c3 100644
--- a/zebra/zebra_rnh.c
+++ b/zebra/zebra_rnh.c
@@ -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)