summaryrefslogtreecommitdiff
path: root/lib/routemap_cli.c
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2023-04-19 21:11:25 +0300
committerGitHub <noreply@github.com>2023-04-19 21:11:25 +0300
commit5db19319628c11f439724dd6647375c163a22999 (patch)
treee431210f1a6a7ef398f953e451b1993bdd386a82 /lib/routemap_cli.c
parentfec51f2e2be021108dc1de4dd1ea89516082eaf7 (diff)
parentf24dfccbdc223f2ceaa2c86bfd08bb52fbd0b404 (diff)
Merge pull request #13166 from Jafaral/ospf-external-metric
ospfd: use rib metric as the base for set metric +/-
Diffstat (limited to 'lib/routemap_cli.c')
-rw-r--r--lib/routemap_cli.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/routemap_cli.c b/lib/routemap_cli.c
index 4345b74bc0..75d1175886 100644
--- a/lib/routemap_cli.c
+++ b/lib/routemap_cli.c
@@ -890,6 +890,76 @@ DEFPY_YANG(
return nb_cli_apply_changes(vty, NULL);
}
+DEFPY_YANG(set_min_metric, set_min_metric_cmd,
+ "set min-metric <(0-4294967295)$metric>",
+ SET_STR
+ "Minimum metric value for destination routing protocol\n"
+ "Minimum metric value\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-route-map:set-min-metric']";
+ char xpath_value[XPATH_MAXLEN];
+ char value[64];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+
+ snprintf(xpath_value, sizeof(xpath_value),
+ "%s/rmap-set-action/min-metric", xpath);
+ snprintf(value, sizeof(value), "%s", metric_str);
+
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, value);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(no_set_min_metric, no_set_min_metric_cmd,
+ "no set min-metric [(0-4294967295)]",
+ NO_STR SET_STR
+ "Minimum metric value for destination routing protocol\n"
+ "Minumum metric value\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-route-map:set-min-metric']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(set_max_metric, set_max_metric_cmd,
+ "set max-metric <(0-4294967295)$metric>",
+ SET_STR
+ "Maximum metric value for destination routing protocol\n"
+ "Miximum metric value\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-route-map:set-max-metric']";
+ char xpath_value[XPATH_MAXLEN];
+ char value[64];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+
+ snprintf(xpath_value, sizeof(xpath_value),
+ "%s/rmap-set-action/max-metric", xpath);
+ snprintf(value, sizeof(value), "%s", metric_str);
+
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, value);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(no_set_max_metric, no_set_max_metric_cmd,
+ "no set max-metric [(0-4294967295)]",
+ NO_STR SET_STR
+ "Maximum Metric value for destination routing protocol\n"
+ "Maximum metric value\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-route-map:set-max-metric']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
DEFPY_YANG(
set_tag, set_tag_cmd,
"set tag (1-4294967295)$tag",
@@ -1011,6 +1081,14 @@ void route_map_action_show(struct vty *vty, const struct lyd_node *dnode,
yang_dnode_get_string(
dnode, "./rmap-set-action/value"));
}
+ } else if (IS_SET_MIN_METRIC(action)) {
+ vty_out(vty, " set min-metric %s\n",
+ yang_dnode_get_string(dnode,
+ "./rmap-set-action/min-metric"));
+ } else if (IS_SET_MAX_METRIC(action)) {
+ vty_out(vty, " set max-metric %s\n",
+ yang_dnode_get_string(dnode,
+ "./rmap-set-action/max-metric"));
} else if (IS_SET_TAG(action)) {
vty_out(vty, " set tag %s\n",
yang_dnode_get_string(dnode, "./rmap-set-action/tag"));
@@ -1551,6 +1629,12 @@ void route_map_cli_init(void)
install_element(RMAP_NODE, &set_metric_cmd);
install_element(RMAP_NODE, &no_set_metric_cmd);
+ install_element(RMAP_NODE, &set_min_metric_cmd);
+ install_element(RMAP_NODE, &no_set_min_metric_cmd);
+
+ install_element(RMAP_NODE, &set_max_metric_cmd);
+ install_element(RMAP_NODE, &no_set_max_metric_cmd);
+
install_element(RMAP_NODE, &set_tag_cmd);
install_element(RMAP_NODE, &no_set_tag_cmd);