mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-31 22:44:58 +00:00
bgpd, tools, vtysh: Handle config migration from 'address-family evpn' to 'address-family l2vpn evpn'
Ticket: CM-16747 Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
1a98c08704
commit
5014d96f0f
@ -2266,6 +2266,97 @@ DEFUN (show_bgp_l2vpn_evpn_import_rt,
|
|||||||
return CMD_SUCCESS;
|
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,
|
DEFUN_NOSH (bgp_evpn_vni,
|
||||||
bgp_evpn_vni_cmd,
|
bgp_evpn_vni_cmd,
|
||||||
"vni (1-16777215)",
|
"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_route_vni_all_cmd);
|
||||||
install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_import_rt_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, &bgp_evpn_vni_cmd);
|
||||||
install_element(BGP_EVPN_NODE, &no_bgp_evpn_vni_cmd);
|
install_element(BGP_EVPN_NODE, &no_bgp_evpn_vni_cmd);
|
||||||
install_element(BGP_EVPN_VNI_NODE, &exit_vni_cmd);
|
install_element(BGP_EVPN_VNI_NODE, &exit_vni_cmd);
|
||||||
|
@ -432,6 +432,8 @@ end
|
|||||||
ctx_keys.append("address-family ipv6 unicast")
|
ctx_keys.append("address-family ipv6 unicast")
|
||||||
elif line == "address-family ipv4":
|
elif line == "address-family ipv4":
|
||||||
ctx_keys.append("address-family ipv4 unicast")
|
ctx_keys.append("address-family ipv4 unicast")
|
||||||
|
elif line == "address-family evpn":
|
||||||
|
ctx_keys.append("address-family l2vpn evpn")
|
||||||
else:
|
else:
|
||||||
ctx_keys.append(line)
|
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_del_to_del.append((ctx_keys, None))
|
||||||
lines_to_add_to_del.append(((tmpline,), 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:
|
if not deleted:
|
||||||
found_add_line = line_exist(lines_to_add, ctx_keys, line)
|
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:
|
elif "router bgp" in running_ctx_keys[0] and len(running_ctx_keys) > 1 and delete_bgpd:
|
||||||
continue
|
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
|
elif ("router bgp" in running_ctx_keys[0] and
|
||||||
len(running_ctx_keys) > 1 and
|
len(running_ctx_keys) > 1 and
|
||||||
running_ctx_keys[1].startswith('address-family')):
|
running_ctx_keys[1].startswith('address-family')):
|
||||||
|
@ -1160,10 +1160,10 @@ DEFUNSH(VTYSH_BGPD, address_family_evpn, address_family_evpn_cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAVE_CUMULUS)
|
#if defined(HAVE_CUMULUS)
|
||||||
DEFUNSH(VTYSH_BGPD, address_family_evpn2, address_family_evpn2_cmd,
|
DEFUNSH_HIDDEN(VTYSH_BGPD, address_family_evpn2, address_family_evpn2_cmd,
|
||||||
"address-family evpn",
|
"address-family evpn",
|
||||||
"Enter Address Family command mode\n"
|
"Enter Address Family command mode\n"
|
||||||
"EVPN Address family\n")
|
"EVPN Address family\n")
|
||||||
{
|
{
|
||||||
vty->node = BGP_EVPN_NODE;
|
vty->node = BGP_EVPN_NODE;
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user