vtysh: use parent_node for vtysh_exit()

Cleaning up the whole mess of "exit" and "quit" commands that follows is
left for a rainy day :(

Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
David Lamparter 2020-04-02 12:06:12 +02:00
parent 791ded4a62
commit d42eb1019e

View File

@ -1992,85 +1992,19 @@ DEFUNSH(VTYSH_REALLYALL, vtysh_config_terminal, vtysh_config_terminal_cmd,
static int vtysh_exit(struct vty *vty) static int vtysh_exit(struct vty *vty)
{ {
switch (vty->node) { struct cmd_node *cnode = vector_lookup(cmdvec, vty->node);
case VIEW_NODE:
case ENABLE_NODE: if (vty->node == VIEW_NODE || vty->node == ENABLE_NODE)
exit(0); exit(0);
break; if (cnode->node_exit)
case CONFIG_NODE: cnode->node_exit(vty);
vty->node = ENABLE_NODE; if (cnode->parent_node)
break; vty->node = cnode->parent_node;
case INTERFACE_NODE:
case PW_NODE: if (vty->node == CONFIG_NODE) {
case VRF_NODE: /* resync in case one of the daemons is somewhere else */
case NH_GROUP_NODE:
case ZEBRA_NODE:
case BGP_NODE:
case RIP_NODE:
case RIPNG_NODE:
case OSPF_NODE:
case OSPF6_NODE:
case EIGRP_NODE:
case BABEL_NODE:
case LDP_NODE:
case LDP_L2VPN_NODE:
case ISIS_NODE:
case OPENFABRIC_NODE:
case RMAP_NODE:
case PBRMAP_NODE:
case VTY_NODE:
case KEYCHAIN_NODE:
case BFD_NODE:
case RPKI_NODE:
vtysh_execute("end"); vtysh_execute("end");
vtysh_execute("configure"); vtysh_execute("configure");
vty->node = CONFIG_NODE;
break;
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
case BGP_IPV4_NODE:
case BGP_IPV4M_NODE:
case BGP_IPV4L_NODE:
case BGP_IPV6_NODE:
case BGP_IPV6M_NODE:
case BGP_IPV6L_NODE:
case BGP_FLOWSPECV4_NODE:
case BGP_FLOWSPECV6_NODE:
case BGP_VRF_POLICY_NODE:
case BGP_EVPN_NODE:
case BGP_VNC_DEFAULTS_NODE:
case BGP_VNC_NVE_GROUP_NODE:
case BGP_VNC_L2_GROUP_NODE:
case BMP_NODE:
vty->node = BGP_NODE;
break;
case BGP_EVPN_VNI_NODE:
vty->node = BGP_EVPN_NODE;
break;
case LDP_IPV4_NODE:
case LDP_IPV6_NODE:
vty->node = LDP_NODE;
break;
case LDP_IPV4_IFACE_NODE:
vty->node = LDP_IPV4_NODE;
break;
case LDP_IPV6_IFACE_NODE:
vty->node = LDP_IPV6_NODE;
break;
case LDP_PSEUDOWIRE_NODE:
vty->node = LDP_L2VPN_NODE;
break;
case KEYCHAIN_KEY_NODE:
vty->node = KEYCHAIN_NODE;
break;
case LINK_PARAMS_NODE:
vty->node = INTERFACE_NODE;
break;
case BFD_PEER_NODE:
vty->node = BFD_NODE;
break;
default:
break;
} }
return CMD_SUCCESS; return CMD_SUCCESS;
} }