]> git.puffer.fish Git - mirror/frr.git/commitdiff
yang, isisd: add TI-LFA YANG nodes and corresponding skeleton callbacks
authorRenato Westphal <renato@opensourcerouting.org>
Mon, 31 Aug 2020 18:34:06 +0000 (15:34 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Wed, 14 Oct 2020 19:27:37 +0000 (16:27 -0300)
Add CLI wrapper commands as well...

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
isisd/isis_cli.c
isisd/isis_nb.c
isisd/isis_nb.h
isisd/isis_nb_config.c
yang/frr-isisd.yang

index d303cbe98d03d94f18473194e6e6a42c794dd313..a270636dde053201c396ef9996e8f3779aeb4e88 100644 (file)
@@ -2367,6 +2367,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
  */
@@ -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);
index 14ea1170c4ed265626503fced27fe9ccbf30f5ff..d04012c4dac6b9cf4d7691983873cd15e1cc4d91 100644 (file)
@@ -818,6 +818,36 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = lib_interface_isis_multi_topology_ipv6_dstsrc_modify,
                        },
                },
+               {
+                       .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 = {
index 8a6d24b845854a14e89b4a56327721820e41ef69..303a7b46963ae227bafb30cbad5d9bde7f5f6985 100644 (file)
@@ -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,
index d5f4c605c46e83c9509be8798e4131e445e3ee0e..50c409ecb059ad938c0a1dae0f548e1017e19aa9 100644 (file)
@@ -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;
 }
index 79941a50e7d15b0507b53652260f3015b4ed9ad2..06d1a793b5a91df0001c384f987e2335d687b126 100644 (file)
@@ -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 {