From c57ff2d123b822f6257c1ba4926bf7f7a51292f8 Mon Sep 17 00:00:00 2001 From: Carmine Scarpitta Date: Mon, 28 Nov 2022 11:36:34 +0100 Subject: [PATCH] isisd: Add CLI command to enable SRv6 r1# conf r1(config)# router isis r1(config-router)# segment-routing srv6 Signed-off-by: Carmine Scarpitta --- isisd/isis_cli.c | 27 +++++++++++++++++++++++++++ isisd/isisd.c | 10 ++++++++++ lib/command.h | 1 + 3 files changed, 38 insertions(+) diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index b455352699..a567953faf 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -2037,6 +2037,31 @@ void cli_show_isis_prefix_sid_algorithm(struct vty *vty, vty_out(vty, "\n"); } +/* + * XPath: /frr-isisd:isis/instance/segment-routing-srv6/enabled + */ +DEFPY_YANG_NOSH (isis_srv6_enable, + isis_srv6_enable_cmd, + "segment-routing srv6", + SR_STR + "Enable Segment Routing over IPv6 (SRv6)\n") +{ + int ret; + char xpath[XPATH_MAXLEN + 37]; + + snprintf(xpath, sizeof(xpath), "%s/segment-routing-srv6", + VTY_CURR_XPATH); + + nb_cli_enqueue_change(vty, "./segment-routing-srv6/enabled", + NB_OP_MODIFY, "true"); + + ret = nb_cli_apply_changes(vty, NULL); + if (ret == CMD_SUCCESS) + VTY_PUSH_XPATH(ISIS_SRV6_NODE, xpath); + + return ret; +} + void cli_show_isis_srv6_enabled(struct vty *vty, const struct lyd_node *dnode, bool show_defaults) { @@ -3815,6 +3840,8 @@ void isis_cli_init(void) install_element(ISIS_NODE, &isis_frr_remote_lfa_plist_cmd); install_element(ISIS_NODE, &no_isis_frr_remote_lfa_plist_cmd); + install_element(ISIS_NODE, &isis_srv6_enable_cmd); + install_element(INTERFACE_NODE, &isis_passive_cmd); install_element(INTERFACE_NODE, &isis_passwd_cmd); diff --git a/isisd/isisd.c b/isisd/isisd.c index dfb70943c3..f9c12bc7c4 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -3832,6 +3832,13 @@ struct cmd_node isis_flex_algo_node = { }; #endif /* ifdnef FABRICD */ +struct cmd_node isis_srv6_node = { + .name = "isis-srv6", + .node = ISIS_SRV6_NODE, + .parent_node = ISIS_NODE, + .prompt = "%s(config-router-srv6)# ", +}; + void isis_init(void) { /* Install IS-IS top node */ @@ -3944,5 +3951,8 @@ void isis_init(void) install_default(ISIS_FLEX_ALGO_NODE); #endif /* ifdnef FABRICD */ + install_node(&isis_srv6_node); + install_default(ISIS_SRV6_NODE); + spf_backoff_cmd_init(); } diff --git a/lib/command.h b/lib/command.h index 3167c652c5..a0ff42b107 100644 --- a/lib/command.h +++ b/lib/command.h @@ -172,6 +172,7 @@ enum node_type { OPENFABRIC_NODE, /* OpenFabric router configuration node */ VRRP_NODE, /* VRRP node */ BMP_NODE, /* BMP config under router bgp */ + ISIS_SRV6_NODE, /* ISIS SRv6 node */ NODE_TYPE_MAX, /* maximum */ }; /* clang-format on */ -- 2.39.5