]> git.puffer.fish Git - mirror/frr.git/commitdiff
yang, isisd: add RLFA nodes, skeleton callbacks and CLI commands
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 26 Nov 2020 00:01:14 +0000 (21:01 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Sat, 9 Jan 2021 01:22:11 +0000 (22:22 -0300)
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 392b9e675d1bd53e5c31aaba4d2c5de33471f68b..5ca70eab0f88ca81b7aa488f61ba1fbc249c79f3 100644 (file)
@@ -1947,6 +1947,62 @@ void cli_show_isis_frr_lfa_load_sharing(struct vty *vty, struct lyd_node *dnode,
                dnode->parent->parent->schema->name);
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/fast-reroute/level-{1,2}/remote-lfa/prefix-list
+ */
+DEFPY_YANG (isis_frr_remote_lfa_plist,
+       isis_frr_remote_lfa_plist_cmd,
+       "fast-reroute remote-lfa prefix-list WORD$plist [<level-1|level-2>$level]",
+       "Configure Fast ReRoute\n"
+       "Enable remote LFA related configuration\n"
+       "Filter PQ node router ID based on prefix list\n"
+       "Prefix-list name\n"
+       "Enable router ID filtering for level-1 only\n"
+       "Enable router ID filtering for level-2 only\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(
+                       vty, "./fast-reroute/level-1/remote-lfa/prefix-list",
+                       NB_OP_MODIFY, plist);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(
+                       vty, "./fast-reroute/level-2/remote-lfa/prefix-list",
+                       NB_OP_MODIFY, plist);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG (no_isis_frr_remote_lfa_plist,
+       no_isis_frr_remote_lfa_plist_cmd,
+       "no fast-reroute remote-lfa prefix-list [WORD] [<level-1|level-2>$level]",
+       NO_STR
+       "Configure Fast ReRoute\n"
+       "Enable remote LFA related configuration\n"
+       "Filter PQ node router ID based on prefix list\n"
+       "Prefix-list name\n"
+       "Enable router ID filtering for level-1 only\n"
+       "Enable router ID filtering for level-2 only\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(
+                       vty, "./fast-reroute/level-1/remote-lfa/prefix-list",
+                       NB_OP_DESTROY, NULL);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(
+                       vty, "./fast-reroute/level-2/remote-lfa/prefix-list",
+                       NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_isis_frr_remote_lfa_plist(struct vty *vty, struct lyd_node *dnode,
+                                       bool show_defaults)
+{
+       vty_out(vty, " fast-reroute remote-lfa prefix-list %s %s\n",
+               yang_dnode_get_string(dnode, NULL),
+               dnode->parent->parent->schema->name);
+}
+
 /*
  * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
  */
@@ -2630,6 +2686,25 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
                }
        }
 
+       /* Remote LFA */
+       l1_enabled = yang_dnode_get_bool(dnode, "./level-1/remote-lfa/enable");
+       l2_enabled = yang_dnode_get_bool(dnode, "./level-2/remote-lfa/enable");
+
+       if (l1_enabled || l2_enabled) {
+               if (l1_enabled == l2_enabled) {
+                       vty_out(vty,
+                               " isis fast-reroute remote-lfa tunnel mpls-ldp\n");
+                       vty_out(vty, "\n");
+               } else {
+                       if (l1_enabled)
+                               vty_out(vty,
+                                       " isis fast-reroute remote-lfa tunnel mpls-ldp level-1\n");
+                       if (l2_enabled)
+                               vty_out(vty,
+                                       " isis fast-reroute remote-lfa tunnel mpls-ldp level-2\n");
+               }
+       }
+
        /* TI-LFA */
        l1_enabled = yang_dnode_get_bool(dnode, "./level-1/ti-lfa/enable");
        l2_enabled = yang_dnode_get_bool(dnode, "./level-2/ti-lfa/enable");
