diff --git a/lib/vrf.c b/lib/vrf.c index a44cc50f92..de29f45f8f 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -780,8 +780,6 @@ DEFUN_NOSH(vrf_exit, "exit-vrf", "Exit current mode and down to previous mode\n") { - /* We have to set vrf context to default vrf */ - VTY_PUSH_CONTEXT(VRF_NODE, vrf_get(VRF_DEFAULT, VRF_DEFAULT_NAME)); cmd_exit(vty); return CMD_SUCCESS; } diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index b2b0fcfbb2..57dd0c20ad 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -192,8 +192,13 @@ struct zebra_vrf { * special macro to allow us to get the correct zebra_vrf */ #define ZEBRA_DECLVAR_CONTEXT(A, B) \ - struct vrf *A = VTY_GET_CONTEXT(vrf); \ - struct zebra_vrf *B = (A) ? A->info : vrf_info_lookup(VRF_DEFAULT) + struct vrf *A; \ + if (vty->node == CONFIG_NODE) \ + A = vrf_lookup_by_id(VRF_DEFAULT); \ + else \ + A = VTY_GET_CONTEXT(vrf); \ + VTY_CHECK_CONTEXT(A); \ + struct zebra_vrf *B = A->info static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf) {