diff options
author | Louis Scalbert <louis.scalbert@6wind.com> | 2024-09-09 12:39:16 +0200 |
---|---|---|
committer | Louis Scalbert <louis.scalbert@6wind.com> | 2024-09-09 13:04:34 +0200 |
commit | 1999bdf36ad6b51253f403c9213e7644a34596e6 (patch) | |
tree | 883907d353f1018bb29e9cd84fccd6da4c795bf6 /isisd/isis_nb_config.c | |
parent | isisd: fix crash at flex-algo affinity setting (diff) | |
download | frr-1999bdf36ad6b51253f403c9213e7644a34596e6.tar.xz frr-1999bdf36ad6b51253f403c9213e7644a34596e6.zip |
isisd: fix flex-algo affinity setting
The following causes a validation error.
> # cat config
> affinity-map green bit-position 0
> router isis 1
> flex-algo 129
> affinity exclude-any green
> # vtysh -f config
> Error type: validation
> Error description: affinity map green isn't found
> The following commands were dynamically grouped into the same transaction and rejected:
> - affinity-map green bit-position 0
> - router isis 1
> - flex-algo 129
> - affinity exclude-any green
Data does not exist in memory in validation state.
Get data from the candidate northbound config instead.
Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to '')
-rw-r--r-- | isisd/isis_nb_config.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index cbe6da21c..fcab014aa 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -2987,9 +2987,11 @@ int isis_instance_flex_algo_advertise_definition_destroy( static int isis_instance_flex_algo_affinity_set(struct nb_cb_create_args *args, int type) { - struct affinity_map *map; + char xpathr[XPATH_MAXLEN]; + struct lyd_node *dnode; struct isis_area *area; struct admin_group *ag; + uint16_t bit_position; struct flex_algo *fa; uint32_t algorithm; const char *val; @@ -2998,8 +3000,10 @@ static int isis_instance_flex_algo_affinity_set(struct nb_cb_create_args *args, switch (args->event) { case NB_EV_VALIDATE: - map = affinity_map_get(val); - if (!map) { + snprintf(xpathr, sizeof(xpathr), + "/frr-affinity-map:lib/affinity-maps/affinity-map[name='%s']/value", + val); + if (!yang_dnode_get(args->dnode, xpathr)) { snprintf(args->errmsg, args->errmsg_len, "affinity map %s isn't found", val); return NB_ERR_VALIDATION; @@ -3018,8 +3022,11 @@ static int isis_instance_flex_algo_affinity_set(struct nb_cb_create_args *args, "flex-algo object not found"); return NB_ERR_RESOURCE; } - map = affinity_map_get(val); - if (!map) { + snprintf(xpathr, sizeof(xpathr), + "/frr-affinity-map:lib/affinity-maps/affinity-map[name='%s']/value", + val); + dnode = yang_dnode_get(args->dnode, xpathr); + if (!dnode) { snprintf(args->errmsg, args->errmsg_len, "affinity map %s isn't found", val); return NB_ERR_RESOURCE; @@ -3033,7 +3040,8 @@ static int isis_instance_flex_algo_affinity_set(struct nb_cb_create_args *args, else break; - admin_group_set(ag, map->bit_position); + bit_position = yang_dnode_get_uint16(dnode, NULL); + admin_group_set(ag, bit_position); lsp_regenerate_schedule(area, area->is_type, 0); break; } |