@@ -2760,6 +2835,104 @@ void cli_show_frr_lfa_exclude_interface(struct vty *vty, struct lyd_node *dnode,
                yang_dnode_get_string(dnode, NULL));
 }
 
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-{1,2}/remote-lfa/enable
+ */
+DEFPY(isis_remote_lfa, isis_remote_lfa_cmd,
+      "[no] isis fast-reroute remote-lfa tunnel mpls-ldp [level-1|level-2]$level",
+      NO_STR
+      "IS-IS routing protocol\n"
+      "Interface IP Fast-reroute configuration\n"
+      "Enable remote LFA computation\n"
+      "Enable remote LFA computation using tunnels\n"
+      "Use MPLS LDP tunnel to reach the remote LFA node\n"
+      "Enable LFA computation for Level 1 only\n"
+      "Enable LFA computation for Level 2 only\n")
+{
+       if (!level || strmatch(level, "level-1")) {
+               if (no) {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-1/remote-lfa/enable",
+                               NB_OP_MODIFY, "false");
+               } else {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-1/remote-lfa/enable",
+                               NB_OP_MODIFY, "true");
+               }
+       }
+       if (!level || strmatch(level, "level-2")) {
+               if (no) {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-2/remote-lfa/enable",
+                               NB_OP_MODIFY, "false");
+               } else {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-2/remote-lfa/enable",
+                               NB_OP_MODIFY, "true");
+               }
+       }
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-{1,2}/remote-lfa/maximum-metric
+ */
+DEFPY(isis_remote_lfa_max_metric, isis_remote_lfa_max_metric_cmd,
+      "[no] isis fast-reroute remote-lfa maximum-metric (1-16777215)$metric [level-1|level-2]$level",
+      NO_STR
+      "IS-IS routing protocol\n"
+      "Interface IP Fast-reroute configuration\n"
+      "Enable remote LFA computation\n"
+      "Limit remote LFA node selection within the metric\n"
+      "Value of the metric\n"
+      "Enable LFA computation for Level 1 only\n"
+      "Enable LFA computation for Level 2 only\n")
+{
+       if (!level || strmatch(level, "level-1")) {
+               if (no) {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-1/remote-lfa/maximum-metric",
+                               NB_OP_DESTROY, NULL);
+               } else {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-1/remote-lfa/maximum-metric",
+                               NB_OP_MODIFY, metric_str);
+               }
+       }
+       if (!level || strmatch(level, "level-2")) {
+               if (no) {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-2/remote-lfa/maximum-metric",
+                               NB_OP_DESTROY, NULL);
+               } else {
+                       nb_cli_enqueue_change(
+                               vty,
+                               "./frr-isisd:isis/fast-reroute/level-2/remote-lfa/maximum-metric",
+                               NB_OP_MODIFY, metric_str);
+               }
+       }
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_frr_remote_lfa_max_metric(struct vty *vty, struct lyd_node *dnode,
+                                       bool show_defaults)
+{
+       vty_out(vty, " isis fast-reroute remote-lfa maximum-metric %s %s\n",
+               yang_dnode_get_string(dnode, NULL),
+               dnode->parent->parent->schema->name);
+}
+
 /*
  * XPath: /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-{1,2}/ti-lfa/enable
  */
@@ -3085,6 +3258,8 @@ void isis_cli_init(void)
        install_element(ISIS_NODE, &isis_frr_lfa_priority_limit_cmd);
        install_element(ISIS_NODE, &isis_frr_lfa_tiebreaker_cmd);
        install_element(ISIS_NODE, &isis_frr_lfa_load_sharing_cmd);
+       install_element(ISIS_NODE, &isis_frr_remote_lfa_plist_cmd);
+       install_element(ISIS_NODE, &no_isis_frr_remote_lfa_plist_cmd);
 
        install_element(INTERFACE_NODE, &isis_passive_cmd);
 
@@ -3122,6 +3297,8 @@ void isis_cli_init(void)
 
        install_element(INTERFACE_NODE, &isis_lfa_cmd);
        install_element(INTERFACE_NODE, &isis_lfa_exclude_interface_cmd);
+       install_element(INTERFACE_NODE, &isis_remote_lfa_cmd);
+       install_element(INTERFACE_NODE, &isis_remote_lfa_max_metric_cmd);
        install_element(INTERFACE_NODE, &isis_ti_lfa_cmd);
 
        install_element(ISIS_NODE, &log_adj_changes_cmd);
