From e2e42102677710ed042ba4e47e4c8a96b5ce79a2 Mon Sep 17 00:00:00 2001 From: Carmine Scarpitta Date: Mon, 28 Nov 2022 11:31:58 +0100 Subject: [PATCH] isisd: Add nb command to enable/disable SRv6 Add a northbound command to enable/disable SRv6 on a given IS-IS area. Signed-off-by: Carmine Scarpitta --- isisd/isis_nb.c | 6 ++++++ isisd/isis_nb.h | 2 ++ isisd/isis_nb_config.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c index c81412d24a..dd0b79b95b 100644 --- a/isisd/isis_nb.c +++ b/isisd/isis_nb.c @@ -860,6 +860,12 @@ const struct frr_yang_module_info frr_isisd_info = { .destroy = isis_instance_flex_algo_priority_destroy, }, }, + { + .xpath = "/frr-isisd:isis/instance/segment-routing-srv6/enabled", + .cbs = { + .modify = isis_instance_segment_routing_srv6_enabled_modify, + }, + }, { .xpath = "/frr-isisd:isis/instance/mpls/ldp-sync", .cbs = { diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h index 3b8ddca4f8..1cc4a5ddb4 100644 --- a/isisd/isis_nb.h +++ b/isisd/isis_nb.h @@ -322,6 +322,8 @@ int isis_instance_flex_algo_affinity_mapping_value_modify( struct nb_cb_modify_args *args); int isis_instance_flex_algo_affinity_mapping_value_destroy( struct nb_cb_destroy_args *args); +int isis_instance_segment_routing_srv6_enabled_modify( + struct nb_cb_modify_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 a3d8896e4f..3a56c78de7 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -3446,6 +3446,37 @@ int isis_instance_flex_algo_priority_destroy(struct nb_cb_destroy_args *args) return NB_OK; } +/* + * XPath: /frr-isisd:isis/instance/segment-routing-srv6/enabled + */ +int isis_instance_segment_routing_srv6_enabled_modify( + struct nb_cb_modify_args *args) +{ + struct isis_area *area; + + if (args->event != NB_EV_APPLY) + return NB_OK; + + area = nb_running_get_entry(args->dnode, NULL, true); + area->srv6db.config.enabled = yang_dnode_get_bool(args->dnode, NULL); + + if (area->srv6db.config.enabled) { + if (IS_DEBUG_EVENTS) + zlog_debug( + "Segment Routing over IPv6 (SRv6): OFF -> ON"); + } else { + if (IS_DEBUG_EVENTS) + zlog_debug( + "Segment Routing over IPv6 (SRv6): ON -> OFF"); + } + + /* Regenerate LSPs to advertise SRv6 capabilities or signal that the + * node is no longer SRv6-capable. */ + lsp_regenerate_schedule(area, area->is_type, 0); + + return NB_OK; +} + /* * XPath: /frr-isisd:isis/instance/mpls/ldp-sync */ -- 2.39.5