If the VRF is not enabled, if_terminate deletes the VRF after the last
interface is removed from it. Therefore daemons crash on the subsequent
call to vrf_delete. We should call vrf_delete only for enabled VRFs.
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
static void vrf_terminate_single(struct vrf *vrf)
{
+ int enabled = vrf_is_enabled(vrf);
+
/* Clear configured flag and invoke delete. */
UNSET_FLAG(vrf->status, VRF_CONFIGURED);
if_terminate(vrf);
- vrf_delete(vrf);
+ if (enabled)
+ vrf_delete(vrf);
}
/* Terminate VRF module. */