forked from Mirror/frr
lib: make node_parent more generic
Instead of adding a separate case clause for every node, just find the node structure in the global list and get its parent node from there. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
parent
d448e2c5f9
commit
c1e7a5e45e
|
@ -852,96 +852,13 @@ char **cmd_complete_command(vector vline, struct vty *vty, int *status)
|
||||||
/* MUST eventually converge on CONFIG_NODE */
|
/* MUST eventually converge on CONFIG_NODE */
|
||||||
enum node_type node_parent(enum node_type node)
|
enum node_type node_parent(enum node_type node)
|
||||||
{
|
{
|
||||||
enum node_type ret;
|
struct cmd_node *cnode;
|
||||||
|
|
||||||
assert(node > CONFIG_NODE);
|
assert(node > CONFIG_NODE);
|
||||||
|
|
||||||
switch (node) {
|
cnode = vector_lookup(cmdvec, node);
|
||||||
case BGP_VPNV4_NODE:
|
|
||||||
case BGP_VPNV6_NODE:
|
|
||||||
case BGP_FLOWSPECV4_NODE:
|
|
||||||
case BGP_FLOWSPECV6_NODE:
|
|
||||||
case BGP_VRF_POLICY_NODE:
|
|
||||||
case BGP_VNC_DEFAULTS_NODE:
|
|
||||||
case BGP_VNC_NVE_GROUP_NODE:
|
|
||||||
case BGP_VNC_L2_GROUP_NODE:
|
|
||||||
case BGP_IPV4_NODE:
|
|
||||||
case BGP_IPV4M_NODE:
|
|
||||||
case BGP_IPV4L_NODE:
|
|
||||||
case BGP_IPV6_NODE:
|
|
||||||
case BGP_IPV6M_NODE:
|
|
||||||
case BGP_EVPN_NODE:
|
|
||||||
case BGP_IPV6L_NODE:
|
|
||||||
case BMP_NODE:
|
|
||||||
ret = BGP_NODE;
|
|
||||||
break;
|
|
||||||
case BGP_EVPN_VNI_NODE:
|
|
||||||
ret = BGP_EVPN_NODE;
|
|
||||||
break;
|
|
||||||
case KEYCHAIN_KEY_NODE:
|
|
||||||
ret = KEYCHAIN_NODE;
|
|
||||||
break;
|
|
||||||
case LINK_PARAMS_NODE:
|
|
||||||
ret = INTERFACE_NODE;
|
|
||||||
break;
|
|
||||||
case LDP_IPV4_NODE:
|
|
||||||
case LDP_IPV6_NODE:
|
|
||||||
ret = LDP_NODE;
|
|
||||||
break;
|
|
||||||
case LDP_IPV4_IFACE_NODE:
|
|
||||||
ret = LDP_IPV4_NODE;
|
|
||||||
break;
|
|
||||||
case LDP_IPV6_IFACE_NODE:
|
|
||||||
ret = LDP_IPV6_NODE;
|
|
||||||
break;
|
|
||||||
case LDP_PSEUDOWIRE_NODE:
|
|
||||||
ret = LDP_L2VPN_NODE;
|
|
||||||
break;
|
|
||||||
case BFD_PEER_NODE:
|
|
||||||
ret = BFD_NODE;
|
|
||||||
break;
|
|
||||||
case BFD_PROFILE_NODE:
|
|
||||||
ret = BFD_NODE;
|
|
||||||
break;
|
|
||||||
case SR_TRAFFIC_ENG_NODE:
|
|
||||||
ret = SEGMENT_ROUTING_NODE;
|
|
||||||
break;
|
|
||||||
case SR_SEGMENT_LIST_NODE:
|
|
||||||
ret = SR_TRAFFIC_ENG_NODE;
|
|
||||||
break;
|
|
||||||
case SR_POLICY_NODE:
|
|
||||||
ret = SR_TRAFFIC_ENG_NODE;
|
|
||||||
break;
|
|
||||||
case SR_CANDIDATE_DYN_NODE:
|
|
||||||
ret = SR_POLICY_NODE;
|
|
||||||
break;
|
|
||||||
case PCEP_NODE:
|
|
||||||
ret = SR_TRAFFIC_ENG_NODE;
|
|
||||||
break;
|
|
||||||
case PCEP_PCE_CONFIG_NODE:
|
|
||||||
ret = PCEP_NODE;
|
|
||||||
break;
|
|
||||||
case PCEP_PCE_NODE:
|
|
||||||
ret = PCEP_NODE;
|
|
||||||
break;
|
|
||||||
case PCEP_PCC_NODE:
|
|
||||||
ret = PCEP_NODE;
|
|
||||||
break;
|
|
||||||
case SRV6_NODE:
|
|
||||||
ret = SEGMENT_ROUTING_NODE;
|
|
||||||
break;
|
|
||||||
case SRV6_LOCS_NODE:
|
|
||||||
ret = SRV6_NODE;
|
|
||||||
break;
|
|
||||||
case SRV6_LOC_NODE:
|
|
||||||
ret = SRV6_LOCS_NODE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = CONFIG_NODE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return cnode->parent_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Execute command by argument vline vector. */
|
/* Execute command by argument vline vector. */
|
||||||
|
|
Loading…
Reference in a new issue