lib: convert route-map optimization to NB

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2021-04-01 19:28:24 +03:00
parent d6cfe1b884
commit 3ebeec9446
4 changed files with 64 additions and 26 deletions

View file

@ -2906,29 +2906,6 @@ void route_map_notify_dependencies(const char *affected_name,
}
/* VTY related functions. */
DEFUN(no_routemap_optimization, no_routemap_optimization_cmd,
"no route-map optimization",
NO_STR
"route-map\n"
"optimization\n")
{
VTY_DECLVAR_CONTEXT(route_map_index, index);
index->map->optimization_disabled = true;
return CMD_SUCCESS;
}
DEFUN(routemap_optimization, routemap_optimization_cmd,
"route-map optimization",
"route-map\n"
"optimization\n")
{
VTY_DECLVAR_CONTEXT(route_map_index, index);
index->map->optimization_disabled = false;
return CMD_SUCCESS;
}
static void clear_route_map_helper(struct route_map *map)
{
struct route_map_index *index;
@ -3241,8 +3218,5 @@ void route_map_init(void)
install_element(ENABLE_NODE, &debug_rmap_cmd);
install_element(ENABLE_NODE, &no_debug_rmap_cmd);
install_element(RMAP_NODE, &routemap_optimization_cmd);
install_element(RMAP_NODE, &no_routemap_optimization_cmd);
install_element(ENABLE_NODE, &show_route_map_pfx_tbl_cmd);
}

View file

@ -1396,6 +1396,33 @@ void route_map_description_show(struct vty *vty, struct lyd_node *dnode,
vty_out(vty, " description %s\n", yang_dnode_get_string(dnode, NULL));
}
DEFPY_YANG(routemap_optimization, routemap_optimization_cmd,
"[no] route-map optimization",
NO_STR
"route-map\n"
"optimization\n")
{
const struct lyd_node *rmi_dnode;
const char *rm_name;
char xpath[XPATH_MAXLEN];
rmi_dnode =
yang_dnode_get(vty->candidate_config->dnode, VTY_CURR_XPATH);
if (!rmi_dnode) {
vty_out(vty, "%% Failed to get RMI dnode in candidate DB\n");
return CMD_WARNING_CONFIG_FAILED;
}
rm_name = yang_dnode_get_string(rmi_dnode, "../name");
snprintf(
xpath, sizeof(xpath),
"/frr-route-map:lib/route-map[name='%s']/optimization-disabled",
rm_name);
nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, no ? "true" : "false");
return nb_cli_apply_changes(vty, NULL);
}
static int route_map_config_write(struct vty *vty)
{
struct lyd_node *dnode;
@ -1513,4 +1540,6 @@ void route_map_cli_init(void)
install_element(RMAP_NODE, &set_srte_color_cmd);
install_element(RMAP_NODE, &no_set_srte_color_cmd);
install_element(RMAP_NODE, &routemap_optimization_cmd);
}

View file

@ -140,6 +140,30 @@ static int lib_route_map_destroy(struct nb_cb_destroy_args *args)
return NB_OK;
}
/*
* XPath: /frr-route-map:lib/route-map/optimization-disabled
*/
static int
lib_route_map_optimization_disabled_modify(struct nb_cb_modify_args *args)
{
struct route_map *rm;
bool disabled = yang_dnode_get_bool(args->dnode, NULL);
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
/* NOTHING */
break;
case NB_EV_APPLY:
rm = nb_running_get_entry(args->dnode, NULL, true);
rm->optimization_disabled = disabled;
break;
}
return NB_OK;
}
/*
* XPath: /frr-route-map:lib/route-map/entry
*/
@ -1197,6 +1221,12 @@ const struct frr_yang_module_info frr_route_map_info = {
.destroy = lib_route_map_destroy,
}
},
{
.xpath = "/frr-route-map:lib/route-map/optimization-disabled",
.cbs = {
.modify = lib_route_map_optimization_disabled_modify,
}
},
{
.xpath = "/frr-route-map:lib/route-map/entry",
.cbs = {

View file

@ -364,6 +364,11 @@ module frr-route-map {
description
"Route map instance name";
}
leaf optimization-disabled {
type boolean;
default false;
description "Disables or enables the optimization";
}
list entry {
key "sequence";