index c3d2f238dd913721d12fe149299fc0854e961916..a02e6a45b183139440a2d1baed04e70b589a2a44 100644 (file)
@@ -484,6 +484,14 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = isis_instance_fast_reroute_level_1_lfa_tiebreaker_type_modify,
                        }
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/fast-reroute/level-1/remote-lfa/prefix-list",
+                       .cbs = {
+                               .cli_show = cli_show_isis_frr_remote_lfa_plist,
+                               .modify = isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_modify,
+                               .destroy = isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/fast-reroute/level-2/lfa/load-sharing",
                        .cbs = {
@@ -513,6 +521,14 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = isis_instance_fast_reroute_level_2_lfa_tiebreaker_type_modify,
                        }
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/fast-reroute/level-2/remote-lfa/prefix-list",
+                       .cbs = {
+                               .cli_show = cli_show_isis_frr_remote_lfa_plist,
+                               .modify = isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_modify,
+                               .destroy = isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/log-adjacency-changes",
                        .cbs = {
@@ -926,6 +942,20 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .destroy = lib_interface_isis_fast_reroute_level_1_lfa_exclude_interface_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/remote-lfa/enable",
+                       .cbs = {
+                               .modify = lib_interface_isis_fast_reroute_level_1_remote_lfa_enable_modify,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/remote-lfa/maximum-metric",
+                       .cbs = {
+                               .cli_show = cli_show_frr_remote_lfa_max_metric,
+                               .modify = lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_modify,
+                               .destroy = lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable",
                        .cbs = {
@@ -952,6 +982,20 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .destroy = lib_interface_isis_fast_reroute_level_2_lfa_exclude_interface_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/remote-lfa/enable",
+                       .cbs = {
+                               .modify = lib_interface_isis_fast_reroute_level_2_remote_lfa_enable_modify,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/remote-lfa/maximum-metric",
+                       .cbs = {
+                               .cli_show = cli_show_frr_remote_lfa_max_metric,
+                               .modify = lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_modify,
+                               .destroy = lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable",
                        .cbs = {
index f529f20861d106959555dabe290b5f936650407c..679bc6345dd79b9c267713a11dc39c261564e2ab 100644 (file)
@@ -183,6 +183,10 @@ int isis_instance_fast_reroute_level_1_lfa_tiebreaker_destroy(
        struct nb_cb_destroy_args *args);
 int isis_instance_fast_reroute_level_1_lfa_tiebreaker_type_modify(
        struct nb_cb_modify_args *args);
+int isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_destroy(
+       struct nb_cb_destroy_args *args);
 int isis_instance_fast_reroute_level_2_lfa_load_sharing_modify(
        struct nb_cb_modify_args *args);
 int isis_instance_fast_reroute_level_2_lfa_priority_limit_modify(
@@ -195,6 +199,10 @@ int isis_instance_fast_reroute_level_2_lfa_tiebreaker_destroy(
        struct nb_cb_destroy_args *args);
 int isis_instance_fast_reroute_level_2_lfa_tiebreaker_type_modify(
        struct nb_cb_modify_args *args);
+int isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_destroy(
+       struct nb_cb_destroy_args *args);
 int isis_instance_log_adjacency_changes_modify(struct nb_cb_modify_args *args);
 int isis_instance_mpls_te_create(struct nb_cb_create_args *args);
 int isis_instance_mpls_te_destroy(struct nb_cb_destroy_args *args);
@@ -300,6 +308,12 @@ int lib_interface_isis_fast_reroute_level_1_lfa_exclude_interface_create(
        struct nb_cb_create_args *args);
 int lib_interface_isis_fast_reroute_level_1_lfa_exclude_interface_destroy(
        struct nb_cb_destroy_args *args);
+int lib_interface_isis_fast_reroute_level_1_remote_lfa_enable_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_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(
@@ -310,6 +324,12 @@ int lib_interface_isis_fast_reroute_level_2_lfa_exclude_interface_create(
        struct nb_cb_create_args *args);
 int lib_interface_isis_fast_reroute_level_2_lfa_exclude_interface_destroy(
        struct nb_cb_destroy_args *args);
+int lib_interface_isis_fast_reroute_level_2_remote_lfa_enable_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_destroy(
+       struct nb_cb_destroy_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(
@@ -467,6 +487,8 @@ void cli_show_isis_frr_lfa_tiebreaker(struct vty *vty, struct lyd_node *dnode,
                                      bool show_defaults);
 void cli_show_isis_frr_lfa_load_sharing(struct vty *vty, struct lyd_node *dnode,
                                        bool show_defaults);
+void cli_show_isis_frr_remote_lfa_plist(struct vty *vty, struct lyd_node *dnode,
+                                       bool show_defaults);
 void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
                              bool show_defaults);
 void cli_show_ip_isis_password(struct vty *vty, struct lyd_node *dnode,
@@ -503,6 +525,8 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
                          bool show_defaults);
 void cli_show_frr_lfa_exclude_interface(struct vty *vty, struct lyd_node *dnode,
                                        bool show_defaults);
+void cli_show_frr_remote_lfa_max_metric(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 84ca801d2bdb2c097cfd8c17cd394ad1c8aad969..e3222e23c9c81a567bf54c4ab682d651aaef7ad6 100644 (file)
@@ -1542,6 +1542,39 @@ int isis_instance_fast_reroute_level_1_lfa_tiebreaker_type_modify(
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/fast-reroute/level-1/remote-lfa/prefix-list
+ */
+int isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_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;
+}
+
+int isis_instance_fast_reroute_level_1_remote_lfa_prefix_list_destroy(
+       struct nb_cb_destroy_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-isisd:isis/instance/fast-reroute/level-2/lfa/load-sharing
  */
@@ -1652,6 +1685,39 @@ int isis_instance_fast_reroute_level_2_lfa_tiebreaker_type_modify(
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/fast-reroute/level-2/remote-lfa/prefix-list
+ */
+int isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_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;
+}
+
+int isis_instance_fast_reroute_level_2_remote_lfa_prefix_list_destroy(
+       struct nb_cb_destroy_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-isisd:isis/instance/log-adjacency-changes
  */
@@ -3437,6 +3503,60 @@ int lib_interface_isis_fast_reroute_level_1_lfa_exclude_interface_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/remote-lfa/enable
+ */
+int lib_interface_isis_fast_reroute_level_1_remote_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/remote-lfa/maximum-metric
+ */
+int lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_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;
+}
+
+int lib_interface_isis_fast_reroute_level_1_remote_lfa_maximum_metric_destroy(
+       struct nb_cb_destroy_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/enable
@@ -3560,6 +3680,59 @@ int lib_interface_isis_fast_reroute_level_2_lfa_exclude_interface_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/remote-lfa/enable
+ */
+int lib_interface_isis_fast_reroute_level_2_remote_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/remote-lfa/maximum-metric
+ */
+int lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_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;
+}
+
+int lib_interface_isis_fast_reroute_level_2_remote_lfa_maximum_metric_destroy(
+       struct nb_cb_destroy_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
index d751a19f0772347e6c02751c5876204456dc4b6d..812dd4159d7b49814b57f9f96900bac5e8feea5d 100644 (file)
@@ -248,6 +248,10 @@ module frr-isisd {
     type string;
   }
 
+  typedef prefix-list-ref {
+    type string;
+  }
+
   grouping redistribute-attributes {
     description
       "Common optional attributes of any redistribute entry.";
@@ -410,6 +414,19 @@ module frr-isisd {
     }
   }
 
+  grouping global-config-remote-lfa {
+    container remote-lfa {
+      description
+        "Remote LFA configuration.";
+
+      leaf prefix-list {
+        type prefix-list-ref;
+        description
+          "Filter PQ node router ID based on prefix list.";
+      }
+    }
+  }
+
   grouping interface-config-lfa {
     container lfa {
       description
@@ -428,6 +445,32 @@ module frr-isisd {
     }
   }
 
+  grouping interface-config-remote-lfa {
+    container remote-lfa {
+      description
+        "Remote LFA configuration.";
+
+      leaf enable {
+        type boolean;
+        default false;
+        description
+          "Enables remote LFA computation using LDP tunnels.";
+        must ". = 'false' or ../../lfa/enable = 'true'" {
+          error-message
+            "Remote LFA depends on classic LFA being configured in the interface.";
+        }
+
+      }
+      leaf maximum-metric {
+        type uint32 {
+          range "1..16777215";
+        }
+        description
+          "Limit remote LFA node selection within the metric.";
+      }
+    }
+  }
+
   grouping interface-config-ti-lfa {
     container ti-lfa {
       description
@@ -761,6 +804,7 @@ module frr-isisd {
             "Can't enable both classic LFA and TI-LFA in the same interface.";
         }
         uses interface-config-lfa;
+        uses interface-config-remote-lfa;
         uses interface-config-ti-lfa;
       }
       container level-2 {
@@ -771,6 +815,7 @@ module frr-isisd {
             "Can't enable both classic LFA and TI-LFA in the same interface.";
         }
         uses interface-config-lfa;
+        uses interface-config-remote-lfa;
         uses interface-config-ti-lfa;
       }
     }
@@ -1394,11 +1439,13 @@ module frr-isisd {
           description
             "Level-1 IP Fast-reroute configuration.";
           uses global-config-lfa;
+          uses global-config-remote-lfa;
         }
         container level-2 {
           description
             "Level-2 IP Fast-reroute configuration.";
           uses global-config-lfa;
+          uses global-config-remote-lfa;
         }
       }