summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-01-27 16:05:28 +0100
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>2023-09-11 17:34:56 +0200
commit31d76b10456e3da481cd67047dfcd5e810503792 (patch)
treeb0022feabb9d5a5a2073e65d28bab050cc51ad5b
parent95096e9585e254f6b56578fb159ffb2495384f9e (diff)
isisd: Add nb command to unset an SRv6 locator
Add a northbound command to unset an SRv6 locator for a specific IS-IS area. This is a wrapper around `isis_srv6_locator_unset()`. Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
-rw-r--r--isisd/isis_nb.c1
-rw-r--r--isisd/isis_nb.h2
-rw-r--r--isisd/isis_nb_config.c35
3 files changed, 38 insertions, 0 deletions
diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c
index 4fae0836bf..23e4901fa1 100644
--- a/isisd/isis_nb.c
+++ b/isisd/isis_nb.c
@@ -871,6 +871,7 @@ const struct frr_yang_module_info frr_isisd_info = {
.xpath = "/frr-isisd:isis/instance/segment-routing-srv6/locator",
.cbs = {
.modify = isis_instance_segment_routing_srv6_locator_modify,
+ .destroy = isis_instance_segment_routing_srv6_locator_destroy,
},
},
{
diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h
index 657c8fb2d0..368e33cb61 100644
--- a/isisd/isis_nb.h
+++ b/isisd/isis_nb.h
@@ -328,6 +328,8 @@ void cli_show_isis_srv6_enabled(struct vty *vty, const struct lyd_node *dnode,
bool show_defaults);
int isis_instance_segment_routing_srv6_locator_modify(
struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_srv6_locator_destroy(
+ struct nb_cb_destroy_args *args);
int isis_instance_mpls_ldp_sync_destroy(struct nb_cb_destroy_args *args);
int isis_instance_mpls_ldp_sync_create(struct nb_cb_create_args *args);
int isis_instance_mpls_ldp_sync_holddown_modify(struct nb_cb_modify_args *args);
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index 5ec17f3937..4b754c727a 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -3527,6 +3527,41 @@ int isis_instance_segment_routing_srv6_locator_modify(
return NB_OK;
}
+int isis_instance_segment_routing_srv6_locator_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ struct isis_area *area;
+ const char *loc_name;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ area = nb_running_get_entry(lyd_parent(lyd_parent(args->dnode)), NULL,
+ true);
+
+ loc_name = yang_dnode_get_string(args->dnode, NULL);
+
+ sr_debug("Trying to unset SRv6 locator %s", loc_name);
+
+ if (strncmp(loc_name, area->srv6db.config.srv6_locator_name,
+ sizeof(area->srv6db.config.srv6_locator_name)) != 0) {
+ sr_debug("SRv6 locator %s is not configured", loc_name);
+ snprintf(args->errmsg, args->errmsg_len,
+ "SRv6 locator %s is not configured", loc_name);
+ return NB_ERR_NO_CHANGES;
+ }
+
+ if (!isis_srv6_locator_unset(area)) {
+ zlog_warn("Failed to unset SRv6 locator");
+ return NB_ERR;
+ }
+
+ sr_debug("Deleted SRv6 locator %s for IS-IS area %s", loc_name,
+ area->area_tag);
+
+ return NB_OK;
+}
+
/*
* XPath: /frr-isisd:isis/instance/mpls/ldp-sync
*/