summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroki Shirokura <hiroki.shirokura@linecorp.com>2021-12-18 08:11:58 +0000
committerLouis Scalbert <louis.scalbert@6wind.com>2023-04-18 10:13:59 +0200
commit46fb37cf6774e910692f254e870451b2960197f2 (patch)
tree51e6ae40ff220e8f525c0b034c44c2211eaf8ec5
parent735fb37db1897f6393680c62d369e339146f004b (diff)
lib,vtysh,isisd,yang: algo cli/yang/callbacks
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>
-rw-r--r--isisd/isis_cli.c145
-rw-r--r--isisd/isis_nb.c92
-rw-r--r--isisd/isis_nb.h56
-rw-r--r--isisd/isis_nb_config.c182
-rw-r--r--isisd/isisd.c11
-rw-r--r--lib/command.h1
-rw-r--r--vtysh/vtysh.c33
-rw-r--r--yang/frr-isisd.yang115
8 files changed, 635 insertions, 0 deletions
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index f4da01bb8e..c93bcaf8fd 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -1127,6 +1127,52 @@ void cli_show_isis_purge_origin(struct vty *vty, const struct lyd_node *dnode,
}
/*
+ * 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
*/
DEFPY_YANG(isis_mpls_te_on, isis_mpls_te_on_cmd, "mpls-te on",
@@ -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 */
diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c
index 38817a01ee..6da8fa2d28 100644
--- a/isisd/isis_nb.c
+++ b/isisd/isis_nb.c
@@ -103,6 +103,20 @@ const struct frr_yang_module_info frr_isisd_info = {
},
},
{
+ .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 = {
.cli_show = cli_show_isis_lsp_mtu,
@@ -723,6 +737,84 @@ const struct frr_yang_module_info frr_isisd_info = {
},
},
{
+ .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 = {
.cli_show = cli_show_isis_mpls_ldp_sync,
diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h
index 72d6617c68..13efa36d78 100644
--- a/isisd/isis_nb.h
+++ b/isisd/isis_nb.h
@@ -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);
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index 697281a0d7..858f0a2871 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -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
*/
@@ -2675,6 +2693,170 @@ int isis_instance_segment_routing_algorithm_prefix_sid_n_flag_clear_modify(
}
/*
+ * 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
*/
int isis_instance_mpls_ldp_sync_create(struct nb_cb_create_args *args)
diff --git a/isisd/isisd.c b/isisd/isisd.c
index fd6b91b42e..088cc31910 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -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();
}
diff --git a/lib/command.h b/lib/command.h
index 8856f9f09f..39fbfa661a 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -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. */
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 4d52bd036d..04f7ff65e9 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -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 */
diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang
index 264d5fd3c2..ae69d53ccc 100644
--- a/yang/frr-isisd.yang
+++ b/yang/frr-isisd.yang
@@ -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.";