diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2024-09-09 14:32:00 +0200 | 
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2024-09-09 14:37:47 +0200 | 
| commit | 1e5c158af967a7e42c93316d25b22b8657941be9 (patch) | |
| tree | b4fc5a6f2576b015f355baefcc02ba6a0eabd569 /isisd/isis_nb_config.c | |
| parent | d13d0fe72f49e259db5125bd301dffac688b7b43 (diff) | |
isisd: fix flex-algo northbound configuration
ISIS flex-algo cannot be configured in the same northbound transaction.
> # cat config3
> router isis 1
>  flex-algo 129
>   priority 128
>
> # vtysh -f config3
> % Configuration failed.
>
> Error type: validation
> The following commands were dynamically grouped into the same transaction and rejected:
> - router isis 1
> - flex-algo 129
> - priority 128
> [1523430|isisd] done
Do not check data presence in running datastore in validation state.
Fixes: 893882ee20 ("isisd: add isis flex-algo configuration backend")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to 'isisd/isis_nb_config.c')
| -rw-r--r-- | isisd/isis_nb_config.c | 69 | 
1 files changed, 27 insertions, 42 deletions
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index 36aee11f0b..7286a692f5 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -3156,19 +3156,16 @@ int isis_instance_flex_algo_affinity_exclude_any_destroy(  int isis_instance_flex_algo_prefix_metric_create(struct nb_cb_create_args *args)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE;  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3191,19 +3188,17 @@ int isis_instance_flex_algo_prefix_metric_destroy(  	struct nb_cb_destroy_args *args)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3226,19 +3221,17 @@ static int isis_instance_flex_algo_dplane_set(struct nb_cb_create_args *args,  					      int type)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3268,19 +3261,17 @@ static int isis_instance_flex_algo_dplane_unset(struct nb_cb_destroy_args *args,  						int type)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3350,21 +3341,19 @@ int isis_instance_flex_algo_dplane_ip_destroy(struct nb_cb_destroy_args *args)  int isis_instance_flex_algo_metric_type_modify(struct nb_cb_modify_args *args)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm;  	enum flex_algo_metric_type metric_type; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	metric_type = yang_dnode_get_enum(args->dnode, NULL);  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3390,21 +3379,19 @@ int isis_instance_flex_algo_metric_type_modify(struct nb_cb_modify_args *args)  int isis_instance_flex_algo_priority_modify(struct nb_cb_modify_args *args)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm;  	uint32_t priority; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	priority = yang_dnode_get_uint32(args->dnode, NULL);  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len, @@ -3426,21 +3413,19 @@ int isis_instance_flex_algo_priority_modify(struct nb_cb_modify_args *args)  int isis_instance_flex_algo_priority_destroy(struct nb_cb_destroy_args *args)  {  	struct isis_area *area; -	const char *area_tag;  	struct flex_algo *fa;  	uint32_t algorithm;  	uint32_t priority = FLEX_ALGO_PRIO_DEFAULT; -	area_tag = yang_dnode_get_string(args->dnode, "../../../area-tag"); -	area = isis_area_lookup(area_tag, VRF_DEFAULT); -	if (!area) -		return NB_ERR_RESOURCE; -  	algorithm = yang_dnode_get_uint32(args->dnode, "../flex-algo");  	priority = yang_dnode_get_uint32(args->dnode, NULL);  	switch (args->event) {  	case NB_EV_APPLY: +		area = nb_running_get_entry(args->dnode, NULL, true); +		if (!area) +			return NB_ERR_RESOURCE; +  		fa = flex_algo_lookup(area->flex_algos, algorithm);  		if (!fa) {  			snprintf(args->errmsg, args->errmsg_len,  | 
