yang_dnode_get_string(dnode, "./password"));
}
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric
+ */
+DEFPY(isis_metric, isis_metric_cmd,
+ "isis metric [level-1|level-2]$level (0-16777215)$met",
+ "IS-IS routing protocol\n"
+ "Set default metric for circuit\n"
+ "Specify metric for level-1 routing\n"
+ "Specify metric for level-2 routing\n"
+ "Default metric value\n")
+{
+ if (!level || strmatch(level, "level-1"))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/metric/level-1",
+ NB_OP_MODIFY, met_str);
+ if (!level || strmatch(level, "level-2"))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/metric/level-2",
+ NB_OP_MODIFY, met_str);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_isis_metric, no_isis_metric_cmd,
+ "no isis metric [level-1|level-2]$level [(0-16777215)]",
+ NO_STR
+ "IS-IS routing protocol\n"
+ "Set default metric for circuit\n"
+ "Specify metric for level-1 routing\n"
+ "Specify metric for level-2 routing\n"
+ "Default metric value\n")
+{
+ if (!level || strmatch(level, "level-1"))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/metric/level-1",
+ NB_OP_MODIFY, NULL);
+ if (!level || strmatch(level, "level-2"))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/metric/level-2",
+ NB_OP_MODIFY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_ip_isis_metric(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults)
+{
+ const char *l1 = yang_dnode_get_string(dnode, "./level-1");
+ const char *l2 = yang_dnode_get_string(dnode, "./level-2");
+
+ if (strmatch(l1, l2))
+ vty_out(vty, " isis metric %s\n", l1);
+ else {
+ vty_out(vty, " isis metric %s level-1\n", l1);
+ vty_out(vty, " isis metric %s level-2\n", l2);
+ }
+}
+
void isis_cli_init(void)
{
install_element(CONFIG_NODE, &router_isis_cmd);
install_element(INTERFACE_NODE, &isis_passwd_cmd);
install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
+
+ install_element(INTERFACE_NODE, &isis_metric_cmd);
+ install_element(INTERFACE_NODE, &no_isis_metric_cmd);
}
#endif /* ifndef FABRICD */
bool show_defaults);
void cli_show_ip_isis_password(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);
+void cli_show_ip_isis_metric(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults);
#endif /* ISISD_ISIS_CLI_H_ */
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+ unsigned int met;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ met = yang_dnode_get_uint32(dnode, NULL);
+ isis_circuit_metric_set(circuit, IS_LEVEL_1, met);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+ unsigned int met;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ met = yang_dnode_get_uint32(dnode, NULL);
+ isis_circuit_metric_set(circuit, IS_LEVEL_2, met);
+
return NB_OK;
}
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
.cbs.modify = lib_interface_isis_hello_multiplier_level_2_modify,
},
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric",
+ .cbs.cli_show = cli_show_ip_isis_metric,
+ },
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
.cbs.modify = lib_interface_isis_metric_level_1_modify,
return circuit;
}
-DEFUN (isis_metric,
- isis_metric_cmd,
- PROTO_NAME " metric (0-16777215)",
- PROTO_HELP
- "Set default metric for circuit\n"
- "Default metric value\n")
-{
- int idx_number = 2;
- int met;
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- met = atoi(argv[idx_number]->arg);
-
- /* RFC3787 section 5.1 */
- if (circuit->area && circuit->area->oldmetric == 1
- && met > MAX_NARROW_LINK_METRIC) {
- vty_out(vty,
- "Invalid metric %d - should be <0-63> "
- "when narrow metric type enabled\n",
- met);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* RFC4444 */
- if (circuit->area && circuit->area->newmetric == 1
- && met > MAX_WIDE_LINK_METRIC) {
- vty_out(vty,
- "Invalid metric %d - should be <0-16777215> "
- "when wide metric type enabled\n",
- met);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_1, met),
- "Failed to set L1 metric: $ERR");
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_2, met),
- "Failed to set L2 metric: $ERR");
- return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_metric,
- no_isis_metric_cmd,
- "no " PROTO_NAME " metric [(0-16777215)]",
- NO_STR
- PROTO_HELP
- "Set default metric for circuit\n"
- "Default metric value\n")
-{
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_1,
- DEFAULT_CIRCUIT_METRIC),
- "Failed to set L1 metric: $ERR");
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_2,
- DEFAULT_CIRCUIT_METRIC),
- "Failed to set L2 metric: $ERR");
- return CMD_SUCCESS;
-}
-
DEFUN (isis_hello_interval,
isis_hello_interval_cmd,
PROTO_NAME " hello-interval (1-600)",
void isis_vty_init(void)
{
- install_element(INTERFACE_NODE, &isis_metric_cmd);
- install_element(INTERFACE_NODE, &no_isis_metric_cmd);
-
install_element(INTERFACE_NODE, &isis_hello_interval_cmd);
install_element(INTERFACE_NODE, &no_isis_hello_interval_cmd);
return CMD_SUCCESS;
}
+DEFUN (isis_metric,
+ isis_metric_cmd,
+ PROTO_NAME " metric (0-16777215)",
+ PROTO_HELP
+ "Set default metric for circuit\n"
+ "Default metric value\n")
+{
+ int idx_number = 2;
+ int met;
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ met = atoi(argv[idx_number]->arg);
+
+ /* RFC3787 section 5.1 */
+ if (circuit->area && circuit->area->oldmetric == 1
+ && met > MAX_NARROW_LINK_METRIC) {
+ vty_out(vty,
+ "Invalid metric %d - should be <0-63> "
+ "when narrow metric type enabled\n",
+ met);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* RFC4444 */
+ if (circuit->area && circuit->area->newmetric == 1
+ && met > MAX_WIDE_LINK_METRIC) {
+ vty_out(vty,
+ "Invalid metric %d - should be <0-16777215> "
+ "when wide metric type enabled\n",
+ met);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_1, met),
+ "Failed to set L1 metric: $ERR");
+ CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_2, met),
+ "Failed to set L2 metric: $ERR");
+ return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_metric,
+ no_isis_metric_cmd,
+ "no " PROTO_NAME " metric [(0-16777215)]",
+ NO_STR
+ PROTO_HELP
+ "Set default metric for circuit\n"
+ "Default metric value\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_1,
+ DEFAULT_CIRCUIT_METRIC),
+ "Failed to set L1 metric: $ERR");
+ CMD_FERR_RETURN(isis_circuit_metric_set(circuit, IS_LEVEL_2,
+ DEFAULT_CIRCUIT_METRIC),
+ "Failed to set L2 metric: $ERR");
+ return CMD_SUCCESS;
+}
+
void isis_vty_daemon_init(void)
{
install_element(ROUTER_NODE, &fabric_tier_cmd);
install_element(INTERFACE_NODE, &isis_passwd_cmd);
install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
+
+ install_element(INTERFACE_NODE, &isis_metric_cmd);
+ install_element(INTERFACE_NODE, &no_isis_metric_cmd);
}
return CMD_SUCCESS;
}
-DEFUN (isis_metric_level,
- isis_metric_level_cmd,
- "isis metric (0-16777215) <level-1|level-2>",
- "IS-IS routing protocol\n"
- "Set default metric for circuit\n"
- "Default metric value\n"
- "Specify metric for level-1 routing\n"
- "Specify metric for level-2 routing\n")
-{
- uint32_t met = atoi(argv[2]->arg);
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit,
- level_for_arg(argv[3]->text),
- met),
- "Failed to set metric: $ERR");
- return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_metric_level,
- no_isis_metric_level_cmd,
- "no isis metric [(0-16777215)] <level-1|level-2>",
- NO_STR
- "IS-IS routing protocol\n"
- "Set default metric for circuit\n"
- "Default metric value\n"
- "Specify metric for level-1 routing\n"
- "Specify metric for level-2 routing\n")
-{
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- int level = level_for_arg(argv[argc - 1]->text);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- CMD_FERR_RETURN(isis_circuit_metric_set(circuit, level,
- DEFAULT_CIRCUIT_METRIC),
- "Failed to set L1 metric: $ERR");
- return CMD_SUCCESS;
-}
-
DEFUN (isis_hello_interval_level,
isis_hello_interval_level_cmd,
"isis hello-interval (1-600) <level-1|level-2>",
install_element(INTERFACE_NODE, &isis_priority_level_cmd);
install_element(INTERFACE_NODE, &no_isis_priority_level_cmd);
- install_element(INTERFACE_NODE, &isis_metric_level_cmd);
- install_element(INTERFACE_NODE, &no_isis_metric_level_cmd);
-
install_element(INTERFACE_NODE, &isis_hello_interval_level_cmd);
install_element(INTERFACE_NODE, &no_isis_hello_interval_level_cmd);