diff options
| author | Igor Ryzhov <iryzhov@nfware.com> | 2021-06-21 18:04:46 +0300 |
|---|---|---|
| committer | mergify-bot <noreply@mergify.io> | 2021-07-22 22:33:16 +0000 |
| commit | 1173e8071ef5f5a1cf89ca06230bd1cfbe19e1b8 (patch) | |
| tree | 272899c1c48f5b714197268824ca4b627b1b50bb /lib | |
| parent | 9931db75f7730381ad4fba16efd39cbb67749470 (diff) | |
lib: remove vrf-interface config when removing the VRF
If we have the following configuration:
```
vrf red
smth
exit-vrf
!
interface red vrf red
smth
```
And we delete the VRF using "no vrf red" command, we end up with:
```
interface red
smth
```
Interface config is preserved but moved to the default VRF.
This is not an expected behavior. We should remove the interface config
when the VRF is deleted.
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit f5eef2d5a8a471fe6e4ec4f6acfa3dbf190eda5d)
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/vrf.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -827,10 +827,24 @@ DEFUN_YANG (no_vrf, return CMD_WARNING_CONFIG_FAILED; } + if (vrf_get_backend() == VRF_BACKEND_VRF_LITE) { + /* + * Remove the VRF interface config. Currently, we allow to + * remove only inactive VRFs, so we use VRF_DEFAULT_NAME here, + * because when the VRF is removed from kernel, the interface + * is moved to the default VRF. If we ever allow removing + * active VRFs, this code have to be updated accordingly. + */ + snprintf(xpath_list, sizeof(xpath_list), + "/frr-interface:lib/interface[name='%s'][vrf='%s']", + vrfname, VRF_DEFAULT_NAME); + nb_cli_enqueue_change(vty, xpath_list, NB_OP_DESTROY, NULL); + } + snprintf(xpath_list, sizeof(xpath_list), FRR_VRF_KEY_XPATH, vrfname); nb_cli_enqueue_change(vty, xpath_list, NB_OP_DESTROY, NULL); - return nb_cli_apply_changes(vty, xpath_list); + return nb_cli_apply_changes(vty, NULL); } |
