From: Daniel Walton Date: Wed, 28 Jun 2017 18:30:36 +0000 (-0700) Subject: bgpd, tools, vtysh: Handle config migration from 'address-family evpn' to 'address... X-Git-Tag: frr-4.0-dev~431^2~21 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5014d96f0f02d3005bf41be2db343cb230cd9fdc;p=mirror%2Ffrr.git bgpd, tools, vtysh: Handle config migration from 'address-family evpn' to 'address-family l2vpn evpn' Ticket: CM-16747 Signed-off-by: Daniel Walton Reviewed-by: Quentin Young --- diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c index b5c17cf9aa..be88fcd273 100644 --- a/bgpd/bgp_evpn_vty.c +++ b/bgpd/bgp_evpn_vty.c @@ -2266,6 +2266,97 @@ DEFUN (show_bgp_l2vpn_evpn_import_rt, return CMD_SUCCESS; } +#if defined(HAVE_CUMULUS) +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_vni, show_bgp_evpn_vni_cmd, + "show bgp evpn vni [(1-16777215)]", SHOW_STR BGP_STR EVPN_HELP_STR + "Show VNI\n" + "VNI number\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_summary, show_bgp_evpn_summary_cmd, + "show bgp evpn summary [json]", SHOW_STR BGP_STR EVPN_HELP_STR + "Summary of BGP neighbor status\n" + "JavaScript Object Notation\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_route, show_bgp_evpn_route_cmd, + "show bgp evpn route [type ]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "Specify Route type\n" + "MAC-IP (Type-2) route\n" + "Multicast (Type-3) route\n") + +ALIAS_HIDDEN( + show_bgp_l2vpn_evpn_route_rd, show_bgp_evpn_route_rd_cmd, + "show bgp evpn route rd ASN:nn_or_IP-address:nn [type ]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "Route Distinguisher\n" + "ASN:XX or A.B.C.D:XX\n" + "Specify Route type\n" + "MAC-IP (Type-2) route\n" + "Multicast (Type-3) route\n") + +ALIAS_HIDDEN( + show_bgp_l2vpn_evpn_route_rd_macip, show_bgp_evpn_route_rd_macip_cmd, + "show bgp evpn route rd ASN:nn_or_IP-address:nn mac WORD [ip WORD]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "Route Distinguisher\n" + "ASN:XX or A.B.C.D:XX\n" + "MAC\n" + "MAC address (e.g., 00:e0:ec:20:12:62)\n" + "IP\n" + "IP address (IPv4 or IPv6)\n") + +ALIAS_HIDDEN( + show_bgp_l2vpn_evpn_route_vni, show_bgp_evpn_route_vni_cmd, + "show bgp evpn route vni (1-16777215) [ | vtep A.B.C.D>]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "VXLAN Network Identifier\n" + "VNI number\n" + "Specify Route type\n" + "MAC-IP (Type-2) route\n" + "Multicast (Type-3) route\n" + "Remote VTEP\n" + "Remote VTEP IP address\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_route_vni_macip, + show_bgp_evpn_route_vni_macip_cmd, + "show bgp evpn route vni (1-16777215) mac WORD [ip WORD]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "VXLAN Network Identifier\n" + "VNI number\n" + "MAC\n" + "MAC address (e.g., 00:e0:ec:20:12:62)\n" + "IP\n" + "IP address (IPv4 or IPv6)\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_route_vni_multicast, + show_bgp_evpn_route_vni_multicast_cmd, + "show bgp evpn route vni (1-16777215) multicast A.B.C.D", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "VXLAN Network Identifier\n" + "VNI number\n" + "Multicast (Type-3) route\n" + "Originating Router IP address\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_route_vni_all, show_bgp_evpn_route_vni_all_cmd, + "show bgp evpn route vni all [vtep A.B.C.D]", + SHOW_STR BGP_STR EVPN_HELP_STR + "EVPN route information\n" + "VXLAN Network Identifier\n" + "All VNIs\n" + "Remote VTEP\n" + "Remote VTEP IP address\n") + +ALIAS_HIDDEN(show_bgp_l2vpn_evpn_import_rt, show_bgp_evpn_import_rt_cmd, + "show bgp evpn import-rt", + SHOW_STR BGP_STR EVPN_HELP_STR "Show import route target\n") +#endif + DEFUN_NOSH (bgp_evpn_vni, bgp_evpn_vni_cmd, "vni (1-16777215)", @@ -2712,6 +2803,18 @@ void bgp_ethernetvpn_init(void) install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_vni_all_cmd); install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_import_rt_cmd); + /* "show bgp evpn" commands. */ + install_element(VIEW_NODE, &show_bgp_evpn_vni_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_summary_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_rd_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_rd_macip_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_vni_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_vni_multicast_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_vni_macip_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_route_vni_all_cmd); + install_element(VIEW_NODE, &show_bgp_evpn_import_rt_cmd); + install_element(BGP_EVPN_NODE, &bgp_evpn_vni_cmd); install_element(BGP_EVPN_NODE, &no_bgp_evpn_vni_cmd); install_element(BGP_EVPN_VNI_NODE, &exit_vni_cmd); diff --git a/tools/frr-reload.py b/tools/frr-reload.py index bfdc08ab4c..43496d4cbf 100755 --- a/tools/frr-reload.py +++ b/tools/frr-reload.py @@ -432,6 +432,8 @@ end ctx_keys.append("address-family ipv6 unicast") elif line == "address-family ipv4": ctx_keys.append("address-family ipv4 unicast") + elif line == "address-family evpn": + ctx_keys.append("address-family l2vpn evpn") else: ctx_keys.append(line) @@ -745,6 +747,37 @@ def ignore_delete_re_add_lines(lines_to_add, lines_to_del): lines_to_del_to_del.append((ctx_keys, None)) lines_to_add_to_del.append(((tmpline,), None)) + if (len(ctx_keys) == 3 and + ctx_keys[0].startswith('router bgp') and + ctx_keys[1] == 'address-family l2vpn evpn' and + ctx_keys[2].startswith('vni')): + + re_route_target = re.search('^route-target import (.*)$', line) if line is not None else False + + if re_route_target: + rt = re_route_target.group(1).strip() + route_target_import_line = line + route_target_export_line = "route-target export %s" % rt + route_target_both_line = "route-target both %s" % rt + + found_route_target_export_line = line_exist(lines_to_del, ctx_keys, route_target_export_line) + found_route_target_both_line = line_exist(lines_to_add, ctx_keys, route_target_both_line) + + ''' + If the running configs has + route-target import 1:1 + route-target export 1:1 + + and the config we are reloading against has + route-target both 1:1 + + then we can ignore deleting the import/export and ignore adding the 'both' + ''' + if found_route_target_export_line and found_route_target_both_line: + lines_to_del_to_del.append((ctx_keys, route_target_import_line)) + lines_to_del_to_del.append((ctx_keys, route_target_export_line)) + lines_to_add_to_del.append((ctx_keys, route_target_both_line)) + if not deleted: found_add_line = line_exist(lines_to_add, ctx_keys, line) @@ -822,6 +855,13 @@ def compare_context_objects(newconf, running): elif "router bgp" in running_ctx_keys[0] and len(running_ctx_keys) > 1 and delete_bgpd: continue + # Delete an entire vni sub-context under "address-family l2vpn evpn" + elif ("router bgp" in running_ctx_keys[0] and + len(running_ctx_keys) > 2 and + running_ctx_keys[1].startswith('address-family l2vpn evpn') and + running_ctx_keys[2].startswith('vni ')): + lines_to_del.append((running_ctx_keys, None)) + elif ("router bgp" in running_ctx_keys[0] and len(running_ctx_keys) > 1 and running_ctx_keys[1].startswith('address-family')): diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 5886d39c19..736c8f1825 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -1160,10 +1160,10 @@ DEFUNSH(VTYSH_BGPD, address_family_evpn, address_family_evpn_cmd, } #if defined(HAVE_CUMULUS) -DEFUNSH(VTYSH_BGPD, address_family_evpn2, address_family_evpn2_cmd, - "address-family evpn", - "Enter Address Family command mode\n" - "EVPN Address family\n") +DEFUNSH_HIDDEN(VTYSH_BGPD, address_family_evpn2, address_family_evpn2_cmd, + "address-family evpn", + "Enter Address Family command mode\n" + "EVPN Address family\n") { vty->node = BGP_EVPN_NODE; return CMD_SUCCESS;