bgpd: forbid modification of bgp instance type

If a user issues the following commands:
```
router bgp 65000 vrf red
router bgp 65000 view red
```
bgpd ends up having NB config inconsistent with actual data.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2021-04-26 15:46:58 +03:00
parent debb7b1931
commit d3e3677096
2 changed files with 20 additions and 1 deletions

View File

@ -1483,12 +1483,27 @@ int bgp_global_global_config_timers_keepalive_modify(
*/
int bgp_global_instance_type_view_modify(struct nb_cb_modify_args *args)
{
struct bgp *bgp;
switch (args->event) {
case NB_EV_VALIDATE:
/*
* Changing instance type is not allowed, but we must allow it
* once, when the BGP instance is created the first time.
* If the instance already exists - return the validation
* error.
*/
bgp = nb_running_get_entry_non_rec(args->dnode->parent->parent,
NULL, false);
if (bgp) {
snprintf(args->errmsg, args->errmsg_len,
"Changing instance type is not allowed");
return NB_ERR_VALIDATION;
}
break;
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_APPLY:
/* TODO: implement me. */
break;
}

View File

@ -1388,6 +1388,10 @@ DEFUN_YANG_NOSH(router_bgp,
nb_cli_enqueue_change(vty,
"./global/instance-type-view",
NB_OP_MODIFY, "true");
} else {
nb_cli_enqueue_change(vty,
"./global/instance-type-view",
NB_OP_MODIFY, "false");
}
ret = nb_cli_apply_changes(vty, base_xpath);