This commit includes changes related to introduce new subnode under bgp called vrf <>. This node permits configuring route distinguishers and route target under the subnode, by using vtysh command tool. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> --- vtysh/extract.pl.in | 2 ++ vtysh/vtysh.c | 42 ++++++++++++++++++++++++++++++++++++++++++ vtysh/vtysh_config.c | 6 +++++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in index fc5a5147f1d0..5d8b21ef135d 100755 --- a/vtysh/extract.pl.in +++ b/vtysh/extract.pl.in @@ -69,6 +69,8 @@ $ignore{'"exit-link-params"'} = "ignore"; $ignore{'"vnc defaults"'} = "ignore"; $ignore{'"vnc nve-group NAME"'} = "ignore"; $ignore{'"exit-vnc"'} = "ignore"; +$ignore{'"vrf WORD"'} = "ignore"; +$ignore{'"exit-bgp-vrf"'} = "ignore"; $ignore{'"key chain WORD"'} = "ignore"; $ignore{'"key (0-2147483647)"'} = "ignore"; $ignore{'"route-map WORD <deny|permit> (1-65535)"'} = "ignore"; diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index f67fc1f31d6b..e6b32791cd33 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -317,6 +317,10 @@ vtysh_execute_func (const char *line, int pager) || saved_node == BGP_VNC_L2_GROUP_NODE) && (tried == 1)) { vtysh_execute("exit-vnc"); + } + else if ((saved_node == BGP_VRF_NODE) && (tried == 1)) + { + vtysh_execute("exit-bgp-vrf"); } else if ((saved_node == KEYCHAIN_KEY_NODE) && (tried == 1)) { @@ -969,6 +973,13 @@ static struct cmd_node bgp_vnc_l2_group_node = "%s(config-router-vnc-l2-group)# " }; +/* VRF node. */ +static struct cmd_node bgp_vrf_node = +{ + BGP_VRF_NODE, + "%s(bgp-vrf)# " +}; + static struct cmd_node ospf_node = { OSPF_NODE, @@ -1222,6 +1233,18 @@ DEFUNSH (VTYSH_BGPD, } #endif +DEFUNSH (VTYSH_BGPD, + bgp_vrf, + bgp_vrf_cmd, + "vrf WORD", + "BGP VRF\n" + "VRF Name\n" +) +{ + vty->node = BGP_VRF_NODE; + return CMD_SUCCESS; +} + DEFUNSH (VTYSH_RIPD, key_chain, key_chain_cmd, @@ -1484,6 +1507,7 @@ vtysh_exit (struct vty *vty) case BGP_VNC_DEFAULTS_NODE: case BGP_VNC_NVE_GROUP_NODE: case BGP_VNC_L2_GROUP_NODE: + case BGP_VRF_NODE: vty->node = BGP_NODE; break; case LDP_IPV4_NODE: @@ -1560,6 +1584,17 @@ DEFUNSH (VTYSH_BGPD, return CMD_SUCCESS; } +DEFUNSH (VTYSH_BGPD, + exit_bgp_vrf, + exit_bgp_vrf_cmd, + "exit-bgp-vrf", + "Exit from BGP vrf configuration mode\n") +{ + if (vty->node == BGP_VRF_NODE) + vty->node = BGP_NODE; + return CMD_SUCCESS; +} + DEFUNSH (VTYSH_RIPD, vtysh_exit_ripd, vtysh_exit_ripd_cmd, @@ -3044,6 +3079,7 @@ vtysh_init_vty (void) install_node (&bgp_vnc_defaults_node, NULL); install_node (&bgp_vnc_nve_group_node, NULL); install_node (&bgp_vnc_l2_group_node, NULL); + install_node (&bgp_vrf_node, NULL); install_node (&ospf_node, NULL); install_node (&ripng_node, NULL); install_node (&ospf6_node, NULL); @@ -3082,6 +3118,7 @@ vtysh_init_vty (void) vtysh_install_default (BGP_VNC_NVE_GROUP_NODE); vtysh_install_default (BGP_VNC_L2_GROUP_NODE); #endif + vtysh_install_default (BGP_VRF_NODE); vtysh_install_default (OSPF_NODE); vtysh_install_default (RIPNG_NODE); vtysh_install_default (OSPF6_NODE); @@ -3156,6 +3193,8 @@ vtysh_init_vty (void) install_element (BGP_VNC_L2_GROUP_NODE, &vtysh_exit_bgpd_cmd); install_element (BGP_VNC_L2_GROUP_NODE, &vtysh_quit_bgpd_cmd); #endif + install_element (BGP_VRF_NODE, &vtysh_exit_bgpd_cmd); + install_element (BGP_VRF_NODE, &vtysh_quit_bgpd_cmd); install_element (ISIS_NODE, &vtysh_exit_isisd_cmd); install_element (ISIS_NODE, &vtysh_quit_isisd_cmd); install_element (KEYCHAIN_NODE, &vtysh_exit_ripd_cmd); @@ -3193,6 +3232,7 @@ vtysh_init_vty (void) install_element (BGP_VNC_DEFAULTS_NODE, &vtysh_end_all_cmd); install_element (BGP_VNC_NVE_GROUP_NODE, &vtysh_end_all_cmd); install_element (BGP_VNC_L2_GROUP_NODE, &vtysh_end_all_cmd); + install_element (BGP_VRF_NODE, &vtysh_end_all_cmd); install_element (ISIS_NODE, &vtysh_end_all_cmd); install_element (KEYCHAIN_NODE, &vtysh_end_all_cmd); install_element (KEYCHAIN_KEY_NODE, &vtysh_end_all_cmd); @@ -3246,6 +3286,7 @@ vtysh_init_vty (void) install_element (BGP_NODE, &address_family_ipv4_multicast_cmd); install_element (BGP_NODE, &address_family_ipv6_cmd); install_element (BGP_NODE, &address_family_ipv6_multicast_cmd); + install_element (BGP_NODE, &bgp_vrf_cmd); install_element (BGP_VPNV4_NODE, &exit_address_family_cmd); install_element (BGP_VPNV6_NODE, &exit_address_family_cmd); install_element (BGP_ENCAP_NODE, &exit_address_family_cmd); @@ -3259,6 +3300,7 @@ vtysh_init_vty (void) install_element (BGP_VNC_NVE_GROUP_NODE, &exit_vnc_config_cmd); install_element (BGP_VNC_L2_GROUP_NODE, &exit_vnc_config_cmd); + install_element (BGP_VRF_NODE, &exit_bgp_vrf_cmd); install_element (CONFIG_NODE, &key_chain_cmd); install_element (CONFIG_NODE, &vtysh_route_map_cmd); install_element (CONFIG_NODE, &vtysh_line_vty_cmd); diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c index e60e9c091fdf..b4afd56d9298 100644 --- a/vtysh/vtysh_config.c +++ b/vtysh/vtysh_config.c @@ -187,7 +187,11 @@ vtysh_config_parse_line (const char *line) config->index == NS_NODE || config->index == VTY_NODE) config_add_line_uniq (config->line, line); - else + else if (config->index == BGP_VRF_NODE) + { + config = config_get (BGP_VRF_NODE, line); + } + else config_add_line (config->line, line); } else -- 2.1.4