From 78f647485d337e63a4664c89481e03c2a15b35e9 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Tue, 20 Apr 2021 21:13:11 +0200 Subject: bgp: remove references to new XML/Python implementation not yet available in equuleus --- data/templates/frr/bgp.frr.tmpl | 287 ----- .../include/bgp-afi-aggregate-address.xml.i | 14 - .../bgp-afi-redistribute-metric-route-map.xml.i | 19 - .../include/bgp-neighbor-afi-ipv4-unicast.xml.i | 286 ----- .../include/bgp-neighbor-afi-ipv6-unicast.xml.i | 331 ------ .../include/bgp-peer-group-afi-ipv4-unicast.xml.i | 303 ----- .../include/bgp-peer-group-afi-ipv6-unicast.xml.i | 319 ------ interface-definitions/protocols-bgp.xml.in | 1208 -------------------- src/conf_mode/protocols_bgp.py | 174 --- 9 files changed, 2941 deletions(-) delete mode 100644 data/templates/frr/bgp.frr.tmpl delete mode 100644 interface-definitions/include/bgp-afi-aggregate-address.xml.i delete mode 100644 interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i delete mode 100644 interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i delete mode 100644 interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i delete mode 100644 interface-definitions/include/bgp-peer-group-afi-ipv4-unicast.xml.i delete mode 100644 interface-definitions/include/bgp-peer-group-afi-ipv6-unicast.xml.i delete mode 100644 interface-definitions/protocols-bgp.xml.in delete mode 100755 src/conf_mode/protocols_bgp.py diff --git a/data/templates/frr/bgp.frr.tmpl b/data/templates/frr/bgp.frr.tmpl deleted file mode 100644 index 16355a1e5..000000000 --- a/data/templates/frr/bgp.frr.tmpl +++ /dev/null @@ -1,287 +0,0 @@ -{### MACRO definition for recurring peer patter, this can be either fed by a ###} -{### peer-group or an individual BGP neighbor ###} -{% macro bgp_neighbor(neighbor, config, peer_group=false) %} -{% if peer_group == true %} - neighbor {{ neighbor }} peer-group -{% elif config.peer_group is defined and config.peer_group is not none %} - neighbor {{ neighbor }} peer-group {{ config.peer_group }} -{% endif %} -{% if config.remote_as is defined and config.remote_as is not none %} - neighbor {{ neighbor }} remote-as {{ config.remote_as }} -{% endif %} -{% if config.bfd is defined %} - neighbor {{ neighbor }} bfd -{% endif %} -{% if config.capability is defined and config.capability is not none %} -{% if config.capability.dynamic is defined %} - neighbor {{ neighbor }} capability dynamic -{% endif %} -{% if config.capability.extended_nexthop is defined %} - neighbor {{ neighbor }} capability extended-nexthop -{% endif %} -{% endif %} -{% if config.description is defined and config.description is not none %} - neighbor {{ neighbor }} description {{ config.description }} -{% endif %} -{% if config.disable_capability_negotiation is defined %} - neighbor {{ neighbor }} disable-capability-negotiation -{% endif %} -{% if config.ebgp_multihop is defined and config.ebgp_multihop is not none %} - neighbor {{ neighbor }} ebgp-multihop {{ config.ebgp_multihop }} -{% endif %} -{% if config.local_as is defined and config.local_as is not none %} -{% for local_asn in config.local_as %} - neighbor {{ neighbor }} local-as {{ local_asn }} {{ 'no-prepend' if config.local_as[local_asn].no_prepend is defined }} -{% endfor %} -{% endif %} -{% if config.override_capability is defined %} - neighbor {{ neighbor }} override-capability -{% endif %} -{% if config.passive is defined %} - neighbor {{ neighbor }} passive -{% endif %} -{% if config.password is defined and config.password is not none %} - neighbor {{ neighbor }} password {{ config.password }} -{% endif %} -{% if config.shutdown is defined %} - neighbor {{ neighbor }} shutdown -{% endif %} -{% if config.ttl_security is defined and config.ttl_security.hops is defined and config.ttl_security.hops is not none %} - neighbor {{ neighbor }} ttl-security hops {{ config.ttl_security.hops }} -{% endif %} -{% if config.update_source is defined and config.update_source is not none %} - neighbor {{ neighbor }} update-source {{ config.update_source }} -{% endif %} - ! -{% if config.address_family is defined and config.address_family is not none %} -{% for af in config.address_family %} -{% if af == 'ipv4_unicast' %} - address-family ipv4 unicast -{% elif af == 'ipv6_unicast' %} - address-family ipv6 unicast -{% endif %} -{% if config.address_family[af].allowas_in is defined and config.address_family[af].allowas_in is not none %} - neighbor {{ neighbor }} allowas-in {{ config.address_family[af].allowas_in.number if config.address_family[af].allowas_in.number is defined }} -{% endif %} -{% if config.address_family[af].remove_private_as is defined %} - neighbor {{ neighbor }} remove-private-AS -{% endif %} -{% if config.address_family[af].route_reflector_client is defined %} - neighbor {{ neighbor }} route-reflector-client -{% endif %} -{% if config.address_family[af].weight is defined and config.address_family[af].weight is not none %} - neighbor {{ neighbor }} weight {{ config.address_family[af].weight }} -{% endif %} -{% if config.address_family[af].attribute_unchanged is defined and config.address_family[af].attribute_unchanged is not none %} - neighbor {{ neighbor }} attribute-unchanged {{ 'as-path ' if config.address_family[af].attribute_unchanged.as_path is defined }}{{ 'med ' if config.address_family[af].attribute_unchanged.med is defined }}{{ 'next-hop ' if config.address_family[af].attribute_unchanged.next_hop is defined }} -{% endif %} -{% if config.address_family[af].capability is defined and config.address_family[af].capability.orf is defined and config.address_family[af].capability.orf.prefix_list is defined and config.address_family[af].capability.orf.prefix_list is not none %} - neighbor {{ neighbor }} capability orf prefix-list {{ config.address_family[af].capability.orf.prefix_list }} -{% endif %} -{% if config.address_family[af].default_originate is defined %} - neighbor {{ neighbor }} default-originate {{ 'route-map ' + config.address_family[af].default_originate.route_map if config.address_family[af].default_originate.route_map is defined }} -{% endif %} -{% if config.address_family[af].distribute_list is defined and config.address_family[af].distribute_list is not none %} -{% if config.address_family[af].distribute_list.export is defined and config.address_family[af].distribute_list.export is not none %} - neighbor {{ neighbor }} distribute-list {{ config.address_family[af].distribute_list.export }} out -{% elif config.address_family[af].distribute_list.import is defined and config.address_family[af].distribute_list.import is not none %} - neighbor {{ neighbor }} distribute-list {{ config.address_family[af].distribute_list.export }} in -{% endif %} -{% endif %} -{% if config.address_family[af].filter_list is defined and config.address_family[af].filter_list is not none %} -{% if config.address_family[af].filter_list.export is defined and config.address_family[af].filter_list.export is not none %} - neighbor {{ neighbor }} filter-list {{ config.address_family[af].filter_list.export }} out -{% elif config.address_family[af].filter_list.import is defined and config.address_family[af].filter_list.import is not none %} - neighbor {{ neighbor }} filter-list {{ config.address_family[af].filter_list.import }} in -{% endif %} -{% endif %} -{% if config.address_family[af].maximum_prefix is defined and config.address_family[af].maximum_prefix is not none %} - neighbor {{ neighbor }} maximum-prefix {{ config.address_family[af].maximum_prefix }} -{% endif %} -{% if config.address_family[af].nexthop_self is defined %} -{# https://phabricator.vyos.net/T1817 #} - neighbor {{ neighbor }} next-hop-self {{ 'force' if config.address_family[af].nexthop_self.force is defined }} -{% endif %} -{% if config.address_family[af].route_server_client is defined %} - neighbor {{ neighbor }} route-server-client -{% endif %} -{% if config.address_family[af].route_map is defined and config.address_family[af].route_map is not none %} -{% if config.address_family[af].route_map.export is defined and config.address_family[af].route_map.export is not none %} - neighbor {{ neighbor }} route-map {{ config.address_family[af].route_map.export }} out -{% elif config.address_family[af].route_map.import is defined and config.address_family[af].route_map.import is not none %} - neighbor {{ neighbor }} route-map {{ config.address_family[af].route_map.import }} in -{% endif %} -{% endif %} -{% if config.address_family[af].prefix_list is defined and config.address_family[af].prefix_list is not none %} -{% if config.address_family[af].prefix_list.export is defined and config.address_family[af].prefix_list.export is not none %} - neighbor {{ neighbor }} prefix-list {{ config.address_family[af].prefix_list.export }} out -{% elif config.address_family[af].prefix_list.import is defined and config.address_family[af].prefix_list.import is not none %} - neighbor {{ neighbor }} prefix-list {{ config.address_family[af].prefix_list.import }} in -{% endif %} -{% endif %} -{% if config.address_family[af].soft_reconfiguration is defined and config.address_family[af].soft_reconfiguration.inbound is defined %} - neighbor {{ neighbor }} soft-reconfiguration inbound -{% endif %} -{% if config.address_family[af].unsuppress_map is defined and config.address_family[af].unsuppress_map is not none %} - neighbor {{ neighbor }} unsuppress-map {{ config.address_family[af].unsuppress_map }} -{% endif %} - neighbor {{ neighbor }} activate - exit-address-family - ! -{% endfor %} -{% endif %} -{% endmacro %} -! -router bgp {{ asn }} - no bgp default ipv4-unicast -{% if address_family is defined and address_family is not none %} -{% for af in address_family %} - ! -{% if af == 'ipv4_unicast' %} - address-family ipv4 unicast -{% elif af == 'ipv6_unicast' %} - address-family ipv6 unicast -{% endif %} -{% if address_family[af].aggregate_address is defined and address_family[af].aggregate_address is not none %} -{% for ip in address_family[af].aggregate_address %} - aggregate-address {{ ip }}{{ ' as-set' if address_family[af].aggregate_address[ip].as_set is defined }}{{ ' summary-only' if address_family[af].aggregate_address[ip].summary_only is defined }} -{% endfor %} -{% endif %} -{% if address_family[af].redistribute is defined and address_family[af].redistribute is not none %} -{% for protocol in address_family[af].redistribute %} -{% if protocol == 'table' %} - redistribute table {{ address_family[af].redistribute[protocol].table }} -{% else %} - redistribute {{ protocol }}{% if address_family[af].redistribute[protocol].metric is defined %} metric {{ address_family[af].redistribute[protocol].metric }}{% endif %}{% if address_family[af].redistribute[protocol].route_map is defined %} route-map {{ address_family[af].redistribute[protocol].route_map }}{% endif %} -{####### we need this blank line!! #######} - -{% endif %} -{% endfor %} -{% endif %} -{% if address_family[af].network is defined and address_family[af].network is not none %} -{% for network in address_family[af].network %} - network {{ network }}{% if address_family[af].network[network].route_map is defined %} route-map {{ address_family[af].network[network].route_map }}{% endif %}{% if address_family[af].network[network].backdoor is defined %} backdoor{% endif %} -{####### we need this blank line!! #######} - -{% endfor %} -{% endif %} - exit-address-family -{% endfor %} -{% endif %} - ! -{# set protocols bgp xxxx maximum-paths ibgp x, Generated by default for afi_4 #} -{# We don't have this parameter in afi_6. But this is supported in FRR #} -{% if maximum_paths is defined and maximum_paths is not none %} -{% if maximum_paths.ebgp is defined and maximum_paths.ebgp is not none %} - ! - address-family ipv4 unicast - maximum-paths {{ maximum_paths.ebgp }} - exit-address-family - ! -{% endif %} -{% if maximum_paths.ibgp is defined and maximum_paths.ibgp is not none %} - ! - address-family ipv4 unicast - maximum-paths ibgp {{ maximum_paths.ibgp }} - exit-address-family - ! -{% endif %} -{% endif %} - ! -{% if peer_group is defined and peer_group is not none %} -{% for peer, config in peer_group.items() %} -{{ bgp_neighbor(peer, config, true) }} -{% endfor %} -{% endif %} - ! -{% if neighbor is defined and neighbor is not none %} -{% for n, config in neighbor.items() %} -{{ bgp_neighbor(n, config) }} -{% endfor %} -{% endif %} - ! -{% if parameters is defined %} -{% if parameters.always_compare_med is defined %} - bgp always-compare-med -{% endif %} -{% if parameters.bestpath is defined and parameters.bestpath is not none %} -{% if parameters.bestpath.compare_routerid is defined %} - bgp bestpath compare-routerid -{% endif %} -{% if parameters.bestpath.as_path is defined and parameters.bestpath.as_path is not none %} -{% for option in parameters.bestpath.as_path %} - bgp bestpath as-path {{ option|replace('_', '-') }} -{% endfor %} -{% endif %} -{% if parameters.bestpath.med is defined and parameters.bestpath.med is not none %} - bgp bestpath med {{ 'confed' if parameters.bestpath.med.confed is defined }} {{ 'missing-as-worst' if parameters.bestpath.med.missing_as_worst is defined }} -{% endif %} -{% endif %} -{% if parameters.cluster_id is defined and parameters.cluster_id is not none %} - bgp cluster-id {{ parameters.cluster_id }} -{% endif %} -{% if parameters.confederation is defined and parameters.confederation is not none %} -{% if parameters.confederation.identifier is defined and parameters.confederation.identifier is not none %} - bgp confederation identifier {{ parameters.confederation.identifier }} -{% endif %} -{% if parameters.confederation.peers is defined and parameters.confederation.peers is not none %} - bgp confederation peers {{ parameters.confederation.peers }} -{% endif %} -{% endif %} -{% if parameters.dampening is defined and parameters.dampening is defined and parameters.dampening.half_life is defined and parameters.dampening.half_life is not none %} -{# Doesn't work in current FRR configuration; vtysh (bgp dampening 16 751 2001 61) #} - bgp dampening {{ parameters.dampening.half_life }} {{ parameters.dampening.re_use if parameters.dampening.re_use is defined }} {{ parameters.dampening.start_suppress_time if parameters.dampening.start_suppress_time is defined }} {{ parameters.dampening.max_suppress_time if parameters.dampening.max_suppress_time is defined }} -{% endif %} -{% if parameters.default is defined and parameters.default is not none %} -{% if parameters.default.local_pref is defined and parameters.default.local_pref is not none %} - bgp default local-preference {{ parameters.default.local_pref }} -{% endif %} -{% if parameters.default.no_ipv4_unicast is defined %} -{# We use this is parameter as default in template (5-th string) #} - no bgp default ipv4-unicast -{% endif %} -{% endif %} -{% if parameters.deterministic_med is defined %} - bgp deterministic-med -{% endif %} -{% if parameters.distance is defined and parameters.distance is not none %} - ! - address-family ipv4 unicast -{% if parameters.distance.global is defined and parameters.distance.global.external is defined and parameters.distance.global.internal is defined and parameters.distance.global.local is defined %} - distance bgp {{ parameters.distance.global.external }} {{ parameters.distance.global.internal }} {{ parameters.distance.global.local }} -{% endif %} -{% if parameters.distance.prefix is defined and parameters.distance.prefix is not none %} -{% for prefix in parameters.distance.prefix %} - distance {{ parameters.distance.prefix[prefix].distance }} {{ prefix }} -{% endfor %} -{% endif %} - exit-address-family - ! -{% endif %} -{% if parameters.graceful_restart is defined %} - bgp graceful-restart {{ 'stalepath-time ' + parameters.graceful_restart.stalepath_time if parameters.graceful_restart.stalepath_time is defined }} -{% endif %} -{% if parameters.log_neighbor_changes is defined %} - bgp log-neighbor-changes -{% endif %} -{% if parameters.network_import_check is defined %} - bgp network import-check -{% endif %} -{% if parameters.no_client_to_client_reflection is defined %} - no bgp client-to-client reflection -{% endif %} -{% if parameters.no_fast_external_failover is defined %} - no bgp fast-external-failover -{% endif %} -{% if parameters.router_id is defined and parameters.router_id is not none %} - bgp router-id {{ parameters.router_id }} -{% endif %} -{% endif %} -{% if timers is defined and timers.keepalive is defined and timers.holdtime is defined %} - timers bgp {{ timers.keepalive }} {{ timers.holdtime }} -{% endif %} - ! -{% if route_map is defined and route_map is not none %} - ip protocol bgp route-map {{ route_map }} -{% endif %} - ! diff --git a/interface-definitions/include/bgp-afi-aggregate-address.xml.i b/interface-definitions/include/bgp-afi-aggregate-address.xml.i deleted file mode 100644 index c731e970b..000000000 --- a/interface-definitions/include/bgp-afi-aggregate-address.xml.i +++ /dev/null @@ -1,14 +0,0 @@ - - - - Generate AS-set path information for this aggregate address - - - - - - Announce the aggregate summary network only - - - - diff --git a/interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i b/interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i deleted file mode 100644 index 29c2568c2..000000000 --- a/interface-definitions/include/bgp-afi-redistribute-metric-route-map.xml.i +++ /dev/null @@ -1,19 +0,0 @@ - - - - Metric for redistributed routes - - u32:1-4294967295 - Metric for redistributed routes - - - - - - Route map to filter redistributed routes - - policy route-map - - - - diff --git a/interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i b/interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i deleted file mode 100644 index a480e8dce..000000000 --- a/interface-definitions/include/bgp-neighbor-afi-ipv4-unicast.xml.i +++ /dev/null @@ -1,286 +0,0 @@ - - - - IPv4 BGP neighbor parameters - - - - - Accept a IPv4-route that contains the local-AS in the as-path - - - - - Number of occurrences of AS number - - u32:1-10 - Number of times AS is allowed in path - - - - - - - - - - - AS for routes sent to this neighbor to be the local AS - - - - - - BGP attributes are sent unchanged (IPv4) - - - - - Send AS path unchanged (IPv4) - - - - - - Send multi-exit discriminator unchanged (IPv4) - - - - - - Send nexthop unchanged (IPv4) - - - - - - - - Advertise capabilities to this neighbor (IPv4) - - - - - Advertise ORF capability to this neighbor - - - - - Advertise prefix-list ORF capability to this neighbor - - - - - Capability to receive the ORF - - - - - - Capability to send the ORF - - - - - - - - - - - - Send default IPv4-route to this neighbor - - - - - IPv4-Route-map to specify criteria of the default - - policy route-map - - - - - - - - Access-list to filter IPv4-route updates to/from this neighbor - - - - - Access-list to filter outgoing IPv4-route updates to this neighbor - - policy access-list - - - u32:1-65535 - Access-list to filter outgoing IPv4-route updates to this neighbor - - - - - - - - - Access-list to filter incoming IPv4-route updates from this neighbor - - policy access-list - - - u32:1-65535 - Access-list to filter incoming IPv4-route updates from this neighbor - - - - - - - - - - - As-path-list to filter IPv4-route updates to/from this neighbor - - - - - As-path-list to filter outgoing IPv4-route updates to this neighbor - - policy as-path-list - - - - - - As-path-list to filter incoming IPv4-route updates from this neighbor - - policy as-path-list - - - - - - - - Maximum number of IPv4-prefixes to accept from this neighbor - - u32:1-4294967295 - Prefix limit - - - - - - - - - Nexthop for IPv4-routes sent to this neighbor to be the local router - - - - - Set the next hop to self for reflected routes - - - - - - - - IPv4-Prefix-list to filter route updates to/from this neighbor - - - - - IPv4-Prefix-list to filter outgoing route updates to this neighbor - - policy prefix-list - - - - - - IPv4-Prefix-list to filter incoming route updates from this neighbor - - policy prefix-list - - - - - - - - Remove private AS numbers from AS path in outbound IPv4-route updates - - - - - - Route-map to filter IPv4-route updates to/from this neighbor - - - - - IPv4-Route-map to filter outgoing route updates to this neighbor - - policy route-map - - - - - - IPv4-Route-map to filter incoming route updates from this neighbor - - policy route-map - - - - - - - - Neighbor as a IPv4-route reflector client - - - - - - Neighbor is IPv4-route server client - - - - - - Soft reconfiguration for neighbor (IPv4) - - - - - Inbound soft reconfiguration for this neighbor [REQUIRED] - - - - - - - - Route-map to selectively unsuppress suppressed IPv4-routes - - - - - Default weight for routes from this neighbor - - u32:1-65535 - Weight for routes from this neighbor - - - - - - - - - diff --git a/interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i b/interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i deleted file mode 100644 index 6742bf08b..000000000 --- a/interface-definitions/include/bgp-neighbor-afi-ipv6-unicast.xml.i +++ /dev/null @@ -1,331 +0,0 @@ - - - - IPv6 BGP neighbor parameters - - - - - Accept a IPv6-route that contains the local-AS in the as-path - - - - - Number of occurrences of AS number - - u32:1-10 - Number of times AS is allowed in path - - - - - - - - - - - AS for routes sent to this neighbor to be the local AS - - - - - - BGP attributes are sent unchanged - - - - - Send AS path unchanged - - - - - - Send multi-exit discriminator unchanged - - - - - - Send nexthop unchanged - - - - - - - - Advertise capabilities to this neighbor (IPv6) - - - - - - Advertise dynamic capability to this neighbor - - - - - - Advertise ORF capability to this neighbor - - - - - Advertise prefix-list ORF capability to this neighbor - - - - - Capability to receive the ORF - - - - - - Capability to send the ORF - - - - - - - - - - - - Send default IPv6-route to this neighbor - - - - - Route-map to specify criteria of the default - - policy route-map - - - - - - - - Disable sending community attributes to this neighbor - - - - - Disable sending extended community attributes to this neighbor - - - - - - Disable sending standard community attributes to this neighbor - - - - - - - - Access-list to filter route updates to/from this neighbor - - - - - Access-list to filter outgoing route updates to this neighbor - - policy access-list6 - - - u32:1-65535 - Access-list to filter outgoing route updates to this neighbor - - - - - - - - - Access-list to filter incoming route updates from this neighbor - - policy access-list6 - - - u32:1-65535 - Access-list to filter incoming route updates from this neighbor - - - - - - - - - - - As-path-list to filter route updates to/from this neighbor - - - - - As-path-list to filter outgoing route updates to this neighbor - - policy as-path-list - - - - - - As-path-list to filter incoming route updates from this neighbor - - policy as-path-list - - - - - - - - Maximum number of prefixes to accept from this neighbor - - u32:1-4294967295 - Prefix limit - - - - - - - - - Nexthop attributes - - - - - Leave link-local nexthop unchanged for this peer - - - - - - - - Nexthop for IPv6-routes sent to this neighbor to be the local router - - - - - Set the next hop to self for reflected routes - - - - - - - - IPv6 peer group for this peer - - - - - Prefix-list to filter route updates to/from this neighbor - - - - - Prefix-list to filter outgoing route updates to this neighbor - - policy prefix-list6 - - - - - - Prefix-list to filter incoming route updates from this neighbor - - policy prefix-list6 - - - - - - - - Remove private AS numbers from AS path in outbound route updates - - - - - - Route-map to filter route updates to/from this neighbor - - - - - Route-map to filter outgoing route updates to this neighbor - - policy route-map - - - - - - Route-map to filter incoming route updates from this neighbor - - policy route-map - - - - - - - - Neighbor as a IPv6-route reflector client - - - - - - Neighbor is IPv6-route server client - - - - - - Soft reconfiguration for neighbor (IPv6) - - - - - Inbound soft reconfiguration for this neighbor [REQUIRED] - - - - - - - - Route-map to selectively unsuppress suppressed IPv6-routes - - - - - - Default weight for routes from this neighbor - - u32:1-65535 - Weight for routes from this neighbor - - - - - - - - - diff --git a/interface-definitions/include/bgp-peer-group-afi-ipv4-unicast.xml.i b/interface-definitions/include/bgp-peer-group-afi-ipv4-unicast.xml.i deleted file mode 100644 index d7d6e7c84..000000000 --- a/interface-definitions/include/bgp-peer-group-afi-ipv4-unicast.xml.i +++ /dev/null @@ -1,303 +0,0 @@ - - - - IPv4 BGP peer group parameters - - - - - Accept a route that contains the local-AS in the as-path - - - - - Number of occurrences of AS number - - u32:1-10 - Number of times AS is allowed in path - - - - - - - - - - - BGP attributes are sent unchanged - - - - - Send AS path unchanged - - - - - - Send multi-exit discriminator unchanged - - - - - - Send nexthop unchanged - - - - - - - - Advertise capabilities to this peer-group - - - - - Advertise dynamic capability to this peer-group - - - - - - Advertise ORF capability to this peer-group - - - - - Advertise prefix-list ORF capability to this peer-group - - - - - Capability to receive the ORF - - - - - - Capability to send the ORF - - - - - - - - - - - - Send default route to this peer-group - - - - - Route-map to specify criteria of the default - - - - - - - Disable sending community attributes to this peer-group - - - - - Disable sending extended community attributes to this peer-group - - - - - - Disable sending standard community attributes to this peer-group - - - - - - - - Access-list to filter route updates to/from this peer-group - - - - - Access-list to filter outgoing route updates to this peer-group - - policy access-list - - - u32:1-65535 - Access-list to filter outgoing route updates to this peer-group - - - - - - - - - Access-list to filter incoming route updates from this peer-group - - policy access-list - - - u32:1-65535 - Access-list to filter incoming route updates from this peer-group - - - - - - - - - - - As-path-list to filter route updates to/from this peer-group - - - - - As-path-list to filter outgoing route updates to this peer-group - - policy as-path-list - - - - - - As-path-list to filter incoming route updates from this peer-group - - policy as-path-list - - - - - - - - Maximum number of prefixes to accept from this peer-group - - u32:1-4294967295 - Prefix limit - - - - - - - - - Nexthop for routes sent to this peer-group to be the local router - - - - - Set the next hop to self for reflected routes - - - - - - - - Prefix-list to filter route updates to/from this peer-group - - - - - Prefix-list to filter outgoing route updates to this peer-group - - policy prefix-list - - - - - - Prefix-list to filter incoming route updates from this peer-group - - policy prefix-list - - - - - - - - Remove private AS numbers from AS path in outbound route updates - - - - - - Route-map to filter route updates to/from this peer-group - - - - - Route-map to filter outgoing route updates to this peer-group - - policy route-map - - - - - - Route-map to filter incoming route updates from this peer-group - - policy route-map - - - - - - - - Peer-group as a route reflector client - - - - - - Peer-group as route server client - - - - - - Soft reconfiguration for peer-group - - - - - Inbound soft reconfiguration for this peer-group [REQUIRED] - - - - - - - - Route-map to selectively unsuppress suppressed routes - - - - - - Default weight for routes from this peer-group - - u32:1-65535 - Weight for routes from this peer-group - - - - - - - - - diff --git a/interface-definitions/include/bgp-peer-group-afi-ipv6-unicast.xml.i b/interface-definitions/include/bgp-peer-group-afi-ipv6-unicast.xml.i deleted file mode 100644 index 56f73a627..000000000 --- a/interface-definitions/include/bgp-peer-group-afi-ipv6-unicast.xml.i +++ /dev/null @@ -1,319 +0,0 @@ - - - - IPv6 BGP neighbor parameters - - - - - Accept a IPv6-route that contains the local-AS in the as-path - - - - - Number of occurrences of AS number - - u32:1-10 - Number of times AS is allowed in path - - - - - - - - - - - BGP attributes are sent unchanged - - - - - Send AS path unchanged - - - - - - Send multi-exit discriminator unchanged - - - - - - Send nexthop unchanged - - - - - - - - Advertise capabilities to this peer-group - - - - - Advertise dynamic capability to this peer-group - - - - - - Advertise ORF capability to this peer-group - - - - - Advertise prefix-list ORF capability to this peer-group - - - - - Capability to receive the ORF - - - - - - Capability to send the ORF - - - - - - - - - - - - Send default route to this peer-group - - - - - Route-map to specify criteria of the default - - policy route-map - - - - - - - - Disable sending community attributes to this peer-group - - - - - Disable sending extended community attributes to this peer-group - - - - - - Disable sending standard community attributes to this peer-group - - - - - - - - Access-list to filter route updates to/from this peer-group - - - - - Access-list to filter outgoing route updates to this peer-group - - policy access-list6 - - - u32:1-65535 - Access-list to filter outgoing route updates to this peer-group - - - - - - - - - Access-list to filter incoming route updates from this peer-group - - policy access-list6 - - - u32:1-65535 - Access-list to filter incoming route updates from this peer-group - - - - - - - - - - - As-path-list to filter route updates to/from this peer-group - - - - - As-path-list to filter outgoing route updates to this peer-group - - policy as-path-list - - - - - - As-path-list to filter incoming route updates from this peer-group - - policy as-path-list - - - - - - - - Maximum number of prefixes to accept from this peer-group - - u32:1-4294967295 - Prefix limit - - - - - - - - - Nexthop attributes - - - - - Leave link-local nexthop unchanged for this peer - - - - - - - - Nexthop for routes sent to this peer-group to be the local router - - - - - Set the next hop to self for reflected routes - - - - - - - - Prefix-list to filter route updates to/from this peer-group - - - - - Prefix-list to filter outgoing route updates to this peer-group - - policy prefix-list6 - - - - - - Prefix-list to filter incoming route updates from this peer-group - - policy prefix-list6 - - - - - - - - Remove private AS numbers from AS path in outbound route updates - - - - - - Route-map to filter route updates to/from this peer-group - - - - - Route-map to filter outgoing route updates to this peer-group - - policy route-map - - - - - - Route-map to filter incoming route updates from this peer-group - - policy route-map - - - - - - - - Peer-group as a route reflector client - - - - - - Peer-group as route server client - - - - - - Soft reconfiguration for peer-group - - - - - Inbound soft reconfiguration for this peer-group [REQUIRED] - - - - - - - - Route-map to selectively unsuppress suppressed routes - - - - - - Default weight for routes from this peer-group - - u32:1-65535 - Weight for routes from this peer-group - - - - - - - - - diff --git a/interface-definitions/protocols-bgp.xml.in b/interface-definitions/protocols-bgp.xml.in deleted file mode 100644 index 27cbc919a..000000000 --- a/interface-definitions/protocols-bgp.xml.in +++ /dev/null @@ -1,1208 +0,0 @@ - - - - - - - - Border Gateway Protocol (BGP) parameters - - u32:1-4294967294 - AS number - - - - - 820 - - - - - BGP address-family parameters - - - - - IPv4 BGP settings - - - - - BGP aggregate network - - ipv4net - BGP aggregate network - - - - - - - #include - - - - - BGP network - - ipv4net - BGP network - - - - - - - - - Network as a backdoor route - - - - - - Route-map to modify route attributes - - policy route-map - - - - - - - - Redistribute routes from other protocols into BGP - - - - - Redistribute connected routes into BGP - - - #include - - - - - Redistribute kernel routes into BGP - - - #include - - - - - Redistribute OSPF routes into BGP - - - #include - - - - - Redistribute RIP routes into BGP - - - #include - - - - - Redistribute static routes into BGP - - - #include - - - - - Redistribute non-main Kernel Routing Table - - - - - - - - - IPv6 BGP settings - - - - - BGP aggregate network - - ipv6net - Aggregate network - - - - - - - #include - - - - - BGP network - - ipv6net - Aggregate network - - - - - - - - - AS-path hopcount limit - - u32:0-255 - AS path hop count limit - - - - - - - - - Route-map to modify route attributes - - policy route-map - - - - - - - - Redistribute routes from other protocols into BGP - - - - - Redistribute connected routes into BGP - - - #include - - - - - Redistribute kernel routes into BGP - - - #include - - - - - Redistribute OSPF routes into BGP - - - #include - - - - - Redistribute RIP routes into BGP - - - #include - - - - - Redistribute static routes into BGP - - - #include - - - - - Redistribute non-main Kernel Routing Table - - - - - - - - - - - BGP multipaths - - - - - Maximum ebgp multipaths - - u32:1-255 - EBGP multipaths - - - - - - - - - Maximum ibgp multipaths - - u32:1-255 - EBGP multipaths - - - - - - - - - - - BGP neighbor - - ipv4 - BGP neighbor IP address - - - ipv6 - BGP neighbor IPv6 address - - - txt - Interface name - - - - - (br|bond|dum|en|eth|gnv|lo|peth|tun|vti|vxlan|wg|wlan)[0-9]+ - - - - - - Parameters relating to IPv4 or IPv6 routes - - - #include - #include - - - - - Minimum interval for sending routing updates - - u32:0-600 - Advertisement interval in seconds - - - - - - - - - Enable Bidirectional Forwarding Detection (BFD) support - - - - - Allow to write CBIT independence in BFD outgoing packets and read both C-BIT value of BFD and lookup BGP peer status - - - - - - - - Advertise capabilities to this neighbor - - - - - Advertise dynamic capability to this neighbor - - - - - - Advertise extended-nexthop capability to this neighbor - - - - - - - - Description for this neighbor - - - - - Disable capability negotiation with this neighbor - - - - - - Disable check to see if eBGP peer address is a connected route - - - - - - Disable sending community attributes to this neighbor (IPv4) - - - - - Disable sending extended community attributes to this neighbor (IPv4) - - - - - - Disable sending standard community attributes to this neighbor (IPv4) - - - - - - - - Allow this EBGP neighbor to not be on a directly connected network - - u32:1-255 - Number of hops - - - - - - - - - Interface parameters - - - - - Peer group for this peer - - - - - Neighbor BGP AS number [REQUIRED] - - external internal - - - u32:1-4294967294 - Neighbor AS number - - - external - Any AS different from the local AS - - - internal - Neighbor AS number - - - - (external|internal) - - Invalid ASN value - - - - - Enable BGP with v6 link-local only - - - - - Peer group for this peer - - - - - Neighbor BGP AS number [REQUIRED] - - external internal - - - u32:1-4294967294 - Neighbor AS number - - - external - Any AS different from the local AS - - - internal - Neighbor AS number - - - - (external|internal) - - Invalid ASN value - - - - - - - - - Local AS number - - u32:1-4294967294 - Local AS number - - - - - - - - - Disable prepending local-as to updates from EBGP peers - - - - - - - - Ignore capability negotiation with specified neighbor - - - - - - Do not initiate a session with this neighbor - - - - - - BGP MD5 password - - - - - IPv4 peer group for this peer - - - - - Neighbor BGP port - - u32:1-65535 - Neighbor BGP port number - - - - - - - - - Neighbor BGP AS number [REQUIRED] - - external internal - - - u32:1-4294967294 - Neighbor AS number - - - external - Any AS different from the local AS - - - internal - Neighbor AS number - - - - (external|internal) - - Invalid ASN value - - - - - Administratively shut down neighbor - - - - - - Enable strict capability negotiation - - - - - - Neighbor timers - - - - - BGP connect timer for this neighbor - - u32:1-65535 - Connect timer in seconds - - - 0 - Disable connect timer - - - - - - - - - BGP hold timer for this neighbor - - u32:1-65535 - Hold timer in seconds - - - 0 - Hold timer disabled - - - - - - - - - BGP keepalive interval for this neighbor - - u32:1-65535 - Keepalive interval in seconds (default 60) - - - - - - - - - - - Ttl security mechanism for this BGP peer - - - - - Number of the maximum number of hops to the BGP peer - - u32:1-254 - Number of hops - - - - - - - - - - - - Source IP of routing updates - - ipv4 - IPv4 address of route source - - - ipv6 - IPv6 address of route source - - - txt - Interface as route source - - - - - (br|bond|dum|en|eth|gnv|lo|peth|tun|vti|vxlan|wg|wlan)[0-9]+ - - - - - - - - BGP parameters - - - - - Always compare MEDs from different neighbors - - - - - - Default bestpath selection mechanism - - - - - AS-path attribute comparison parameters - - - - - Compare AS-path lengths including confederation sets and sequences - - - - - - Ignore AS-path length in selecting a route - - - - - - Allow load sharing across routes that have different AS paths (but same length) - - - - - - - - Compare the router-id for identical EBGP paths - - - - - - MED attribute comparison parameters - - - - - Compare MEDs among confederation paths - - - - - - Treat missing route as a MED as the least preferred one - - - - - - - - - - Route-reflector cluster-id - - ipv4 - Route-reflector cluster-id - - - - - - - - - AS confederation parameters - - - - - Confederation AS identifier [REQUIRED] - - u32:1-4294967294 - Confederation AS id - - - - - - - - - Peer ASs in the BGP confederation - - u32:1-4294967294 - Peer AS number - - - - - - - - - - - Enable route-flap dampening - - - - - Half-life time for dampening [REQUIRED] - - u32:1-45 - Half-life penalty in seconds - - - - - - - - - Maximum duration to suppress a stable route [REQUIRED] - - u32:1-255 - Maximum suppress duration in seconds - - - - - - - - - Time to start reusing a route [REQUIRED] - - u32:1-20000 - Re-use time in seconds - - - - - - - - - When to start suppressing a route [REQUIRED] - - u32:1-20000 - Start-suppress-time - - - - - - - - - - - BGP defaults - - - - - Default local preference - - u32 - Local preference - - - - - - - - - Deactivate IPv4 unicast for a peer by default - - - - - - - - Compare MEDs between different peers in the same AS - - - - - - Administratives distances for BGP routes - - - - - Global administratives distances for BGP routes - - - - - Administrative distance for external BGP routes - - u32:1-255 - Administrative distance for external BGP routes - - - - - - - - - Administrative distance for internal BGP routes - - u32:1-255 - Administrative distance for internal BGP routes - - - - - - - - - Administrative distance for local BGP routes - - u32:1-255 - Administrative distance for internal BGP routes - - - - - - - - - - - Administrative distance for a specific BGP prefix - - ipv4net - Administrative distance for a specific BGP prefix - - - - - - - - - Administrative distance for prefix - - u32:1-255 - Administrative distance for external BGP routes - - - - - - - - - - - - - Graceful restart capability parameters - - - - - Maximum time to hold onto restarting neighbors stale paths - - u32:1-3600 - Hold time in seconds - - - - - - - - - - - Log neighbor up/down changes and reset reason - - - - - - Enable IGP route check for network statements - - - - - - Disable client to client route reflection - - - - - - Disable immediate session reset on peer link down event - - - - - - BGP router id - - ipv4 - BGP router id - - - - - - - - - - - BGP peer-group - - - - - BGP peer-group address-family parameters - - - #include - #include - - - - - Enable Bidirectional Forwarding Detection (BFD) support - - - - - - Advertise capabilities to this peer-group - - - - - Advertise dynamic capability to this peer-group - - - - - - Advertise extended-nexthop capability to this neighbor - - - - - - - - Description for this peer-group - - - - - - Disable capability negotiation with this peer-group - - - - - - Disable check to see if eBGP peer address is a connected route - - - - - - Allow this EBGP peer-group to not be on a directly connected network - - u32:1-255 - Number of hops - - - - - - - - - Local AS number [REQUIRED] - - u32:1-4294967294 - Local AS number - - - - - - - - - Disable prepending local-as to updates from EBGP peers - - - - - - - - Ignore capability negotiation with specified peer-group - - - - - - Do not intiate a session with this peer-group - - - - - - BGP MD5 password - - - - - Neighbor BGP AS number [REQUIRED] - - external internal - - - u32:1-4294967294 - Neighbor AS number - - - external - Any AS different from the local AS - - - internal - Neighbor AS number - - - - (external|internal) - - Invalid ASN value - - - - - Administratively shut down peer-group - - - - - - Ttl security mechanism - - - - - Number of the maximum number of hops to the BGP peer - - u32:1-254 - Number of hops - - - - - - - - - - - - Source IP of routing updates - - ipv4 - IPv4 address of route source - - - ipv6 - IPv6 address of route source - - - txt - Interface as route source - - - - - (br|bond|dum|en|eth|gnv|lo|peth|tun|vti|vxlan|wg|wlan)[0-9]+ - - - - - - - - Filter routes installed in local route map - - policy route-map - - - - - - BGP protocol timers - - - - - BGP holdtime interval - - u32:4-65535 - Hold-time in seconds (default 180) - - - 0 - Do not hold routes - - - - - - - - - Keepalive interval - - u32:1-65535 - Keep-alive time in seconds (default 60) - - - - - - - - - - - - - diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py deleted file mode 100755 index 678be5066..000000000 --- a/src/conf_mode/protocols_bgp.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2020 VyOS maintainers and contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 or later as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from sys import exit - -from vyos.config import Config -from vyos.configdict import dict_merge -from vyos.template import render -from vyos.template import render_to_string -from vyos.util import call -from vyos.util import dict_search -from vyos import ConfigError -from vyos import frr -from vyos import airbag -airbag.enable() - -config_file = r'/tmp/bgp.frr' - -def get_config(): - conf = Config() - base = ['protocols', 'nbgp'] - bgp = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True) - - # XXX: any reason we can not move this into the FRR template? - # we shall not call vtysh directly, especially not in get_config() - if not conf.exists(base): - bgp = {} - call('vtysh -c \"conf t\" -c \"no ip protocol bgp\" ') - - if not conf.exists(base + ['route-map']): - call('vtysh -c \"conf t\" -c \"no ip protocol bgp\" ') - - # We also need some additional information from the config, - # prefix-lists and route-maps for instance. - base = ['policy'] - tmp = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True) - # As we only support one ASN (later checked in begin of verify()) we add the - # new information only to the first AS number - asn = next(iter(bgp)) - # Merge policy dict into bgp dict - bgp[asn] = dict_merge(tmp, bgp[asn]) - - return bgp - -def verify(bgp): - if not bgp: - return None - - # Check if declared more than one ASN - if len(bgp) > 1: - raise ConfigError('Only one BGP AS number can be defined!') - - for asn, asn_config in bgp.items(): - import pprint - pprint.pprint(asn_config) - - # Common verification for both peer-group and neighbor statements - for neighbor in ['neighbor', 'peer_group']: - # bail out early if there is no neighbor or peer-group statement - # this also saves one indention level - if neighbor not in asn_config: - print(f'no {neighbor} found in config') - continue - - for peer, peer_config in asn_config[neighbor].items(): - # Only regular "neighbor" statement can have a peer-group set - # Check if the configure peer-group exists - if 'peer_group' in peer_config: - peer_group = peer_config['peer_group'] - if peer_group not in asn_config['peer_group']: - raise ConfigError(f'Specified peer-group "{peer_group}" for '\ - f'neighbor "{neighbor}" does not exist!') - - # Some checks can/must only be done on a neighbor and nor a peer-group - if neighbor == 'neighbor': - # remote-as must be either set explicitly for the neighbor - # or for the entire peer-group - if 'remote_as' not in peer_config: - if 'peer_group' not in peer_config or 'remote_as' not in asn_config['peer_group'][peer_config['peer_group']]: - raise ConfigError('Remote AS must be set for neighbor or peer-group!') - - for afi in ['ipv4_unicast', 'ipv6_unicast']: - # Bail out early if address family is not configured - if 'address_family' not in peer_config or afi not in peer_config['address_family']: - continue - - afi_config = peer_config['address_family'][afi] - # Validate if configured Prefix list exists - if 'prefix_list' in afi_config: - for tmp in ['import', 'export']: - if tmp in afi_config['prefix_list']: - if afi == 'ipv4_unicast': - prefix_list = afi_config['prefix_list'][tmp] - if 'prefix_list' not in asn_config or prefix_list not in asn_config['prefix_list']: - raise ConfigError(f'prefix-list "{prefix_list}" used for "{tmp}" does not exist!') - if afi == 'ipv6_unicast': - prefix_list = afi_config['prefix_list6'][tmp] - if 'prefix_list6' not in asn_config or prefix_list not in asn_config['prefix_list6']: - raise ConfigError(f'prefix-list "{prefix_list}" used for "{tmp}" does not exist!') - - - if 'route_map' in afi_config: - for tmp in ['import', 'export']: - if tmp in afi_config['route_map']: - route_map = afi_config['route_map'][tmp] - if 'route_map' not in asn_config or route_map not in asn_config['route_map']: - raise ConfigError(f'route-map "{route_map}" used for "{tmp}" does not exist!') - - - return None - -def generate(bgp): - if not bgp: - bgp['new_frr_config'] = '' - return None - - # only one BGP AS is supported, so we can directly send the first key - # of the config dict - asn = list(bgp.keys())[0] - bgp[asn]['asn'] = asn - - # render(config) not needed, its only for debug - render(config_file, 'frr/bgp.frr.tmpl', bgp[asn]) - bgp['new_frr_config'] = render_to_string('frr/bgp.frr.tmpl', bgp[asn]) - - return None - -def apply(bgp): - # Save original configuration prior to starting any commit actions - frr_cfg = frr.FRRConfig() - frr_cfg.load_configuration(daemon='bgpd') - frr_cfg.modify_section(f'router bgp \S+', '') - frr_cfg.add_before(r'(ip prefix-list .*|route-map .*|line vty)', bgp['new_frr_config']) - frr_cfg.commit_configuration(daemon='bgpd') - - # If FRR config is blank, rerun the blank commit x times due to frr-reload - # behavior/bug not properly clearing out on one commit. - if bgp['new_frr_config'] == '': - for a in range(5): - frr_cfg.commit_configuration(daemon='bgpd') - - # Debugging - ''' - print('') - print('--------- DEBUGGING ----------') - print(f'Existing config:\n{frr_cfg["original_config"]}\n\n') - print(f'Replacement config:\n{bgp["new_frr_config"]}\n\n') - print(f'Modified config:\n{frr_cfg["modified_config"]}\n\n') - ''' - - return None - -if __name__ == '__main__': - try: - c = get_config() - verify(c) - generate(c) - apply(c) - except ConfigError as e: - print(e) - exit(1) -- cgit v1.2.3