]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd, tools, vtysh: Handle config migration from 'address-family evpn' to 'address...
authorDaniel Walton <dwalton@cumulusnetworks.com>
Wed, 28 Jun 2017 18:30:36 +0000 (11:30 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 8 Aug 2017 14:28:50 +0000 (10:28 -0400)
Ticket: CM-16747
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_evpn_vty.c
tools/frr-reload.py
vtysh/vtysh.c

index b5c17cf9aa3e06ab1b0f7aaa5d98f12ade4bb262..be88fcd2733adde58f119e7ef522887adfbe1aae 100644 (file)
@@ -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 <macip|multicast>]",
+            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 <macip|multicast>]",
+       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) [<type <macip|multicast> | 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);
index bfdc08ab4ca5ab23a81f9568160df9c8ebdac3c5..43496d4cbfebc64610d0beddb1c8b74dba370809 100755 (executable)
@@ -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')):
index 5886d39c197c6fc09e5a50fec6bb7580c1ac9af6..736c8f1825cbe9ed3f0a94a08dd334a009b795d7 100644 (file)
@@ -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;