summaryrefslogtreecommitdiffstats
path: root/isisd/isis_nb_config.c
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2024-09-09 12:39:16 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2024-09-09 13:04:34 +0200
commit1999bdf36ad6b51253f403c9213e7644a34596e6 (patch)
tree883907d353f1018bb29e9cd84fccd6da4c795bf6 /isisd/isis_nb_config.c
parentisisd: fix crash at flex-algo affinity setting (diff)
downloadfrr-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.c20
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;
}