]> git.proxmox.com Git - mirror_frr.git/commitdiff
vtysh: use parent_node for vtysh_exit()
authorDavid Lamparter <equinox@diac24.net>
Thu, 2 Apr 2020 10:06:12 +0000 (12:06 +0200)
committerDavid Lamparter <equinox@diac24.net>
Thu, 16 Apr 2020 10:54:03 +0000 (12:54 +0200)
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>
vtysh/vtysh.c

index a21deb4a0e1e50a60c060a548f6b76a63fd87bd8..89ffa43a75a3bd82a0fff93b2692cf850cedc476 100644 (file)
@@ -1992,85 +1992,19 @@ DEFUNSH(VTYSH_REALLYALL, vtysh_config_terminal, vtysh_config_terminal_cmd,
 
 static int vtysh_exit(struct vty *vty)
 {
-       switch (vty->node) {
-       case VIEW_NODE:
-       case ENABLE_NODE:
+       struct cmd_node *cnode = vector_lookup(cmdvec, vty->node);
+
+       if (vty->node == VIEW_NODE || vty->node == ENABLE_NODE)
                exit(0);
-               break;
-       case CONFIG_NODE:
-               vty->node = ENABLE_NODE;
-               break;
-       case INTERFACE_NODE:
-       case PW_NODE:
-       case VRF_NODE:
-       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:
+       if (cnode->node_exit)
+               cnode->node_exit(vty);
+       if (cnode->parent_node)
+               vty->node = cnode->parent_node;
+
+       if (vty->node == CONFIG_NODE) {
+               /* resync in case one of the daemons is somewhere else */
                vtysh_execute("end");
                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;
 }