Introduction of EVPN address-family node that is reachable under BGP node, like follow: address-family evpn. Under that node, only some commands are available for configuring a neighbor or setting some basic settings like attribute unchanged behaviour. Currently, no vty command is available for setting NLRI entries for EVPN.
Signed-off-by: Philippe Guibert <philippe.guib...@6wind.com> --- bgpd/bgp_vty.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/command.c | 3 +++ lib/command.h | 1 + lib/vty.c | 1 + vtysh/vtysh.c | 28 +++++++++++++++++++++++++++- 5 files changed, 86 insertions(+), 1 deletion(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 1720fafe9d0a..6b40bf41b663 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -64,6 +64,9 @@ bgp_node_afi (struct vty *vty) case BGP_ENCAPV6_NODE: afi = AFI_IP6; break; + case BGP_EVPN_NODE: + afi = AFI_INTERNAL_L2VPN; + break; default: afi = AFI_IP; break; @@ -91,6 +94,9 @@ bgp_node_safi (struct vty *vty) case BGP_IPV6M_NODE: safi = SAFI_MULTICAST; break; + case BGP_EVPN_NODE: + safi = SAFI_INTERNAL_EVPN; + break; default: safi = SAFI_UNICAST; break; @@ -4496,6 +4502,16 @@ DEFUN (address_family_encapv6, return CMD_SUCCESS; } +DEFUN (address_family_evpn, + address_family_evpn_cmd, + "address-family evpn", + "Enter Address Family command mode\n" + "Address family\n") +{ + vty->node = BGP_EVPN_NODE; + return CMD_SUCCESS; +} + DEFUN (exit_address_family, exit_address_family_cmd, "exit-address-family", @@ -4503,6 +4519,7 @@ DEFUN (exit_address_family, { /* should match list in command.c:config_exit */ if (vty->node == BGP_IPV4_NODE + || vty->node == BGP_EVPN_NODE || vty->node == BGP_ENCAP_NODE || vty->node == BGP_ENCAPV6_NODE || vty->node == BGP_IPV4M_NODE @@ -10203,6 +10220,13 @@ static struct cmd_node bgp_encapv6_node = 1 }; +static struct cmd_node bgp_evpn_node = +{ + BGP_EVPN_NODE, + "%s(config-router-evpn)# ", + 1 +}; + static void community_list_vty (void); void @@ -10218,6 +10242,7 @@ bgp_vty_init (void) install_node (&bgp_vpnv6_node, NULL); install_node (&bgp_encap_node, NULL); install_node (&bgp_encapv6_node, NULL); + install_node (&bgp_evpn_node, NULL); /* Install default VTY commands to new nodes. */ install_default (BGP_NODE); @@ -10229,6 +10254,7 @@ bgp_vty_init (void) install_default (BGP_VPNV6_NODE); install_default (BGP_ENCAP_NODE); install_default (BGP_ENCAPV6_NODE); + install_default (BGP_EVPN_NODE); install_element (BGP_NODE, &bgp_vrf_cmd); install_element (BGP_NODE, &bgp_vrf_exports_cmd); @@ -10410,6 +10436,7 @@ bgp_vty_init (void) install_element (BGP_VPNV6_NODE, &neighbor_activate_cmd); install_element (BGP_ENCAP_NODE, &neighbor_activate_cmd); install_element (BGP_ENCAPV6_NODE, &neighbor_activate_cmd); + install_element (BGP_EVPN_NODE, &neighbor_activate_cmd); /* "no neighbor activate" commands. */ install_element (BGP_NODE, &no_neighbor_activate_cmd); @@ -10421,6 +10448,7 @@ bgp_vty_init (void) install_element (BGP_VPNV6_NODE, &no_neighbor_activate_cmd); install_element (BGP_ENCAP_NODE, &no_neighbor_activate_cmd); install_element (BGP_ENCAPV6_NODE, &no_neighbor_activate_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_activate_cmd); /* "neighbor peer-group set" commands. */ install_element (BGP_NODE, &neighbor_set_peer_group_cmd); @@ -10667,6 +10695,29 @@ bgp_vty_init (void) install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged9_cmd); install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged10_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged1_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged2_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged3_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged4_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged5_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged6_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged7_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged8_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged9_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged10_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged1_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged2_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged3_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged4_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged5_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged6_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged7_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged8_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged9_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged10_cmd); + /* "nexthop-local unchanged" commands */ install_element (BGP_IPV6_NODE, &neighbor_nexthop_local_unchanged_cmd); install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_local_unchanged_cmd); @@ -11174,6 +11225,8 @@ bgp_vty_init (void) install_element (BGP_NODE, &address_family_encapv4_cmd); install_element (BGP_NODE, &address_family_encapv6_cmd); + install_element (BGP_NODE, &address_family_evpn_cmd); + /* "exit-address-family" command. */ install_element (BGP_IPV4_NODE, &exit_address_family_cmd); install_element (BGP_IPV4M_NODE, &exit_address_family_cmd); @@ -11183,6 +11236,7 @@ bgp_vty_init (void) install_element (BGP_VPNV6_NODE, &exit_address_family_cmd); install_element (BGP_ENCAP_NODE, &exit_address_family_cmd); install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd); + install_element (BGP_EVPN_NODE, &exit_address_family_cmd); /* "clear ip bgp commands" */ install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd); diff --git a/lib/command.c b/lib/command.c index ab46fc4a6d11..7ed99c5c2259 100644 --- a/lib/command.c +++ b/lib/command.c @@ -2623,6 +2623,7 @@ node_parent ( enum node_type node ) case BGP_VPNV6_NODE: case BGP_ENCAP_NODE: case BGP_ENCAPV6_NODE: + case BGP_EVPN_NODE: case BGP_IPV4_NODE: case BGP_IPV4M_NODE: case BGP_IPV6_NODE: @@ -3000,6 +3001,7 @@ DEFUN (config_exit, case BGP_VPNV6_NODE: case BGP_ENCAP_NODE: case BGP_ENCAPV6_NODE: + case BGP_EVPN_NODE: case BGP_IPV6_NODE: case BGP_IPV6M_NODE: vty->node = BGP_NODE; @@ -3044,6 +3046,7 @@ DEFUN (config_end, case BGP_NODE: case BGP_ENCAP_NODE: case BGP_ENCAPV6_NODE: + case BGP_EVPN_NODE: case BGP_VPNV4_NODE: case BGP_VPNV6_NODE: case BGP_IPV4_NODE: diff --git a/lib/command.h b/lib/command.h index cc5dd0891630..84ef9a5825b7 100644 --- a/lib/command.h +++ b/lib/command.h @@ -90,6 +90,7 @@ enum node_type BGP_IPV6M_NODE, /* BGP IPv6 multicast address family. */ BGP_ENCAP_NODE, /* BGP ENCAP SAFI */ BGP_ENCAPV6_NODE, /* BGP ENCAP SAFI */ + BGP_EVPN_NODE, /* BGP EVPN SAFI */ OSPF_NODE, /* OSPF protocol mode */ OSPF6_NODE, /* OSPF protocol for IPv6 mode */ ISIS_NODE, /* ISIS protocol mode */ diff --git a/lib/vty.c b/lib/vty.c index 7ba277fd8a88..766bdbc840f5 100644 --- a/lib/vty.c +++ b/lib/vty.c @@ -742,6 +742,7 @@ vty_end_config (struct vty *vty) case BGP_VPNV6_NODE: case BGP_ENCAP_NODE: case BGP_ENCAPV6_NODE: + case BGP_EVPN_NODE: case BGP_IPV4_NODE: case BGP_IPV4M_NODE: case BGP_IPV6_NODE: diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 2e2203da61d7..ddd7c8476747 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -297,7 +297,8 @@ vtysh_execute_func (const char *line, int pager) || saved_node == BGP_ENCAP_NODE || saved_node == BGP_ENCAPV6_NODE || saved_node == BGP_IPV4_NODE || saved_node == BGP_IPV6_NODE || saved_node == BGP_IPV4M_NODE - || saved_node == BGP_IPV6M_NODE) + || saved_node == BGP_IPV6M_NODE + || saved_node == BGP_EVPN_NODE) && (tried == 1)) { vtysh_execute("exit-address-family"); @@ -717,6 +718,12 @@ static struct cmd_node bgp_encapv6_node = "%s(config-router-af)# " }; +static struct cmd_node bgp_evpn_node = +{ + BGP_EVPN_NODE, + "%s(config-router-af)# " +}; + static struct cmd_node bgp_ipv4_node = { BGP_IPV4_NODE, @@ -914,6 +921,17 @@ DEFUNSH (VTYSH_BGPD, } DEFUNSH (VTYSH_BGPD, + address_family_evpn, + address_family_evpn_cmd, + "address-family evpn", + "Enter Address Family command mode\n" + "Address family\n") +{ + vty->node = BGP_EVPN_NODE; + return CMD_SUCCESS; +} + +DEFUNSH (VTYSH_BGPD, address_family_ipv4_unicast, address_family_ipv4_unicast_cmd, "address-family ipv4 unicast", @@ -1141,6 +1159,7 @@ vtysh_exit (struct vty *vty) case BGP_VPNV6_NODE: case BGP_ENCAP_NODE: case BGP_ENCAPV6_NODE: + case BGP_EVPN_NODE: case BGP_IPV4_NODE: case BGP_IPV4M_NODE: case BGP_IPV6_NODE: @@ -1185,6 +1204,7 @@ DEFUNSH (VTYSH_BGPD, || vty->node == BGP_VPNV6_NODE || vty->node == BGP_ENCAP_NODE || vty->node == BGP_ENCAPV6_NODE + || vty->node == BGP_EVPN_NODE || vty->node == BGP_IPV6_NODE || vty->node == BGP_IPV6M_NODE) vty->node = BGP_NODE; @@ -2422,6 +2442,7 @@ vtysh_init_vty (void) install_node (&bgp_vpnv6_node, NULL); install_node (&bgp_encap_node, NULL); install_node (&bgp_encapv6_node, NULL); + install_node (&bgp_evpn_node, NULL); install_node (&bgp_ipv4_node, NULL); install_node (&bgp_ipv4m_node, NULL); /* #ifdef HAVE_IPV6 */ @@ -2452,6 +2473,7 @@ vtysh_init_vty (void) vtysh_install_default (BGP_VPNV6_NODE); vtysh_install_default (BGP_ENCAP_NODE); vtysh_install_default (BGP_ENCAPV6_NODE); + vtysh_install_default (BGP_EVPN_NODE); vtysh_install_default (BGP_IPV4_NODE); vtysh_install_default (BGP_IPV4M_NODE); vtysh_install_default (BGP_IPV6_NODE); @@ -2494,6 +2516,7 @@ vtysh_init_vty (void) install_element (BGP_ENCAP_NODE, &vtysh_quit_bgpd_cmd); install_element (BGP_ENCAPV6_NODE, &vtysh_exit_bgpd_cmd); install_element (BGP_ENCAPV6_NODE, &vtysh_quit_bgpd_cmd); + install_element (BGP_EVPN_NODE, &vtysh_quit_bgpd_cmd); install_element (BGP_IPV4_NODE, &vtysh_exit_bgpd_cmd); install_element (BGP_IPV4_NODE, &vtysh_quit_bgpd_cmd); install_element (BGP_IPV4M_NODE, &vtysh_exit_bgpd_cmd); @@ -2528,6 +2551,7 @@ vtysh_init_vty (void) install_element (BGP_VPNV6_NODE, &vtysh_end_all_cmd); install_element (BGP_ENCAP_NODE, &vtysh_end_all_cmd); install_element (BGP_ENCAPV6_NODE, &vtysh_end_all_cmd); + install_element (BGP_EVPN_NODE, &vtysh_end_all_cmd); install_element (BGP_IPV6_NODE, &vtysh_end_all_cmd); install_element (BGP_IPV6M_NODE, &vtysh_end_all_cmd); install_element (ISIS_NODE, &vtysh_end_all_cmd); @@ -2560,6 +2584,7 @@ vtysh_init_vty (void) install_element (BGP_NODE, &address_family_vpnv6_unicast_cmd); install_element (BGP_NODE, &address_family_encap_cmd); install_element (BGP_NODE, &address_family_encapv6_cmd); + install_element (BGP_NODE, &address_family_evpn_cmd); install_element (BGP_NODE, &address_family_ipv4_unicast_cmd); install_element (BGP_NODE, &address_family_ipv4_multicast_cmd); #ifdef HAVE_IPV6 @@ -2571,6 +2596,7 @@ vtysh_init_vty (void) install_element (BGP_VPNV6_NODE, &exit_address_family_cmd); install_element (BGP_ENCAP_NODE, &exit_address_family_cmd); install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd); + install_element (BGP_EVPN_NODE, &exit_address_family_cmd); install_element (BGP_IPV4_NODE, &exit_address_family_cmd); install_element (BGP_IPV4M_NODE, &exit_address_family_cmd); install_element (BGP_IPV6_NODE, &exit_address_family_cmd); -- 2.1.4 _______________________________________________ Quagga-dev mailing list Quagga-dev@lists.quagga.net https://lists.quagga.net/mailman/listinfo/quagga-dev