]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib,vtysh,isisd,yang: algo cli/yang/callbacks
authorHiroki Shirokura <hiroki.shirokura@linecorp.com>
Sat, 18 Dec 2021 08:11:58 +0000 (08:11 +0000)
committerLouis Scalbert <louis.scalbert@6wind.com>
Tue, 18 Apr 2023 08:13:59 +0000 (10:13 +0200)
Define the IS-IS flex-algo structure in yang, the CLI configuration
commands and the skeletons of frontend and backend functions that are
called by the CLI code.

Signed-off-by: Hiroki Shirokura <hiroki.shirokura@linecorp.com>
Signed-off-by: Eric Kinzie <ekinzie@labn.net>
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
isisd/isis_cli.c
isisd/isis_nb.c
isisd/isis_nb.h
isisd/isis_nb_config.c
isisd/isisd.c
lib/command.h
vtysh/vtysh.c
yang/frr-isisd.yang

index f4da01bb8e5131dba4e0f03be052788664bfb1c1..c93bcaf8fd9eea5d939d42c5a09171a05769c442 100644 (file)
@@ -1126,6 +1126,52 @@ void cli_show_isis_purge_origin(struct vty *vty, const struct lyd_node *dnode,
        vty_out(vty, " purge-originator\n");
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/admin-group-send-zero
+ */
+DEFPY_YANG(isis_admin_group_send_zero, isis_admin_group_send_zero_cmd,
+          "[no] admin-group-send-zero",
+          NO_STR
+          "Allow sending the default admin-group value of 0x00000000.\n")
+{
+       nb_cli_enqueue_change(vty, "./admin-group-send-zero", NB_OP_MODIFY,
+                             no ? "false" : "true");
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_isis_admin_group_send_zero(struct vty *vty,
+                                        const struct lyd_node *dnode,
+                                        bool show_defaults)
+{
+       if (!yang_dnode_get_bool(dnode, NULL))
+               vty_out(vty, " no");
+       vty_out(vty, " admin-group-send-zero\n");
+}
+
+
+/*
+ * XPath: /frr-isisd:isis/instance/asla-legacy-flag
+ */
+DEFPY_HIDDEN(isis_asla_legacy_flag, isis_asla_legacy_flag_cmd,
+            "[no] asla-legacy-flag",
+            NO_STR "Set the legacy flag (aka. L-FLAG) in the ASLA Sub-TLV.\n")
+{
+       nb_cli_enqueue_change(vty, "./asla-legacy-flag", NB_OP_MODIFY,
+                             no ? "false" : "true");
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_isis_asla_legacy_flag(struct vty *vty,
+                                   const struct lyd_node *dnode,
+                                   bool show_defaults)
+{
+       if (!yang_dnode_get_bool(dnode, NULL))
+               vty_out(vty, " no");
+       vty_out(vty, " asla-legacy-flag\n");
+}
+
 /*
  * XPath: /frr-isisd:isis/instance/mpls-te
  */
@@ -3298,6 +3344,92 @@ void cli_show_isis_mpls_if_ldp_sync_holddown(struct vty *vty,
                yang_dnode_get_string(dnode, NULL));
 }
 
+DEFPY_YANG_NOSH(flex_algo, flex_algo_cmd, "flex-algo (128-255)$algorithm",
+               "Flexible Algorithm\n"
+               "Flexible Algorithm Number\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(no_flex_algo, no_flex_algo_cmd, "no flex-algo (128-255)$algorithm",
+          NO_STR
+          "Flexible Algorithm\n"
+          "Flexible Algorithm Number\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(advertise_definition, advertise_definition_cmd,
+          "[no] advertise-definition",
+          NO_STR "Advertise Local Flexible Algorithm\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(affinity_include_any, affinity_include_any_cmd,
+          "[no] affinity include-any NAME...",
+          NO_STR
+          "Affinity configuration\n"
+          "Any Include with\n"
+          "Include NAME list\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(affinity_include_all, affinity_include_all_cmd,
+          "[no] affinity include-all NAME...",
+          NO_STR
+          "Affinity configuration\n"
+          "All Include with\n"
+          "Include NAME list\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(affinity_exclude_any, affinity_exclude_any_cmd,
+          "[no] affinity exclude-any NAME...",
+          NO_STR
+          "Affinity configuration\n"
+          "Any Exclude with\n"
+          "Exclude NAME list\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(prefix_metric, prefix_metric_cmd, "[no] prefix-metric",
+          NO_STR "Use Flex-Algo Prefix Metric\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(metric_type, metric_type_cmd,
+          "[no] metric-type [igp$igp|te$te|delay$delay]",
+          NO_STR
+          "Metric-type used by flex-algo calculation\n"
+          "Use IGP metric (default)\n"
+          "Use Delay as metric\n"
+          "Use Traffic Engineering metric\n")
+{
+       return CMD_SUCCESS;
+}
+
+DEFPY_YANG(priority, priority_cmd, "[no] priority (0-255)$priority",
+          NO_STR
+          "Flex-Algo definition priority\n"
+          "Priority value\n")
+{
+       return CMD_SUCCESS;
+}
+
+void cli_show_isis_flex_algo(struct vty *vty, const struct lyd_node *dnode,
+                            bool show_defaults)
+{
+}
+
+void cli_show_isis_flex_algo_end(struct vty *vty, const struct lyd_node *dnode)
+{
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -3356,6 +3488,9 @@ void isis_cli_init(void)
 
        install_element(ISIS_NODE, &area_purge_originator_cmd);
 
+       install_element(ISIS_NODE, &isis_admin_group_send_zero_cmd);
+       install_element(ISIS_NODE, &isis_asla_legacy_flag_cmd);
+
        install_element(ISIS_NODE, &isis_mpls_te_on_cmd);
        install_element(ISIS_NODE, &no_isis_mpls_te_on_cmd);
        install_element(ISIS_NODE, &isis_mpls_te_router_addr_cmd);
@@ -3439,6 +3574,16 @@ void isis_cli_init(void)
        install_element(INTERFACE_NODE, &isis_mpls_if_ldp_sync_cmd);
        install_element(INTERFACE_NODE, &isis_mpls_if_ldp_sync_holddown_cmd);
        install_element(INTERFACE_NODE, &no_isis_mpls_if_ldp_sync_holddown_cmd);
+
+       install_element(ISIS_NODE, &flex_algo_cmd);
+       install_element(ISIS_NODE, &no_flex_algo_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &advertise_definition_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &affinity_include_any_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &affinity_include_all_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &affinity_exclude_any_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &prefix_metric_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &metric_type_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &priority_cmd);
 }
 
 #endif /* ifndef FABRICD */
index 38817a01ee26fd569938a2f5495c3a139e61fb47..6da8fa2d28e2a6952f0022ea23de4d8db3a090c8 100644 (file)
@@ -102,6 +102,20 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = isis_instance_purge_originator_modify,
                        },
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/admin-group-send-zero",
+                       .cbs = {
+                               .cli_show = cli_show_isis_admin_group_send_zero,
+                               .modify = isis_instance_admin_group_send_zero_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/asla-legacy-flag",
+                       .cbs = {
+                               .cli_show = cli_show_isis_asla_legacy_flag,
+                               .modify = isis_instance_asla_legacy_flag_modify,
+                       },
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/lsp/mtu",
                        .cbs = {
@@ -722,6 +736,84 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = isis_instance_segment_routing_algorithm_prefix_sid_n_flag_clear_modify,
                        },
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo",
+                       .cbs = {
+                               .cli_show = cli_show_isis_flex_algo,
+                               .cli_show_end = cli_show_isis_flex_algo_end,
+                               .create = isis_instance_flex_algo_create,
+                               .destroy = isis_instance_flex_algo_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/advertise-definition",
+                       .cbs = {
+                               .modify = isis_instance_flex_algo_advertise_definition_modify,
+                               .destroy = isis_instance_flex_algo_advertise_definition_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/affinity-include-alls/affinity-include-all",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_affinity_include_all_create,
+                               .destroy = isis_instance_flex_algo_affinity_include_all_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/affinity-include-anies/affinity-include-any",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_affinity_include_any_create,
+                               .destroy = isis_instance_flex_algo_affinity_include_any_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/affinity-exclude-anies/affinity-exclude-any",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_affinity_exclude_any_create,
+                               .destroy = isis_instance_flex_algo_affinity_exclude_any_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/prefix-metric",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_prefix_metric_create,
+                               .destroy = isis_instance_flex_algo_prefix_metric_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/metric-type",
+                       .cbs = {
+                               .modify = isis_instance_flex_algo_metric_type_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/dplane-sr-mpls",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_dplane_sr_mpls_create,
+                               .destroy = isis_instance_flex_algo_dplane_sr_mpls_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/dplane-srv6",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_dplane_srv6_create,
+                               .destroy = isis_instance_flex_algo_dplane_srv6_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/dplane-ip",
+                       .cbs = {
+                               .create = isis_instance_flex_algo_dplane_ip_create,
+                               .destroy = isis_instance_flex_algo_dplane_ip_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/flex-algos/flex-algo/priority",
+                       .cbs = {
+                               .modify = isis_instance_flex_algo_priority_modify,
+                               .destroy = isis_instance_flex_algo_priority_destroy,
+                       },
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/mpls/ldp-sync",
                        .cbs = {
index 72d6617c688115bed3bd67b89eab2997f38fc282..13efa36d789e051bd26b5b4a2745c488c1fcb6a9 100644 (file)
@@ -29,6 +29,8 @@ int isis_instance_overload_on_startup_modify(struct nb_cb_modify_args *args);
 int isis_instance_advertise_high_metrics_modify(struct nb_cb_modify_args *args);
 int isis_instance_metric_style_modify(struct nb_cb_modify_args *args);
 int isis_instance_purge_originator_modify(struct nb_cb_modify_args *args);
+int isis_instance_admin_group_send_zero_modify(struct nb_cb_modify_args *args);
+int isis_instance_asla_legacy_flag_modify(struct nb_cb_modify_args *args);
 int isis_instance_lsp_mtu_modify(struct nb_cb_modify_args *args);
 int isis_instance_advertise_passive_only_modify(struct nb_cb_modify_args *args);
 int isis_instance_lsp_refresh_interval_level_1_modify(
@@ -265,6 +267,51 @@ int isis_instance_segment_routing_algorithm_prefix_sid_last_hop_behavior_modify(
        struct nb_cb_modify_args *args);
 int isis_instance_segment_routing_algorithm_prefix_sid_n_flag_clear_modify(
        struct nb_cb_modify_args *args);
+int isis_instance_flex_algo_create(struct nb_cb_create_args *args);
+int isis_instance_flex_algo_destroy(struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_advertise_definition_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_flex_algo_advertise_definition_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_affinity_include_any_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_affinity_include_any_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_affinity_include_all_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_affinity_include_all_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_affinity_exclude_any_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_affinity_exclude_any_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_prefix_metric_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_prefix_metric_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_dplane_sr_mpls_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_dplane_sr_mpls_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_dplane_srv6_create(struct nb_cb_create_args *args);
+int isis_instance_flex_algo_dplane_srv6_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_dplane_ip_create(struct nb_cb_create_args *args);
+int isis_instance_flex_algo_dplane_ip_destroy(struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_metric_type_modify(struct nb_cb_modify_args *args);
+int isis_instance_flex_algo_priority_modify(struct nb_cb_modify_args *args);
+int isis_instance_flex_algo_priority_destroy(struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_frr_disable_modify(struct nb_cb_modify_args *args);
+int isis_instance_flex_algo_frr_disable_destroy(
+       struct nb_cb_destroy_args *args);
+int isis_instance_flex_algo_affinity_mapping_create(
+       struct nb_cb_create_args *args);
+int isis_instance_flex_algo_affinity_mapping_destroy(
+       struct nb_cb_destroy_args *args);
+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_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);
@@ -511,6 +558,12 @@ void cli_show_isis_purge_origin(struct vty *vty, const struct lyd_node *dnode,
                                bool show_defaults);
 void cli_show_isis_mpls_te(struct vty *vty, const struct lyd_node *dnode,
                           bool show_defaults);
+void cli_show_isis_admin_group_send_zero(struct vty *vty,
+                                        const struct lyd_node *dnode,
+                                        bool show_defaults);
+void cli_show_isis_asla_legacy_flag(struct vty *vty,
+                                   const struct lyd_node *dnode,
+                                   bool show_defaults);
 void cli_show_isis_mpls_te_router_addr(struct vty *vty,
                                       const struct lyd_node *dnode,
                                       bool show_defaults);
@@ -642,6 +695,9 @@ void cli_show_isis_mpls_if_ldp_sync(struct vty *vty,
 void cli_show_isis_mpls_if_ldp_sync_holddown(struct vty *vty,
                                             const struct lyd_node *dnode,
                                             bool show_defaults);
+void cli_show_isis_flex_algo(struct vty *vty, const struct lyd_node *dnode,
+                            bool show_defaults);
+void cli_show_isis_flex_algo_end(struct vty *vty, const struct lyd_node *dnode);
 
 /* Notifications. */
 void isis_notif_db_overload(const struct isis_area *area, bool overload);
index 697281a0d765d5e072914f156aedb5d1dffa5292..858f0a2871c3e6f7be942c20be13a433fc8ff284 100644 (file)
@@ -416,6 +416,24 @@ int isis_instance_purge_originator_modify(struct nb_cb_modify_args *args)
        return NB_OK;
 }
 
+
+/*
+ * XPath: /frr-isisd:isis/instance/admin-group-send-zero
+ */
+int isis_instance_admin_group_send_zero_modify(struct nb_cb_modify_args *args)
+{
+       return NB_OK;
+}
+
+
+/*
+ * XPath: /frr-isisd:isis/instance/asla-legacy-flag
+ */
+int isis_instance_asla_legacy_flag_modify(struct nb_cb_modify_args *args)
+{
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-isisd:isis/instance/lsp/mtu
  */
@@ -2674,6 +2692,170 @@ int isis_instance_segment_routing_algorithm_prefix_sid_n_flag_clear_modify(
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo
+ */
+int isis_instance_flex_algo_create(struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_destroy(struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/advertise-definition
+ */
+int isis_instance_flex_algo_advertise_definition_modify(
+       struct nb_cb_modify_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_advertise_definition_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/flex-algos/flex-algo/affinity-include-anies/affinity-include-any
+ */
+int isis_instance_flex_algo_affinity_include_any_create(
+       struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_affinity_include_any_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/flex-algos/flex-algo/affinity-include-alls/affinity-include-all
+ */
+int isis_instance_flex_algo_affinity_include_all_create(
+       struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_affinity_include_all_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/flex-algos/flex-algo/affinity-exclude-anies/affinity-exclude-any
+ */
+int isis_instance_flex_algo_affinity_exclude_any_create(
+       struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_affinity_exclude_any_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/prefix-metric
+ */
+
+int isis_instance_flex_algo_prefix_metric_create(struct nb_cb_create_args *args)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_prefix_metric_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/dplane-sr-mpls
+ */
+
+int isis_instance_flex_algo_dplane_sr_mpls_create(
+       struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_dplane_sr_mpls_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/dplane-srv6
+ */
+
+int isis_instance_flex_algo_dplane_srv6_create(struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_dplane_srv6_destroy(struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/dplane-ip
+ */
+
+int isis_instance_flex_algo_dplane_ip_create(struct nb_cb_create_args *args)
+{
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_dplane_ip_destroy(struct nb_cb_destroy_args *args)
+{
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/metric-type
+ */
+
+int isis_instance_flex_algo_metric_type_modify(struct nb_cb_modify_args *args)
+{
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/flex-algos/flex-algo/priority
+ */
+
+int isis_instance_flex_algo_priority_modify(struct nb_cb_modify_args *args)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+int isis_instance_flex_algo_priority_destroy(struct nb_cb_destroy_args *args)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-isisd:isis/instance/mpls/ldp-sync
  */
index fd6b91b42e1f5af10874940d15281e660ddd3736..088cc31910d34b1cfe3878f8bb5e00e3b9bd2c54 100644 (file)
@@ -3771,6 +3771,13 @@ struct cmd_node router_node = {
        .prompt = "%s(config-router)# ",
        .config_write = isis_config_write,
 };
+
+struct cmd_node isis_flex_algo_node = {
+       .name = "isis-flex-algo",
+       .node = ISIS_FLEX_ALGO_NODE,
+       .parent_node = ISIS_NODE,
+       .prompt = "%s(config-router-flex-algo)# ",
+};
 #endif /* ifdef FABRICD */
 
 void isis_init(void)
@@ -3880,6 +3887,10 @@ void isis_init(void)
        install_element(ROUTER_NODE, &log_adj_changes_cmd);
        install_element(ROUTER_NODE, &no_log_adj_changes_cmd);
 #endif /* ifdef FABRICD */
+#ifndef FABRICD
+       install_node(&isis_flex_algo_node);
+       install_default(ISIS_FLEX_ALGO_NODE);
+#endif /* ifdnef FABRICD */
 
        spf_backoff_cmd_init();
 }
index 8856f9f09f2adf1cf4821c0b0f63fb48ae304904..39fbfa661a0244f4370c5d1acc74a367ed75f0fa 100644 (file)
@@ -129,6 +129,7 @@ enum node_type {
        LDP_L2VPN_NODE,          /* LDP L2VPN node */
        LDP_PSEUDOWIRE_NODE,     /* LDP Pseudowire node */
        ISIS_NODE,               /* ISIS protocol mode */
+       ISIS_FLEX_ALGO_NODE,    /* ISIS Flex Algo mode */
        ACCESS_NODE,             /* Access list node. */
        PREFIX_NODE,             /* Prefix list node. */
        ACCESS_IPV6_NODE,       /* Access list node. */
index 4d52bd036d0380bf6bb90c5c38c08810e4a95e49..04f7ff65e9f64f2026772761d898e63943b9e05f 100644 (file)
@@ -1175,6 +1175,13 @@ static struct cmd_node isis_node = {
        .parent_node = CONFIG_NODE,
        .prompt = "%s(config-router)# ",
 };
+
+static struct cmd_node isis_flex_algo_node = {
+       .name = "isis-flex-algo",
+       .node = ISIS_FLEX_ALGO_NODE,
+       .parent_node = ISIS_NODE,
+       .prompt = "%s(config-router-flex-algo)# ",
+};
 #endif /* HAVE_ISISD */
 
 #ifdef HAVE_FABRICD
@@ -2095,6 +2102,14 @@ DEFUNSH(VTYSH_ISISD, router_isis, router_isis_cmd,
        vty->node = ISIS_NODE;
        return CMD_SUCCESS;
 }
+
+DEFUNSH(VTYSH_ISISD, isis_flex_algo, isis_flex_algo_cmd, "flex-algo (128-255)",
+       "Flexible Algorithm\n"
+       "Flexible Algorithm Number\n")
+{
+       vty->node = ISIS_FLEX_ALGO_NODE;
+       return CMD_SUCCESS;
+}
 #endif /* HAVE_ISISD */
 
 #ifdef HAVE_FABRICD
@@ -2578,6 +2593,18 @@ DEFUNSH(VTYSH_ISISD, vtysh_quit_isisd, vtysh_quit_isisd_cmd, "quit",
 {
        return vtysh_exit_isisd(self, vty, argc, argv);
 }
+
+DEFUNSH(VTYSH_ISISD, vtysh_exit_isis_flex_algo, vtysh_exit_isis_flex_algo_cmd,
+       "exit", "Exit current mode and down to previous mode\n")
+{
+       return vtysh_exit(vty);
+}
+
+DEFUNSH(VTYSH_ISISD, vtysh_quit_isis_flex_algo, vtysh_quit_isis_flex_algo_cmd,
+       "quit", "Exit current mode and down to previous mode\n")
+{
+       return vtysh_exit_isisd(self, vty, argc, argv);
+}
 #endif /* HAVE_ISISD */
 
 #if HAVE_BFDD > 0
@@ -4702,6 +4729,12 @@ void vtysh_init_vty(void)
        install_element(ISIS_NODE, &vtysh_exit_isisd_cmd);
        install_element(ISIS_NODE, &vtysh_quit_isisd_cmd);
        install_element(ISIS_NODE, &vtysh_end_all_cmd);
+
+       install_node(&isis_flex_algo_node);
+       install_element(ISIS_NODE, &isis_flex_algo_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &vtysh_exit_isis_flex_algo_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &vtysh_quit_isis_flex_algo_cmd);
+       install_element(ISIS_FLEX_ALGO_NODE, &vtysh_end_all_cmd);
 #endif /* HAVE_ISISD */
 
        /* fabricd */
index 264d5fd3c28471b8157bcb7148daba5af8a0a838..ae69d53ccc0ec9603dbe13226fc14fd05dd1aecb 100644 (file)
@@ -1212,6 +1212,20 @@ module frr-isisd {
           "Advertise prefixes of passive interfaces only";
       }
 
+      leaf admin-group-send-zero {
+        type boolean;
+        default "false";
+        description
+          "Allow sending the default admin-group value of 0x00000000";
+      }
+
+      leaf asla-legacy-flag {
+        type boolean;
+        default "false";
+        description
+          "Set the legacy flag (aka. L-FLAG) in the ASLA Sub-TLV.";
+      }
+
       container lsp {
         description
           "Configuration of Link-State Packets (LSP) parameters";
@@ -1623,6 +1637,107 @@ module frr-isisd {
         }
       }
 
+      container flex-algos {
+        description
+          "Flex-Algo Table";
+        list flex-algo {
+          key "flex-algo";
+          description
+            "Configuration for an IS-IS Flex-Algo";
+          leaf advertise-definition {
+            type boolean;
+            description
+              "If TRUE, Flex-Algo definition is advertised";
+          }
+          container affinity-include-alls {
+            description
+              "Set the include-all affinity";
+            leaf-list affinity-include-all {
+              type string;
+              max-elements "256";
+              description
+                "Array of Attribute Names";
+            }
+          }
+          container affinity-include-anies {
+            description
+              "Set the include-any affinity";
+            leaf-list affinity-include-any {
+              type string;
+              max-elements "256";
+              description
+                "Array of Attribute Names";
+            }
+          }
+          container affinity-exclude-anies {
+            description
+              "Set the exclude-any affinity";
+            leaf-list affinity-exclude-any {
+              type string;
+              max-elements "256";
+              description
+                "Array of Attribute Names";
+            }
+          }
+          leaf prefix-metric {
+            type empty;
+            description
+              "Use Flex-algo Prefix Metric";
+          }
+          leaf metric-type {
+            default "igp";
+            description
+              "Set the Flex-Algo metric-type";
+                   type enumeration {
+                     enum "igp" {
+                       value 0;
+                       description
+                         "IGP Metric";
+                     }
+                     enum "min-uni-link-delay" {
+                       value 1;
+                       description
+                         "RFC 8570 Sec 4.2 Min Unidirectional Link Delay";
+                     }
+                     enum "te-default" {
+                       value 2;
+                       description
+                         "RFC 5305 Sec 3.7 Traffic Engineering Default Metric";
+                     }
+                   }
+          }
+          leaf priority {
+            type uint32 {
+              range "0..255";
+            }
+            description
+              "Set the Flex-Algo priority";
+          }
+          leaf dplane-sr-mpls {
+            type empty;
+            description
+                 "Advertise and participate in the Flex-Algo Segment-Routing MPLS data-plane";
+          }
+          leaf dplane-srv6 {
+            type empty;
+            description
+                 "Advertise and participate in the Flex-Algo Segment-Routing SRv6 data-plane";
+          }
+          leaf dplane-ip {
+            type empty;
+            description
+                 "Advertise and participate in the Flex-Algo IP data-plane";
+          }
+          leaf flex-algo {
+            type uint32 {
+              range "128..255";
+            }
+            description
+              "Flex-Algo";
+          }
+        }
+      }
+
       container segment-routing {
         description
           "Segment Routing global configuration.";