summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2020-08-31 15:34:06 -0300
committerRenato Westphal <renato@opensourcerouting.org>2020-10-14 16:27:37 -0300
commited5d70327989fe8dd9e72f011de04a9a56fe7db6 (patch)
tree7efc21024463bcdf906938d64c3b1388165a047f
parent6431621e4eb11c4b85d6c29f79d060d59b0ed5d2 (diff)
yang, isisd: add TI-LFA YANG nodes and corresponding skeleton callbacks
Add CLI wrapper commands as well... Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
-rw-r--r--isisd/isis_cli.c98
-rw-r--r--isisd/isis_nb.c30
-rw-r--r--isisd/isis_nb.h10
-rw-r--r--isisd/isis_nb_config.c77
-rw-r--r--yang/frr-isisd.yang34
5 files changed, 249 insertions, 0 deletions
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index d303cbe98d..a270636dde 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -2368,6 +2368,102 @@ void cli_show_ip_isis_priority(struct vty *vty, struct lyd_node *dnode,
}
/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/ti-lfa/enable
+ */
+DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
+ "[no] isis fast-reroute ti-lfa [level-1|level-2]$level [node-protection$node_protection]",
+ NO_STR
+ "IS-IS routing protocol\n"
+ "Interface IP Fast-reroute configuration\n"
+ "Enable TI-LFA computation\n"
+ "Enable TI-LFA computation for Level 1 only\n"
+ "Enable TI-LFA computation for Level 2 only\n"
+ "Protect against node failures\n")
+{
+ if (!level || strmatch(level, "level-1")) {
+ if (no) {
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable",
+ NB_OP_MODIFY, "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection",
+ NB_OP_MODIFY, "false");
+ } else {
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable",
+ NB_OP_MODIFY, "true");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection",
+ NB_OP_MODIFY,
+ node_protection ? "true" : "false");
+ }
+ }
+ if (!level || strmatch(level, "level-2")) {
+ if (no) {
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable",
+ NB_OP_MODIFY, "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection",
+ NB_OP_MODIFY, "false");
+ } else {
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable",
+ NB_OP_MODIFY, "true");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection",
+ NB_OP_MODIFY,
+ node_protection ? "true" : "false");
+ }
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_ip_isis_ti_lfa(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults)
+{
+ bool l1_enabled, l2_enabled;
+ bool l1_node_protection, l2_node_protection;
+
+ l1_enabled = yang_dnode_get_bool(dnode, "./level-1/ti-lfa/enable");
+ l2_enabled = yang_dnode_get_bool(dnode, "./level-2/ti-lfa/enable");
+ l1_node_protection =
+ yang_dnode_get_bool(dnode, "./level-1/ti-lfa/node-protection");
+ l2_node_protection =
+ yang_dnode_get_bool(dnode, "./level-2/ti-lfa/node-protection");
+
+ if (l1_enabled == l2_enabled
+ && l1_node_protection == l2_node_protection) {
+ vty_out(vty, " isis fast-reroute ti-lfa");
+ if (l1_node_protection)
+ vty_out(vty, " node-protection");
+ vty_out(vty, "\n");
+ } else {
+ if (l1_enabled) {
+ vty_out(vty, " isis fast-reroute ti-lfa level-1");
+ if (l1_node_protection)
+ vty_out(vty, " node-protection");
+ vty_out(vty, "\n");
+ }
+ if (l2_enabled) {
+ vty_out(vty, " isis fast-reroute ti-lfa level-2");
+ if (l2_node_protection)
+ vty_out(vty, " node-protection");
+ vty_out(vty, "\n");
+ }
+ }
+}
+
+/*
* XPath: /frr-isisd:isis/instance/log-adjacency-changes
*/
DEFPY_YANG(log_adj_changes, log_adj_changes_cmd, "[no] log-adjacency-changes",
@@ -2661,6 +2757,8 @@ void isis_cli_init(void)
install_element(INTERFACE_NODE, &isis_priority_cmd);
install_element(INTERFACE_NODE, &no_isis_priority_cmd);
+ install_element(INTERFACE_NODE, &isis_ti_lfa_cmd);
+
install_element(ISIS_NODE, &log_adj_changes_cmd);
install_element(ISIS_NODE, &isis_mpls_ldp_sync_cmd);
diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c
index 14ea1170c4..d04012c4da 100644
--- a/isisd/isis_nb.c
+++ b/isisd/isis_nb.c
@@ -819,6 +819,36 @@ const struct frr_yang_module_info frr_isisd_info = {
},
},
{
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute",
+ .cbs = {
+ .cli_show = cli_show_ip_isis_ti_lfa,
+ }
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify,
+ }
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify,
+ }
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify,
+ }
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify,
+ }
+ },
+ {
.xpath = "/frr-interface:lib/interface/state/frr-isisd:isis",
.cbs = {
.get_elem = lib_interface_state_isis_get_elem,
diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h
index 8a6d24b845..303a7b4696 100644
--- a/isisd/isis_nb.h
+++ b/isisd/isis_nb.h
@@ -256,6 +256,14 @@ int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
int lib_interface_isis_mpls_ldp_sync_modify(struct nb_cb_modify_args *args);
int lib_interface_isis_mpls_holddown_modify(struct nb_cb_modify_args *args);
int lib_interface_isis_mpls_holddown_destroy(struct nb_cb_destroy_args *args);
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify(
+ struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify(
+ struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify(
+ struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify(
+ struct nb_cb_modify_args *args);
struct yang_data *
lib_interface_state_isis_get_elem(struct nb_cb_get_elem_args *args);
const void *lib_interface_state_isis_adjacencies_adjacency_get_next(
@@ -432,6 +440,8 @@ void cli_show_ip_isis_mt_ipv6_mgmt(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);
void cli_show_ip_isis_mt_ipv6_dstsrc(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);
+void cli_show_ip_isis_ti_lfa(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults);
void cli_show_ip_isis_circ_type(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);
void cli_show_ip_isis_network_type(struct vty *vty, struct lyd_node *dnode,
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index d5f4c605c4..50c409ecb0 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -2934,5 +2934,82 @@ int lib_interface_isis_mpls_holddown_destroy(struct nb_cb_destroy_args *args)
ldp_sync_info->holddown = LDP_IGP_SYNC_HOLDDOWN_DEFAULT;
break;
}
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable
+ */
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection
+ */
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable
+ */
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection
+ */
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
return NB_OK;
}
diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang
index 79941a50e7..06d1a793b5 100644
--- a/yang/frr-isisd.yang
+++ b/yang/frr-isisd.yang
@@ -336,6 +336,26 @@ module frr-isisd {
}
}
+ grouping interface-config-ti-lfa {
+ container ti-lfa {
+ description
+ "TI-LFA configuration.";
+ leaf enable {
+ type boolean;
+ default false;
+ description
+ "Enables TI-LFA computation.";
+ }
+ leaf node-protection {
+ type boolean;
+ must ". = 'false' or ../enable = 'true'";
+ default false;
+ description
+ "Node protection is provided by the alternate.";
+ }
+ }
+ }
+
grouping interface-config {
description
"Interface configuration grouping";
@@ -638,6 +658,20 @@ module frr-isisd {
}
}
+ container fast-reroute {
+ description
+ "Interface IP Fast-reroute configuration.";
+ container level-1 {
+ description
+ "Level-1 IP Fast-reroute configuration.";
+ uses interface-config-ti-lfa;
+ }
+ container level-2 {
+ description
+ "Level-2 IP Fast-reroute configuration.";
+ uses interface-config-ti-lfa;
+ }
+ }
}
grouping adjacency-state {