}
/* vrf CLI commands */
+DEFUN_NOSH(vrf_exit,
+ vrf_exit_cmd,
+ "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));
+ vty->node = CONFIG_NODE;
+ return CMD_SUCCESS;
+}
+
DEFUN_NOSH (vrf,
vrf_cmd,
"vrf NAME",
install_element(CONFIG_NODE, &no_vrf_cmd);
install_node(&vrf_node, writefunc);
install_default(VRF_NODE);
+ install_element(VRF_NODE, &vrf_exit_cmd);
if (vrf_is_backend_netns() && ns_have_netns()) {
/* Install NS commands. */
vrf_daemon_privs = daemon_privs;
|| saved_node == BGP_VNC_L2_GROUP_NODE)
&& (tried == 1)) {
vtysh_execute("exit-vnc");
+ } else if (saved_node == VRF_NODE && (tried == 1)) {
+ vtysh_execute("exit-vrf");
} else if ((saved_node == KEYCHAIN_KEY_NODE
|| saved_node == LDP_PSEUDOWIRE_NODE
|| saved_node == LDP_IPV4_IFACE_NODE
} else if ((prev_node == BGP_EVPN_VNI_NODE)
&& (tried == 1)) {
fprintf(outputfile, "exit-vni\n");
+ } else if (prev_node == VRF_NODE) {
+ fprintf(outputfile, "exit-vrf\n");
} else if ((prev_node == KEYCHAIN_KEY_NODE)
&& (tried == 1)) {
fprintf(outputfile, "exit\n");
return CMD_SUCCESS;
}
+DEFUNSH(VTYSH_PIMD|VTYSH_ZEBRA, exit_vrf_config, exit_vrf_config_cmd, "exit-vrf",
+ "Exit from VRF configuration mode\n")
+{
+ if (vty->node == VRF_NODE)
+ vty->node = CONFIG_NODE;
+ return CMD_SUCCESS;
+}
+
DEFUNSH(VTYSH_BGPD, exit_vrf_policy, exit_vrf_policy_cmd, "exit-vrf-policy",
- "Exit from VRF configuration mode\n")
+ "Exit from VRF policy configuration mode\n")
{
if (vty->node == BGP_VRF_POLICY_NODE)
vty->node = BGP_NODE;
install_element(ENABLE_NODE, &vtysh_show_running_config_cmd);
install_element(ENABLE_NODE, &vtysh_copy_running_config_cmd);
+ install_element(VRF_NODE, &exit_vrf_config_cmd);
+
install_element(CONFIG_NODE, &vtysh_vrf_cmd);
install_element(CONFIG_NODE, &vtysh_no_vrf_cmd);