From: Philippe Guibert Date: Mon, 5 Sep 2016 08:54:06 +0000 (+0200) Subject: bgpd: basic vty support for EVPN X-Git-Tag: frr-3.0-branchpoint~29^2~56 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=4e0b7b6d35ff451872492546a1cf0e5536cd4b28;p=matthieu%2Ffrr.git bgpd: basic vty support for EVPN 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 --- diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index b4425297b3..cca34d0a85 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -74,6 +74,9 @@ bgp_node_afi (struct vty *vty) case BGP_ENCAPV6_NODE: afi = AFI_IP6; break; + case BGP_EVPN_NODE: + afi = AFI_L2VPN; + break; default: afi = AFI_IP; break; @@ -101,6 +104,9 @@ bgp_node_safi (struct vty *vty) case BGP_IPV6M_NODE: safi = SAFI_MULTICAST; break; + case BGP_EVPN_NODE: + safi = SAFI_EVPN; + break; default: safi = SAFI_UNICAST; break; @@ -119,6 +125,9 @@ bgp_vty_afi_from_arg(const char *afi_str) else if (!strcmp(afi_str, "ipv6")) { afi = AFI_IP6; } + else if (!strcmp(afi_str, "l2vpn")) { + afi = AFI_L2VPN; + } return afi; } @@ -195,6 +204,12 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t if (safi) *safi = SAFI_ENCAP; } + else if (argv_find (argv, argc, "evpn", index)) + { + ret = 1; + if (safi) + *safi = SAFI_EVPN; + } return ret; } @@ -5695,6 +5710,18 @@ 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") +{ +#if defined(HAVE_EVPN) + vty->node = BGP_EVPN_NODE; +#endif /* HAVE_EVPN */ + return CMD_SUCCESS; +} + DEFUN (exit_address_family, exit_address_family_cmd, "exit-address-family", @@ -5707,7 +5734,8 @@ DEFUN (exit_address_family, || vty->node == BGP_IPV6M_NODE || vty->node == BGP_VPNV6_NODE || vty->node == BGP_ENCAP_NODE - || vty->node == BGP_ENCAPV6_NODE) + || vty->node == BGP_ENCAPV6_NODE + || vty->node == BGP_EVPN_NODE) vty->node = BGP_NODE; return CMD_SUCCESS; } @@ -9966,6 +9994,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 @@ -9981,6 +10016,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); @@ -9992,6 +10028,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); /* "bgp multiple-instance" commands. */ install_element (CONFIG_NODE, &bgp_multiple_instance_cmd); @@ -10205,6 +10242,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); @@ -10216,6 +10254,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. * Long term we should only accept this command under BGP_NODE and not all of @@ -10286,6 +10325,9 @@ bgp_vty_init (void) install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged_cmd); install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged_cmd); + install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd); + install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged_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); @@ -10828,6 +10870,8 @@ bgp_vty_init (void) install_element (BGP_NODE, &address_family_encap_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); @@ -10837,6 +10881,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);