From 31d76b10456e3da481cd67047dfcd5e810503792 Mon Sep 17 00:00:00 2001 From: Carmine Scarpitta Date: Fri, 27 Jan 2023 16:05:28 +0100 Subject: [PATCH] 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 --- isisd/isis_nb.c | 1 + isisd/isis_nb.h | 2 ++ isisd/isis_nb_config.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) 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 */ -- 2.39.5