From bcb393fd01c00e6ebb7dff49ec60f87b162c3254 Mon Sep 17 00:00:00 2001 From: Dan Halperin Date: Tue, 21 Jul 2026 16:09:17 +0000 Subject: [PATCH] eos: add EVPN lab with multiple import/export route-targets per VRF Arista cEOS lab capturing how EOS handles a VRF that declares several `route-target import evpn` and `route-target export evpn` lines, for batfish/batfish#10113. Two directly-connected VTEPs run an eBGP IPv4 underlay plus an eBGP EVPN overlay over Loopback0, each with one tenant VRF and a symmetric-IRB L3VNI: - leaf1 AS 65101, vrf RED (L3VNI 15001), loopback 10.1.1.1/32, import evpn 65000:100 + 65000:199, export evpn 65000:200 + 65000:299 - leaf2 AS 65102, vrf BLUE (L3VNI 15002), loopback 10.2.2.2/32, import evpn 65000:200 + 65000:288, export evpn 65000:100 + 65000:177 The matching RT is listed before an unused decoy in each direction, so on the real device both tenant loopbacks cross into the peer VRF (leaf2 BLUE learns 10.1.1.1/32 via 65000:200, leaf1 RED learns 10.2.2.2/32 via 65000:100). All six checks.yaml preconditions pass on cEOS 4.36.0.1F. Batfish keeps only a single import and single export RT per VRF (the last line wins in AristaBgpVrf), so it retains only the decoys, matches nothing, and imports neither route. test_main_rib_routes, test_bgp_rib_routes, and test_evpn_rib_routes fail on both leaves; all three are sickbayed to xfail against batfish/batfish#10113. Remove the sickbay entries once Batfish models multiple import/export RTs. For batfish/batfish#10113. ---- Prompt: ``` Analyze https://github.com/batfish/batfish/issues/10113 I think we should start by making an Arista EVPN lab that exercises this type of configuration so that we can ensure we're doing the right thing in our modeling ``` --- .../batfish/layer1_topology.json | 14 + .../configs/leaf1/show_running-config.txt | 82 +++ .../configs/leaf2/show_running-config.txt | 82 +++ .../eos_evpn_multiple_rts/show/host_nos.txt | 1 + .../show/leaf1/show_bgp_evpn_|_json.txt | 80 +++ .../show/leaf1/show_interfaces_|_json.txt | 400 ++++++++++++++ .../show_ip_bgp_neighbors_vrf_all_|_json.txt | 489 ++++++++++++++++++ .../show/leaf1/show_ip_bgp_vrf_all_|_json.txt | 200 +++++++ .../leaf1/show_ip_ospf_neighbor_|_json.txt | 3 + .../leaf1/show_ip_route_vrf_all_|_json.txt | 107 ++++ .../show/leaf1/show_isis_neighbors_|_json.txt | 3 + .../show/leaf1/show_version_|_json.txt | 21 + .../show/leaf1/show_vrf_|_json.txt | 65 +++ .../show/leaf2/show_bgp_evpn_|_json.txt | 80 +++ .../show/leaf2/show_interfaces_|_json.txt | 400 ++++++++++++++ .../show_ip_bgp_neighbors_vrf_all_|_json.txt | 489 ++++++++++++++++++ .../show/leaf2/show_ip_bgp_vrf_all_|_json.txt | 200 +++++++ .../leaf2/show_ip_ospf_neighbor_|_json.txt | 3 + .../leaf2/show_ip_route_vrf_all_|_json.txt | 107 ++++ .../show/leaf2/show_isis_neighbors_|_json.txt | 3 + .../show/leaf2/show_version_|_json.txt | 21 + .../show/leaf2/show_vrf_|_json.txt | 65 +++ .../eos_evpn_multiple_rts/source/README.md | 68 +++ .../eos_evpn_multiple_rts/source/checks.yaml | 43 ++ .../source/configs/leaf1.cfg | 74 +++ .../source/configs/leaf2.cfg | 77 +++ .../source/topology.clab.yml | 37 ++ .../validation/sickbay.yaml | 22 + 28 files changed, 3236 insertions(+) create mode 100644 snapshots/eos_evpn_multiple_rts/batfish/layer1_topology.json create mode 100644 snapshots/eos_evpn_multiple_rts/configs/leaf1/show_running-config.txt create mode 100644 snapshots/eos_evpn_multiple_rts/configs/leaf2/show_running-config.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/host_nos.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_bgp_evpn_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_interfaces_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_neighbors_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_ospf_neighbor_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_route_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_isis_neighbors_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_version_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf1/show_vrf_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_bgp_evpn_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_interfaces_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_neighbors_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_ospf_neighbor_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_route_vrf_all_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_isis_neighbors_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_version_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/show/leaf2/show_vrf_|_json.txt create mode 100644 snapshots/eos_evpn_multiple_rts/source/README.md create mode 100644 snapshots/eos_evpn_multiple_rts/source/checks.yaml create mode 100644 snapshots/eos_evpn_multiple_rts/source/configs/leaf1.cfg create mode 100644 snapshots/eos_evpn_multiple_rts/source/configs/leaf2.cfg create mode 100644 snapshots/eos_evpn_multiple_rts/source/topology.clab.yml create mode 100644 snapshots/eos_evpn_multiple_rts/validation/sickbay.yaml diff --git a/snapshots/eos_evpn_multiple_rts/batfish/layer1_topology.json b/snapshots/eos_evpn_multiple_rts/batfish/layer1_topology.json new file mode 100644 index 00000000..bee13ae8 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/batfish/layer1_topology.json @@ -0,0 +1,14 @@ +{ + "edges": [ + { + "node1": { + "hostname": "leaf1", + "interfaceName": "Ethernet1" + }, + "node2": { + "hostname": "leaf2", + "interfaceName": "Ethernet1" + } + } + ] +} diff --git a/snapshots/eos_evpn_multiple_rts/configs/leaf1/show_running-config.txt b/snapshots/eos_evpn_multiple_rts/configs/leaf1/show_running-config.txt new file mode 100644 index 00000000..405b23da --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/configs/leaf1/show_running-config.txt @@ -0,0 +1,82 @@ +! Command: show running-config +! device: leaf1 (cEOSLab, EOS-4.36.0.1F-47401373.43601F (engineering build)) +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$6plnc3I/pFHEjYSf$X8iO21u1beGAXIdd7ePlaEaSVRa/grCovrX.igEFSQ8qamhYQm.0VKQn3.y25AP1olBb0Hf4cnGcDye/7ioU1. +! +no service interface inactive port-id allocation disabled +! +service routing protocols model multi-agent +! +hostname leaf1 +! +spanning-tree mode mstp +! +system l1 + unsupported speed action error + unsupported error-correction action error +! +vrf instance RED +! +aaa authorization exec default local +! +interface Ethernet1 + description P2P_UNDERLAY_TO_leaf2 + no switchport + ip address 172.31.255.0/31 +! +interface Loopback0 + description EVPN_Overlay_Peering_and_VTEP_source + ip address 192.168.255.1/32 +! +interface Loopback101 + description RED_tenant_prefix + vrf RED + ip address 10.1.1.1/32 +! +interface Management0 + ip address 172.20.20.2/24 + ipv6 address 3fff:172:20:20::2/64 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vrf RED vni 15001 +! +ip routing +ip routing vrf RED +! +ip prefix-list PL-LOOPBACKS + seq 10 permit 192.168.255.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS +! +router bgp 65101 + router-id 192.168.255.1 + no bgp default ipv4-unicast + maximum-paths 2 ecmp 2 + neighbor 172.31.255.1 remote-as 65102 + neighbor 192.168.255.2 remote-as 65102 + neighbor 192.168.255.2 update-source Loopback0 + neighbor 192.168.255.2 ebgp-multihop 3 + neighbor 192.168.255.2 send-community extended + redistribute connected route-map RM-CONN-2-BGP + ! + address-family evpn + neighbor 192.168.255.2 activate + ! + address-family ipv4 + neighbor 172.31.255.1 activate + network 192.168.255.1/32 + ! + vrf RED + rd 192.168.255.1:15001 + route-target import evpn 65000:100 + route-target import evpn 65000:199 + route-target export evpn 65000:200 + route-target export evpn 65000:299 + redistribute connected +! +end \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/configs/leaf2/show_running-config.txt b/snapshots/eos_evpn_multiple_rts/configs/leaf2/show_running-config.txt new file mode 100644 index 00000000..5c1bfd42 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/configs/leaf2/show_running-config.txt @@ -0,0 +1,82 @@ +! Command: show running-config +! device: leaf2 (cEOSLab, EOS-4.36.0.1F-47401373.43601F (engineering build)) +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$NWHqSg/mJCsus.G8$PHbiUsRgfZLbFAfNPekTXuoK2JqqR8r3HuStNe77ozwzOORMbJjLnQC.EXFZUIJeSgMn1laR9Md7bqRRgRiYw. +! +no service interface inactive port-id allocation disabled +! +service routing protocols model multi-agent +! +hostname leaf2 +! +spanning-tree mode mstp +! +system l1 + unsupported speed action error + unsupported error-correction action error +! +vrf instance BLUE +! +aaa authorization exec default local +! +interface Ethernet1 + description P2P_UNDERLAY_TO_leaf1 + no switchport + ip address 172.31.255.1/31 +! +interface Loopback0 + description EVPN_Overlay_Peering_and_VTEP_source + ip address 192.168.255.2/32 +! +interface Loopback101 + description BLUE_tenant_prefix + vrf BLUE + ip address 10.2.2.2/32 +! +interface Management0 + ip address 172.20.20.3/24 + ipv6 address 3fff:172:20:20::3/64 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vrf BLUE vni 15002 +! +ip routing +ip routing vrf BLUE +! +ip prefix-list PL-LOOPBACKS + seq 10 permit 192.168.255.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS +! +router bgp 65102 + router-id 192.168.255.2 + no bgp default ipv4-unicast + maximum-paths 2 ecmp 2 + neighbor 172.31.255.0 remote-as 65101 + neighbor 192.168.255.1 remote-as 65101 + neighbor 192.168.255.1 update-source Loopback0 + neighbor 192.168.255.1 ebgp-multihop 3 + neighbor 192.168.255.1 send-community extended + redistribute connected route-map RM-CONN-2-BGP + ! + address-family evpn + neighbor 192.168.255.1 activate + ! + address-family ipv4 + neighbor 172.31.255.0 activate + network 192.168.255.2/32 + ! + vrf BLUE + rd 192.168.255.2:15002 + route-target import evpn 65000:200 + route-target import evpn 65000:288 + route-target export evpn 65000:100 + route-target export evpn 65000:177 + redistribute connected +! +end \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/host_nos.txt b/snapshots/eos_evpn_multiple_rts/show/host_nos.txt new file mode 100644 index 00000000..fdb38a69 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/host_nos.txt @@ -0,0 +1 @@ +{"leaf1": "arista", "leaf2": "arista"} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_bgp_evpn_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_bgp_evpn_|_json.txt new file mode 100644 index 00000000..33c93083 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_bgp_evpn_|_json.txt @@ -0,0 +1,80 @@ +{ + "vrf": "default", + "routerId": "192.168.255.1", + "asn": 65101, + "evpnRoutes": { + "RD: 192.168.255.1:15001 ip-prefix 10.1.1.1/32": { + "totalPaths": 1, + "routeKeyDetail": { + "ipGenPrefix": "10.1.1.1/32", + "domain": "local", + "rd": "192.168.255.1:15001", + "nlriType": "ip-prefix" + }, + "evpnRoutePaths": [ + { + "nextHop": "", + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + }, + "reasonNotBestpath": "noReason", + "routeType": { + "active": true, + "atomicAggregator": false, + "backup": false, + "ecmp": false, + "ecmpContributor": false, + "ecmpHead": false, + "localAgg": false, + "origin": "Igp", + "queued": false, + "stale": false, + "suppressed": false, + "valid": true, + "waitForConvergence": false, + "unknownMetric": false + }, + "weight": 0 + } + ] + }, + "RD: 192.168.255.2:15002 ip-prefix 10.2.2.2/32": { + "totalPaths": 1, + "routeKeyDetail": { + "ipGenPrefix": "10.2.2.2/32", + "domain": "local", + "rd": "192.168.255.2:15002", + "nlriType": "ip-prefix" + }, + "evpnRoutePaths": [ + { + "nextHop": "192.168.255.2", + "asPathEntry": { + "asPathType": "External", + "asPath": "65102 i" + }, + "reasonNotBestpath": "noReason", + "routeType": { + "active": true, + "atomicAggregator": false, + "backup": false, + "ecmp": false, + "ecmpContributor": false, + "ecmpHead": false, + "localAgg": false, + "origin": "Igp", + "queued": false, + "stale": false, + "suppressed": false, + "valid": true, + "waitForConvergence": false, + "unknownMetric": false + }, + "localPreference": 100, + "weight": 0 + } + ] + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_interfaces_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_interfaces_|_json.txt new file mode 100644 index 00000000..a1068166 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_interfaces_|_json.txt @@ -0,0 +1,400 @@ +{ + "interfaces": { + "Ethernet1": { + "name": "Ethernet1", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "ethernet", + "interfaceAddress": [ + { + "primaryIp": { + "address": "172.31.255.0", + "maskLen": 31 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "physicalAddress": "aa:c1:ab:ed:be:db", + "burnedInAddress": "aa:c1:ab:ed:be:db", + "description": "P2P_UNDERLAY_TO_leaf2", + "bandwidth": 1000000000, + "mtu": 1500, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649397.6145098, + "interfaceStatistics": { + "updateInterval": 300.0, + "inBitsRate": 75.02153632552675, + "inPktsRate": 0.08478150018309502, + "outBitsRate": 0.0, + "outPktsRate": 0.0 + }, + "interfaceCounters": { + "inOctets": 3872, + "inUcastPkts": 26, + "inMulticastPkts": 5, + "inBroadcastPkts": 5, + "inDiscards": 0, + "inTotalPkts": 36, + "outOctets": 0, + "outUcastPkts": 0, + "outMulticastPkts": 0, + "outBroadcastPkts": 0, + "outDiscards": 0, + "outTotalPkts": 0, + "linkStatusChanges": 2, + "totalInErrors": 0, + "inputErrorsDetail": { + "runtFrames": 0, + "giantFrames": 0, + "fcsErrors": 0, + "alignmentErrors": 0, + "symbolErrors": 0, + "rxPause": 0 + }, + "totalOutErrors": 0, + "outputErrorsDetail": { + "collisions": 0, + "lateCollisions": 0, + "deferredTransmissions": 0, + "txPause": 0 + }, + "counterRefreshTime": 1784649535.3715358 + }, + "duplex": "duplexFull", + "autoNegotiate": "unknown", + "loopbackMode": "loopbackNone", + "lanes": 0 + }, + "Management0": { + "name": "Management0", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "ethernet", + "interfaceAddress": [ + { + "primaryIp": { + "address": "172.20.20.2", + "maskLen": 24 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::5c56:fbff:fe4c:b3f7", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [ + { + "address": "3fff:172:20:20::2", + "subnet": "3fff:172:20:20::/64", + "active": true, + "leastpref": false, + "dadfailed": false + } + ], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "5e:56:fb:4c:b3:f7", + "burnedInAddress": "5e:56:fb:4c:b3:f7", + "description": "", + "bandwidth": 1000000000, + "mtu": 1500, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.1573434, + "interfaceStatistics": { + "updateInterval": 300.0, + "inBitsRate": 1497.1819525151343, + "inPktsRate": 1.3842682482609492, + "outBitsRate": 2177.247058083302, + "outPktsRate": 1.5430533234643942 + }, + "interfaceCounters": { + "inOctets": 71879, + "inUcastPkts": 535, + "inMulticastPkts": 0, + "inBroadcastPkts": 0, + "inDiscards": 0, + "inTotalPkts": 535, + "outOctets": 102119, + "outUcastPkts": 586, + "outMulticastPkts": 0, + "outBroadcastPkts": 0, + "outDiscards": 0, + "outTotalPkts": 586, + "linkStatusChanges": 3, + "totalInErrors": 0, + "inputErrorsDetail": { + "runtFrames": 0, + "giantFrames": 0, + "fcsErrors": 0, + "alignmentErrors": 0, + "symbolErrors": 0, + "rxPause": 0 + }, + "totalOutErrors": 0, + "outputErrorsDetail": { + "collisions": 0, + "lateCollisions": 0, + "deferredTransmissions": 0, + "txPause": 0 + }, + "counterRefreshTime": 1784649535.4316995 + }, + "duplex": "duplexFull", + "autoNegotiate": "success", + "loopbackMode": "loopbackNone", + "lanes": 0 + }, + "Vlan4094": { + "name": "Vlan4094", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vlan", + "interfaceAddress": [ + { + "primaryIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::21c:73ff:fe6c:a72c", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "00:1c:73:6c:a7:2c", + "burnedInAddress": "00:1c:73:6c:a7:2c", + "description": "", + "bandwidth": 0, + "mtu": 9164, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649404.0156136 + }, + "Vlan4097": { + "name": "Vlan4097", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vlan", + "interfaceAddress": [ + { + "primaryIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::21c:73ff:fe6c:a72c", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "00:1c:73:6c:a7:2c", + "burnedInAddress": "00:1c:73:6c:a7:2c", + "description": "", + "bandwidth": 0, + "mtu": 9164, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649401.684774 + }, + "Loopback0": { + "name": "Loopback0", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "loopback", + "interfaceAddress": [ + { + "primaryIp": { + "address": "192.168.255.1", + "maskLen": 32 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "description": "EVPN_Overlay_Peering_and_VTEP_source", + "bandwidth": 0, + "mtu": 65535, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.3759904 + }, + "Loopback101": { + "name": "Loopback101", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "loopback", + "interfaceAddress": [ + { + "primaryIp": { + "address": "10.1.1.1", + "maskLen": 32 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "description": "RED_tenant_prefix", + "bandwidth": 0, + "mtu": 65535, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.3759537 + }, + "Vxlan1": { + "name": "Vxlan1", + "forwardingModel": "bridged", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vxlan", + "interfaceAddress": [], + "description": "", + "bandwidth": 0, + "mtu": 0, + "l3MtuConfigured": false, + "l2Mru": 0, + "vniInDottedNotation": false, + "srcIpIntf": "Loopback0", + "srcIpAddr": "192.168.255.1", + "udpPort": 4789, + "secUdpPort": 5500, + "mcastGrpDecap": "", + "vlanToVniMap": { + "4094": { + "vni": 15002, + "source": "evpn" + }, + "4097": { + "vni": 15001, + "source": "evpn" + } + }, + "vlanToVtepList": {}, + "staticFloodlists": false, + "replicationMode": "headendNonVcs", + "vlanToLearnRestrict": { + "4094": { + "learnFrom": "learnFromAny", + "prefixList": [] + } + }, + "vrfToVniMap": { + "RED": 15001 + }, + "decapVniToVrfMap": {}, + "dataPathLearningMode": false, + "controllerClientMode": false, + "controllerControlPlane": false, + "vccImportVlan": "", + "vccArpProxy": false, + "vccNdProxy": false, + "vxlanArpProxy": false, + "vxlanNdProxy": false, + "arpReplyRelayMode": false, + "arpLocalAddress": false, + "portDot1qVniMapping": false, + "mlagSharedRouterMacAddr": "00:00:00:00:00:00", + "vtepAddrMask": "255.255.255.255", + "use32BitVni": false, + "vtepToVtepBridging": false, + "vtepSetForSourcePruning": [], + "vtepSourcePruningAll": false, + "decapFilterMode": "filterEnabled", + "decapFilterIntf": [], + "decapRouteAll": false, + "mcastRouting": false, + "vxlanEncapsulation": "ipv4", + "vArpVtepSrcIpIntf": "", + "floodLearnedAll": false, + "vtepToSecProfileTotal": 0, + "bfdPrefixList": "", + "remoteVxlanDomain": false, + "tcpMssV4": 0, + "tcpMssV6": 0, + "vxlanMacDrop": false + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_neighbors_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_neighbors_vrf_all_|_json.txt new file mode 100644 index 00000000..8c3b5ffa --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_neighbors_vrf_all_|_json.txt @@ -0,0 +1,489 @@ +{ + "vrfs": { + "default": { + "peerList": [ + { + "peerAddress": "172.31.255.1", + "asn": "65102", + "linkType": "external", + "routerId": "192.168.255.2", + "vrf": "default", + "version": 4, + "negotiatedVersion": 4, + "updateGroupIndex": -1, + "lastRcvd": 40, + "lastSent": 38, + "holdTime": 180, + "keepaliveTime": 60, + "configHoldTime": 180, + "configKeepaliveTime": 60, + "minHoldTime": 3, + "configMinHoldTime": 3, + "sendFailureHoldTime": 0, + "holdTimeLeft": 140, + "keepaliveTimeLeft": 8, + "state": "Established", + "establishedTime": 137, + "establishedTransitions": 1, + "lastState": "OpenConfirm", + "lastEvent": "Established", + "enRRefreshstalePathRemoval": false, + "outboundEnRRefreshEnabled": true, + "neighborCapabilities": { + "negotiationDisabled": false, + "unsupportedCapReceived": false, + "multiprotocolCaps": { + "ipv4Unicast": { + "advertised": true, + "received": true, + "enabled": true + } + }, + "fourOctetAsnCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "routeRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "enhancedRouteRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "sendEorMessages": { + "advertised": true, + "received": true, + "enabled": true + }, + "addPathsCaps": { + "ipv4Unicast": { + "receivingAddPaths": { + "receiveCapabilityAdvertised": true, + "sendCapabilityReceived": false, + "enabled": false + }, + "sendingAddPaths": { + "sendCapabilityAdvertised": false, + "receiveCapabilityReceived": true, + "enabled": false + } + } + }, + "grCaps": { + "advertised": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + }, + "received": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + } + } + }, + "endOfRibs": { + "incoming": { + "ipv4Unicast": { + "status": "received", + "eorReceivedTime": 1784649404.000628, + "stalePathsDeleted": 0, + "pathsReceivedBeforeEor": 1 + } + } + }, + "nexthopLuOriginateIpv4Uni": false, + "thirdPartyNexthopLuOriginateIpv4Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv4Uni": false, + "nexthopLuOriginateIpv6Uni": false, + "thirdPartyNexthopLuOriginateIpv6Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv6Uni": false, + "rejectAsSetConfedSetV4Uni": false, + "rejectAsSetConfedSetV6Uni": false, + "aigpSessionIpv4Uni": false, + "aigpSessionIpv4LabeledUni": false, + "aigpSessionIpv6Uni": false, + "aigpSessionIpv6LabeledUni": false, + "fwdFailoverTriggerSessionIpv4Uni": false, + "fwdFailoverTriggerSessionIpv6Uni": false, + "outMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 4, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "inMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 4, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "sentMessages": 7, + "receivedMessages": 7, + "prefixesSent": 1, + "prefixesReceived": 1, + "v4BestPaths": 1, + "v4BestEcmpPaths": 0, + "v6PrefixesSent": 0, + "v6PrefixesReceived": 0, + "v6BestPaths": 0, + "v6BestEcmpPaths": 0, + "totalRoutesWarnLimit": 204800, + "maxTotalRoutes": 256000, + "dropStats": { + "inDropAsloop": 0, + "inDropClusterIdLoop": 0, + "inDropMalformedMpbgp": 0, + "inDropOrigId": 0, + "inDropNhLocal": 0, + "inDropNhAfV6": 0, + "prefixDroppedMartianV4": 0, + "prefixDroppedMaxRouteLimitViolatedV4": 0, + "prefixDroppedMartianV6": 0, + "prefixDroppedMaxRouteLimitViolatedV6": 0, + "prefixLuDroppedV4": 0, + "prefixLuDroppedMartianV4": 0, + "prefixLuDroppedMaxRouteLimitViolatedV4": 0, + "prefixLuDroppedV6": 0, + "prefixLuDroppedMartianV6": 0, + "prefixLuDroppedMaxRouteLimitViolatedV6": 0, + "prefixEvpnDroppedUnsupportedRouteType": 0, + "prefixBgpLsDroppedReceptionUnsupported": 0, + "outDropV4LocalAddr": 0, + "outDropV6LocalAddr": 0, + "prefixVpnIpv4DroppedImportMatchFailure": 0, + "prefixVpnIpv4DroppedMaxRouteLimitViolated": 0, + "prefixVpnIpv6DroppedImportMatchFailure": 0, + "prefixVpnIpv6DroppedMaxRouteLimitViolated": 0, + "prefixEvpnDroppedImportMatchFailure": 0, + "prefixEvpnDroppedMaxRouteLimitViolated": 0, + "prefixRtMembershipDroppedLocalAsReject": 0, + "prefixRtMembershipDroppedMaxRouteLimitViolated": 0, + "inDropAsSetConfedSetV4Uni": 0, + "inDropAsSetConfedSetV6Uni": 0 + }, + "peerInUpdateErrors": { + "inUpdErrWithdraw": 0, + "inUpdErrIgnore": 0, + "inUpdErrDisableAfiSafi": 0, + "disabledAfiSafi": "None", + "lastUpdErrTime": 0 + }, + "bgpSoftReconfigInbound": "Default", + "rpkiOriginValidationMethod": "disabled", + "rpkiOriginValidationSendExtComm": false, + "rpkiOriginValidationRouteMap": "", + "rpkiOriginValidationWaitForRoaSync": false, + "rpkiIpv4OvValidPaths": 0, + "rpkiIpv4OvInvalidPaths": 0, + "rpkiIpv4OvUnknownPaths": 0, + "rpkiIpv6OvValidPaths": 0, + "rpkiIpv6OvInvalidPaths": 0, + "rpkiIpv6OvUnknownPaths": 0, + "orrPosition": {}, + "inboundUpdateProcessingDelay": 0, + "inboundUpdateProcessingDelayState": "inactive", + "inboundUpdateProcessingDelayStateDetail": "", + "inboundUpdateProcessingDelayLeft": 0, + "localAsn": "65101", + "localRouterId": "192.168.255.1", + "ttl": 1, + "maxTtlHops": 255, + "updateSource": "172.31.255.0", + "localPort": 179, + "remotePort": 36915, + "prependOwnDisabled": false, + "peerTcpInfo": { + "state": "ESTABLISHED", + "options": 7, + "sendWindowScale": 0, + "rcvWindowScale": 0, + "retransTimeout": 205000, + "delayedAckTimeout": 40000, + "maxSegmentSize": 1448, + "sndRtt": 4548, + "sndRttVariance": 8964, + "slowStartThreshold": 2147483647, + "congestionWindow": 10, + "rcvRtt": 0, + "rcvWindow": 14480, + "totalRetrans": 0, + "outputQueueLength": 0, + "outputMaxQueueLength": 87040, + "inputQueueLength": 0, + "inputMaxQueueLength": 32768, + "connectionOptions": { + "timestampsEnabled": true, + "selectiveAcknowledgementsEnabled": true, + "windowScaleEnabled": true, + "ecnEnabled": false + } + }, + "ifName": "Ethernet1", + "afiSafiInfo": { + "ipv4Unicast": { + "localNexthop": "172.31.255.0" + } + } + }, + { + "peerAddress": "192.168.255.2", + "asn": "65102", + "linkType": "external", + "routerId": "192.168.255.2", + "vrf": "default", + "version": 4, + "negotiatedVersion": 4, + "updateGroupIndex": -1, + "lastRcvd": 38, + "lastSent": 40, + "holdTime": 180, + "keepaliveTime": 60, + "configHoldTime": 180, + "configKeepaliveTime": 60, + "minHoldTime": 3, + "configMinHoldTime": 3, + "sendFailureHoldTime": 0, + "holdTimeLeft": 142, + "keepaliveTimeLeft": 14, + "state": "Established", + "establishedTime": 137, + "establishedTransitions": 1, + "lastState": "OpenConfirm", + "lastEvent": "Established", + "advertisedCommunities": { + "standard": false, + "extended": true, + "large": false + }, + "enRRefreshstalePathRemoval": false, + "outboundEnRRefreshEnabled": true, + "neighborCapabilities": { + "negotiationDisabled": false, + "unsupportedCapReceived": false, + "multiprotocolCaps": { + "l2VpnEvpn": { + "advertised": true, + "received": true, + "enabled": true + } + }, + "fourOctetAsnCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "routeRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "enhancedRouteRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "sendEorMessages": { + "advertised": true, + "received": true, + "enabled": true + }, + "addPathsCaps": { + "l2VpnEvpn": { + "receivingAddPaths": { + "receiveCapabilityAdvertised": true, + "sendCapabilityReceived": false, + "enabled": false + }, + "sendingAddPaths": { + "sendCapabilityAdvertised": false, + "receiveCapabilityReceived": true, + "enabled": false + } + } + }, + "grCaps": { + "advertised": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + }, + "received": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + } + } + }, + "endOfRibs": { + "incoming": { + "l2VpnEvpn": { + "status": "received", + "eorReceivedTime": 1784649404.000557, + "stalePathsDeleted": 0, + "pathsReceivedBeforeEor": 1 + } + } + }, + "nexthopLuOriginateIpv4Uni": false, + "thirdPartyNexthopLuOriginateIpv4Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv4Uni": false, + "nexthopLuOriginateIpv6Uni": false, + "thirdPartyNexthopLuOriginateIpv6Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv6Uni": false, + "rejectAsSetConfedSetV4Uni": false, + "rejectAsSetConfedSetV6Uni": false, + "aigpSessionIpv4Uni": false, + "aigpSessionIpv4LabeledUni": false, + "aigpSessionIpv6Uni": false, + "aigpSessionIpv6LabeledUni": false, + "fwdFailoverTriggerSessionIpv4Uni": false, + "fwdFailoverTriggerSessionIpv6Uni": false, + "outMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 4, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "inMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 4, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "sentMessages": 7, + "receivedMessages": 7, + "prefixesSent": 0, + "prefixesReceived": 0, + "v4BestPaths": 0, + "v4BestEcmpPaths": 0, + "v6PrefixesSent": 0, + "v6PrefixesReceived": 0, + "v6BestPaths": 0, + "v6BestEcmpPaths": 0, + "evpnSent": 1, + "evpnReceived": 1, + "evpnBestPaths": 1, + "evpnBestEcmpPaths": 0, + "totalRoutesWarnLimit": 204800, + "maxTotalRoutes": 256000, + "dropStats": { + "inDropAsloop": 0, + "inDropClusterIdLoop": 0, + "inDropMalformedMpbgp": 0, + "inDropOrigId": 0, + "inDropNhLocal": 0, + "inDropNhAfV6": 0, + "prefixDroppedMartianV4": 0, + "prefixDroppedMaxRouteLimitViolatedV4": 0, + "prefixDroppedMartianV6": 0, + "prefixDroppedMaxRouteLimitViolatedV6": 0, + "prefixLuDroppedV4": 0, + "prefixLuDroppedMartianV4": 0, + "prefixLuDroppedMaxRouteLimitViolatedV4": 0, + "prefixLuDroppedV6": 0, + "prefixLuDroppedMartianV6": 0, + "prefixLuDroppedMaxRouteLimitViolatedV6": 0, + "prefixEvpnDroppedUnsupportedRouteType": 0, + "prefixBgpLsDroppedReceptionUnsupported": 0, + "outDropV4LocalAddr": 0, + "outDropV6LocalAddr": 0, + "prefixVpnIpv4DroppedImportMatchFailure": 0, + "prefixVpnIpv4DroppedMaxRouteLimitViolated": 0, + "prefixVpnIpv6DroppedImportMatchFailure": 0, + "prefixVpnIpv6DroppedMaxRouteLimitViolated": 0, + "prefixEvpnDroppedImportMatchFailure": 0, + "prefixEvpnDroppedMaxRouteLimitViolated": 0, + "prefixRtMembershipDroppedLocalAsReject": 0, + "prefixRtMembershipDroppedMaxRouteLimitViolated": 0, + "inDropAsSetConfedSetV4Uni": 0, + "inDropAsSetConfedSetV6Uni": 0 + }, + "peerInUpdateErrors": { + "inUpdErrWithdraw": 0, + "inUpdErrIgnore": 0, + "inUpdErrDisableAfiSafi": 0, + "disabledAfiSafi": "None", + "lastUpdErrTime": 0 + }, + "bgpSoftReconfigInbound": "Default", + "rpkiOriginValidationMethod": "disabled", + "rpkiOriginValidationSendExtComm": false, + "rpkiOriginValidationRouteMap": "", + "rpkiOriginValidationWaitForRoaSync": false, + "rpkiIpv4OvValidPaths": 0, + "rpkiIpv4OvInvalidPaths": 0, + "rpkiIpv4OvUnknownPaths": 0, + "rpkiIpv6OvValidPaths": 0, + "rpkiIpv6OvInvalidPaths": 0, + "rpkiIpv6OvUnknownPaths": 0, + "orrPosition": {}, + "inboundUpdateProcessingDelay": 0, + "inboundUpdateProcessingDelayState": "inactive", + "inboundUpdateProcessingDelayStateDetail": "", + "inboundUpdateProcessingDelayLeft": 0, + "localAsn": "65101", + "localRouterId": "192.168.255.1", + "ttlConfig": "ebgpMultiHop", + "ttl": 3, + "maxTtlHops": 3, + "updateSource": "192.168.255.1", + "localPort": 179, + "remotePort": 34397, + "prependOwnDisabled": false, + "peerTcpInfo": { + "state": "ESTABLISHED", + "options": 7, + "sendWindowScale": 0, + "rcvWindowScale": 0, + "retransTimeout": 205000, + "delayedAckTimeout": 40000, + "maxSegmentSize": 1448, + "sndRtt": 4487, + "sndRttVariance": 8915, + "slowStartThreshold": 2147483647, + "congestionWindow": 10, + "rcvRtt": 0, + "rcvWindow": 14480, + "totalRetrans": 0, + "outputQueueLength": 0, + "outputMaxQueueLength": 87040, + "inputQueueLength": 0, + "inputMaxQueueLength": 32768, + "connectionOptions": { + "timestampsEnabled": true, + "selectiveAcknowledgementsEnabled": true, + "windowScaleEnabled": true, + "ecnEnabled": false + } + }, + "ifName": "Loopback0", + "afiSafiInfo": { + "l2VpnEvpn": { + "localNexthop": "192.168.255.1" + } + } + } + ] + }, + "RED": { + "peerList": [] + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_vrf_all_|_json.txt new file mode 100644 index 00000000..c706c1d1 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_bgp_vrf_all_|_json.txt @@ -0,0 +1,200 @@ +{ + "vrfs": { + "default": { + "vrf": "default", + "routerId": "192.168.255.1", + "asn": "65101", + "bgpRouteEntries": { + "192.168.255.1/32": { + "address": "192.168.255.1", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": true, + "ecmp": true, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "192.168.255.1" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + }, + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": false, + "backup": false, + "ecmpHead": false, + "ecmp": true, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "192.168.255.1" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + } + ], + "totalPaths": 2 + }, + "192.168.255.2/32": { + "address": "192.168.255.2", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "172.31.255.1", + "reasonNotBestpath": "noReason", + "localPreference": 100, + "weight": 0, + "tag": 0, + "med": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "172.31.255.1", + "peerRouterId": "192.168.255.2" + }, + "asPathEntry": { + "asPathType": "External", + "asPath": "65102 i" + } + } + ], + "totalPaths": 1 + } + } + }, + "RED": { + "vrf": "RED", + "routerId": "10.1.1.1", + "asn": "65101", + "bgpRouteEntries": { + "10.1.1.1/32": { + "address": "10.1.1.1", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "10.1.1.1" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + } + ], + "totalPaths": 1 + }, + "10.2.2.2/32": { + "address": "10.2.2.2", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "192.168.255.2", + "reasonNotBestpath": "noReason", + "localPreference": 100, + "weight": 0, + "tag": 0, + "med": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "192.168.255.2", + "peerRouterId": "192.168.255.2" + }, + "asPathEntry": { + "asPathType": "External", + "asPath": "65102 i" + } + } + ], + "totalPaths": 1 + } + } + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_ospf_neighbor_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_ospf_neighbor_|_json.txt new file mode 100644 index 00000000..940ab170 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_ospf_neighbor_|_json.txt @@ -0,0 +1,3 @@ +{ + "vrfs": {} +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_route_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_route_vrf_all_|_json.txt new file mode 100644 index 00000000..64b11271 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_ip_route_vrf_all_|_json.txt @@ -0,0 +1,107 @@ +{ + "vrfs": { + "default": { + "routingDisabled": false, + "allRoutesProgrammedHardware": true, + "allRoutesProgrammedKernel": true, + "defaultRouteState": "notSet", + "routes": { + "172.20.20.0/24": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Management0" + } + ], + "directlyConnected": true + }, + "172.31.255.0/31": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Ethernet1" + } + ], + "directlyConnected": true + }, + "192.168.255.1/32": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Loopback0" + } + ], + "directlyConnected": true + }, + "192.168.255.2/32": { + "hardwareProgrammed": true, + "routeType": "eBGP", + "routeLeaked": false, + "kernelProgrammed": true, + "preference": 200, + "metric": 0, + "routeAction": "forward", + "directlyConnected": false, + "vias": [ + { + "nexthopAddr": "172.31.255.1", + "interface": "Ethernet1" + } + ] + } + } + }, + "RED": { + "routingDisabled": false, + "allRoutesProgrammedHardware": true, + "allRoutesProgrammedKernel": true, + "defaultRouteState": "notSet", + "routes": { + "10.1.1.1/32": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Loopback101" + } + ], + "directlyConnected": true + }, + "10.2.2.2/32": { + "hardwareProgrammed": true, + "routeType": "eBGP", + "routeLeaked": false, + "kernelProgrammed": true, + "preference": 200, + "metric": 0, + "routeAction": "forward", + "directlyConnected": false, + "vias": [ + { + "nexthopAddr": "", + "vtepAddr": "192.168.255.2", + "vni": 15002, + "routerMac": "00:1c:73:48:71:f2", + "localInterface": "Vxlan1" + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_isis_neighbors_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_isis_neighbors_|_json.txt new file mode 100644 index 00000000..940ab170 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_isis_neighbors_|_json.txt @@ -0,0 +1,3 @@ +{ + "vrfs": {} +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_version_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_version_|_json.txt new file mode 100644 index 00000000..8f533a6d --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_version_|_json.txt @@ -0,0 +1,21 @@ +{ + "mfgName": "Arista", + "modelName": "cEOSLab", + "hardwareRevision": "", + "serialNumber": "CA904E8171F13395A4E6C90D4486A44A", + "systemMacAddress": "00:1c:73:6c:a7:2c", + "hwMacAddress": "00:00:00:00:00:00", + "configMacAddress": "00:00:00:00:00:00", + "version": "4.36.0.1F-47401373.43601F (engineering build)", + "architecture": "x86_64", + "internalVersion": "4.36.0.1F-47401373.43601F", + "internalBuildId": "15b3cfe5-2f32-4176-b3d1-a80bba22ed14", + "imageFormatVersion": "1.0", + "imageOptimization": "None", + "kernelVersion": "6.17.0-1019-aws", + "bootupTimestamp": 1784649378.9318533, + "uptime": 165.85503435134888, + "memTotal": 32311292, + "memFree": 28022368, + "isIntlVersion": false +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf1/show_vrf_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_vrf_|_json.txt new file mode 100644 index 00000000..378d4a58 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf1/show_vrf_|_json.txt @@ -0,0 +1,65 @@ +{ + "vrfs": { + "default": { + "routeDistinguisher": "", + "protocols": { + "ipv4": { + "supported": true, + "protocolState": "up", + "routingState": "up" + }, + "ipv6": { + "supported": true, + "protocolState": "up", + "routingState": "down" + } + }, + "vrfState": "up", + "interfacesV4": [ + "Vlan4094", + "Loopback0", + "Ethernet1", + "Management0" + ], + "interfacesV6": [ + "Vlan4094", + "Management0" + ], + "interfaces": [ + "Vlan4094", + "Loopback0", + "Ethernet1", + "Management0" + ], + "vrfId": 0 + }, + "RED": { + "routeDistinguisher": "192.168.255.1:15001", + "protocols": { + "ipv4": { + "supported": true, + "protocolState": "up", + "routingState": "up" + }, + "ipv6": { + "supported": true, + "protocolState": "up", + "routingState": "down" + } + }, + "vrfState": "up", + "interfacesV4": [ + "Vlan4097", + "Loopback101" + ], + "interfacesV6": [ + "Vlan4097" + ], + "interfaces": [ + "Vlan4097", + "Loopback101" + ], + "vrfId": 1 + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_bgp_evpn_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_bgp_evpn_|_json.txt new file mode 100644 index 00000000..29bccc47 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_bgp_evpn_|_json.txt @@ -0,0 +1,80 @@ +{ + "vrf": "default", + "routerId": "192.168.255.2", + "asn": 65102, + "evpnRoutes": { + "RD: 192.168.255.1:15001 ip-prefix 10.1.1.1/32": { + "totalPaths": 1, + "routeKeyDetail": { + "ipGenPrefix": "10.1.1.1/32", + "domain": "local", + "rd": "192.168.255.1:15001", + "nlriType": "ip-prefix" + }, + "evpnRoutePaths": [ + { + "nextHop": "192.168.255.1", + "asPathEntry": { + "asPathType": "External", + "asPath": "65101 i" + }, + "reasonNotBestpath": "noReason", + "routeType": { + "active": true, + "atomicAggregator": false, + "backup": false, + "ecmp": false, + "ecmpContributor": false, + "ecmpHead": false, + "localAgg": false, + "origin": "Igp", + "queued": false, + "stale": false, + "suppressed": false, + "valid": true, + "waitForConvergence": false, + "unknownMetric": false + }, + "localPreference": 100, + "weight": 0 + } + ] + }, + "RD: 192.168.255.2:15002 ip-prefix 10.2.2.2/32": { + "totalPaths": 1, + "routeKeyDetail": { + "ipGenPrefix": "10.2.2.2/32", + "domain": "local", + "rd": "192.168.255.2:15002", + "nlriType": "ip-prefix" + }, + "evpnRoutePaths": [ + { + "nextHop": "", + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + }, + "reasonNotBestpath": "noReason", + "routeType": { + "active": true, + "atomicAggregator": false, + "backup": false, + "ecmp": false, + "ecmpContributor": false, + "ecmpHead": false, + "localAgg": false, + "origin": "Igp", + "queued": false, + "stale": false, + "suppressed": false, + "valid": true, + "waitForConvergence": false, + "unknownMetric": false + }, + "weight": 0 + } + ] + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_interfaces_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_interfaces_|_json.txt new file mode 100644 index 00000000..0ef26ee7 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_interfaces_|_json.txt @@ -0,0 +1,400 @@ +{ + "interfaces": { + "Ethernet1": { + "name": "Ethernet1", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "ethernet", + "interfaceAddress": [ + { + "primaryIp": { + "address": "172.31.255.1", + "maskLen": 31 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "physicalAddress": "aa:c1:ab:ff:51:a2", + "burnedInAddress": "aa:c1:ab:ff:51:a2", + "description": "P2P_UNDERLAY_TO_leaf1", + "bandwidth": 1000000000, + "mtu": 1500, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649397.5544806, + "interfaceStatistics": { + "updateInterval": 300.0, + "inBitsRate": 77.93782978182607, + "inPktsRate": 0.08628593457312268, + "outBitsRate": 0.0, + "outPktsRate": 0.0 + }, + "interfaceCounters": { + "inOctets": 4225, + "inUcastPkts": 28, + "inMulticastPkts": 6, + "inBroadcastPkts": 4, + "inDiscards": 0, + "inTotalPkts": 38, + "outOctets": 0, + "outUcastPkts": 0, + "outMulticastPkts": 0, + "outBroadcastPkts": 0, + "outDiscards": 0, + "outTotalPkts": 0, + "linkStatusChanges": 2, + "totalInErrors": 0, + "inputErrorsDetail": { + "runtFrames": 0, + "giantFrames": 0, + "fcsErrors": 0, + "alignmentErrors": 0, + "symbolErrors": 0, + "rxPause": 0 + }, + "totalOutErrors": 0, + "outputErrorsDetail": { + "collisions": 0, + "lateCollisions": 0, + "deferredTransmissions": 0, + "txPause": 0 + }, + "counterRefreshTime": 1784649554.3014965 + }, + "duplex": "duplexFull", + "autoNegotiate": "unknown", + "loopbackMode": "loopbackNone", + "lanes": 0 + }, + "Management0": { + "name": "Management0", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "ethernet", + "interfaceAddress": [ + { + "primaryIp": { + "address": "172.20.20.3", + "maskLen": 24 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::24bb:70ff:fee0:a7af", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [ + { + "address": "3fff:172:20:20::3", + "subnet": "3fff:172:20:20::/64", + "active": true, + "leastpref": false, + "dadfailed": false + } + ], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "26:bb:70:e0:a7:af", + "burnedInAddress": "26:bb:70:e0:a7:af", + "description": "", + "bandwidth": 1000000000, + "mtu": 1500, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.024111, + "interfaceStatistics": { + "updateInterval": 300.0, + "inBitsRate": 1385.1121056147833, + "inPktsRate": 1.268510038657339, + "outBitsRate": 2032.2403010046085, + "outPktsRate": 1.4436167066402832 + }, + "interfaceCounters": { + "inOctets": 69760, + "inUcastPkts": 515, + "inMulticastPkts": 0, + "inBroadcastPkts": 0, + "inDiscards": 0, + "inTotalPkts": 515, + "outOctets": 100502, + "outUcastPkts": 580, + "outMulticastPkts": 0, + "outBroadcastPkts": 0, + "outDiscards": 0, + "outTotalPkts": 580, + "linkStatusChanges": 3, + "totalInErrors": 0, + "inputErrorsDetail": { + "runtFrames": 0, + "giantFrames": 0, + "fcsErrors": 0, + "alignmentErrors": 0, + "symbolErrors": 0, + "rxPause": 0 + }, + "totalOutErrors": 0, + "outputErrorsDetail": { + "collisions": 0, + "lateCollisions": 0, + "deferredTransmissions": 0, + "txPause": 0 + }, + "counterRefreshTime": 1784649554.360978 + }, + "duplex": "duplexFull", + "autoNegotiate": "success", + "loopbackMode": "loopbackNone", + "lanes": 0 + }, + "Vlan4097": { + "name": "Vlan4097", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vlan", + "interfaceAddress": [ + { + "primaryIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::21c:73ff:fe48:71f2", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "00:1c:73:48:71:f2", + "burnedInAddress": "00:1c:73:48:71:f2", + "description": "", + "bandwidth": 0, + "mtu": 9164, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649401.5297651 + }, + "Vlan4094": { + "name": "Vlan4094", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vlan", + "interfaceAddress": [ + { + "primaryIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "interfaceAddressIp6": { + "linkLocalIp6": { + "address": "fe80::21c:73ff:fe48:71f2", + "subnet": "fe80::/64", + "active": true, + "leastpref": false, + "dadfailed": false + }, + "globalUnicastIp6s": [], + "globalAddressesAreVirtual": false, + "addrSource": "manual" + }, + "physicalAddress": "00:1c:73:48:71:f2", + "burnedInAddress": "00:1c:73:48:71:f2", + "description": "", + "bandwidth": 0, + "mtu": 9164, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649404.0131629 + }, + "Loopback101": { + "name": "Loopback101", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "loopback", + "interfaceAddress": [ + { + "primaryIp": { + "address": "10.2.2.2", + "maskLen": 32 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "description": "BLUE_tenant_prefix", + "bandwidth": 0, + "mtu": 65535, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.3364701 + }, + "Loopback0": { + "name": "Loopback0", + "forwardingModel": "routed", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "loopback", + "interfaceAddress": [ + { + "primaryIp": { + "address": "192.168.255.2", + "maskLen": 32 + }, + "secondaryIps": {}, + "secondaryIpsOrderedList": [], + "virtualIp": { + "address": "0.0.0.0", + "maskLen": 0 + }, + "virtualSecondaryIps": {}, + "virtualSecondaryIpsOrderedList": [], + "broadcastAddress": "255.255.255.255", + "dhcp": false + } + ], + "description": "EVPN_Overlay_Peering_and_VTEP_source", + "bandwidth": 0, + "mtu": 65535, + "l3MtuConfigured": false, + "l2Mru": 0, + "lastStatusChangeTimestamp": 1784649396.336526 + }, + "Vxlan1": { + "name": "Vxlan1", + "forwardingModel": "bridged", + "lineProtocolStatus": "up", + "interfaceStatus": "connected", + "hardware": "vxlan", + "interfaceAddress": [], + "description": "", + "bandwidth": 0, + "mtu": 0, + "l3MtuConfigured": false, + "l2Mru": 0, + "vniInDottedNotation": false, + "srcIpIntf": "Loopback0", + "srcIpAddr": "192.168.255.2", + "udpPort": 4789, + "secUdpPort": 5500, + "mcastGrpDecap": "", + "vlanToVniMap": { + "4097": { + "vni": 15002, + "source": "evpn" + }, + "4094": { + "vni": 15001, + "source": "evpn" + } + }, + "vlanToVtepList": {}, + "staticFloodlists": false, + "replicationMode": "headendNonVcs", + "vlanToLearnRestrict": { + "4094": { + "learnFrom": "learnFromAny", + "prefixList": [] + } + }, + "vrfToVniMap": { + "BLUE": 15002 + }, + "decapVniToVrfMap": {}, + "dataPathLearningMode": false, + "controllerClientMode": false, + "controllerControlPlane": false, + "vccImportVlan": "", + "vccArpProxy": false, + "vccNdProxy": false, + "vxlanArpProxy": false, + "vxlanNdProxy": false, + "arpReplyRelayMode": false, + "arpLocalAddress": false, + "portDot1qVniMapping": false, + "mlagSharedRouterMacAddr": "00:00:00:00:00:00", + "vtepAddrMask": "255.255.255.255", + "use32BitVni": false, + "vtepToVtepBridging": false, + "vtepSetForSourcePruning": [], + "vtepSourcePruningAll": false, + "decapFilterMode": "filterEnabled", + "decapFilterIntf": [], + "decapRouteAll": false, + "mcastRouting": false, + "vxlanEncapsulation": "ipv4", + "vArpVtepSrcIpIntf": "", + "floodLearnedAll": false, + "vtepToSecProfileTotal": 0, + "bfdPrefixList": "", + "remoteVxlanDomain": false, + "tcpMssV4": 0, + "tcpMssV6": 0, + "vxlanMacDrop": false + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_neighbors_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_neighbors_vrf_all_|_json.txt new file mode 100644 index 00000000..4ffd87dc --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_neighbors_vrf_all_|_json.txt @@ -0,0 +1,489 @@ +{ + "vrfs": { + "default": { + "peerList": [ + { + "peerAddress": "172.31.255.0", + "asn": "65101", + "linkType": "external", + "routerId": "192.168.255.1", + "vrf": "default", + "version": 4, + "negotiatedVersion": 4, + "updateGroupIndex": -1, + "lastRcvd": 10, + "lastSent": 4, + "holdTime": 180, + "keepaliveTime": 60, + "configHoldTime": 180, + "configKeepaliveTime": 60, + "minHoldTime": 3, + "configMinHoldTime": 3, + "sendFailureHoldTime": 0, + "holdTimeLeft": 170, + "keepaliveTimeLeft": 48, + "state": "Established", + "establishedTime": 156, + "establishedTransitions": 1, + "lastState": "OpenConfirm", + "lastEvent": "Established", + "enRRefreshstalePathRemoval": false, + "outboundEnRRefreshEnabled": true, + "neighborCapabilities": { + "negotiationDisabled": false, + "unsupportedCapReceived": false, + "multiprotocolCaps": { + "ipv4Unicast": { + "advertised": true, + "received": true, + "enabled": true + } + }, + "fourOctetAsnCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "routeRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "enhancedRouteRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "sendEorMessages": { + "advertised": true, + "received": true, + "enabled": true + }, + "addPathsCaps": { + "ipv4Unicast": { + "receivingAddPaths": { + "receiveCapabilityAdvertised": true, + "sendCapabilityReceived": false, + "enabled": false + }, + "sendingAddPaths": { + "sendCapabilityAdvertised": false, + "receiveCapabilityReceived": true, + "enabled": false + } + } + }, + "grCaps": { + "advertised": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + }, + "received": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + } + } + }, + "endOfRibs": { + "incoming": { + "ipv4Unicast": { + "status": "received", + "eorReceivedTime": 1784649403.999767, + "stalePathsDeleted": 0, + "pathsReceivedBeforeEor": 1 + } + } + }, + "nexthopLuOriginateIpv4Uni": false, + "thirdPartyNexthopLuOriginateIpv4Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv4Uni": false, + "nexthopLuOriginateIpv6Uni": false, + "thirdPartyNexthopLuOriginateIpv6Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv6Uni": false, + "rejectAsSetConfedSetV4Uni": false, + "rejectAsSetConfedSetV6Uni": false, + "aigpSessionIpv4Uni": false, + "aigpSessionIpv4LabeledUni": false, + "aigpSessionIpv6Uni": false, + "aigpSessionIpv6LabeledUni": false, + "fwdFailoverTriggerSessionIpv6Uni": false, + "fwdFailoverTriggerSessionIpv4Uni": false, + "outMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 5, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "inMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 5, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "sentMessages": 8, + "receivedMessages": 8, + "prefixesSent": 1, + "prefixesReceived": 1, + "v4BestPaths": 1, + "v4BestEcmpPaths": 0, + "v6PrefixesSent": 0, + "v6PrefixesReceived": 0, + "v6BestPaths": 0, + "v6BestEcmpPaths": 0, + "totalRoutesWarnLimit": 204800, + "maxTotalRoutes": 256000, + "dropStats": { + "inDropAsloop": 0, + "inDropClusterIdLoop": 0, + "inDropMalformedMpbgp": 0, + "inDropOrigId": 0, + "inDropNhLocal": 0, + "inDropNhAfV6": 0, + "prefixDroppedMartianV4": 0, + "prefixDroppedMaxRouteLimitViolatedV4": 0, + "prefixDroppedMartianV6": 0, + "prefixDroppedMaxRouteLimitViolatedV6": 0, + "prefixLuDroppedV4": 0, + "prefixLuDroppedMartianV4": 0, + "prefixLuDroppedMaxRouteLimitViolatedV4": 0, + "prefixLuDroppedV6": 0, + "prefixLuDroppedMartianV6": 0, + "prefixLuDroppedMaxRouteLimitViolatedV6": 0, + "prefixEvpnDroppedUnsupportedRouteType": 0, + "prefixBgpLsDroppedReceptionUnsupported": 0, + "outDropV4LocalAddr": 0, + "outDropV6LocalAddr": 0, + "prefixVpnIpv4DroppedImportMatchFailure": 0, + "prefixVpnIpv4DroppedMaxRouteLimitViolated": 0, + "prefixVpnIpv6DroppedImportMatchFailure": 0, + "prefixVpnIpv6DroppedMaxRouteLimitViolated": 0, + "prefixEvpnDroppedImportMatchFailure": 0, + "prefixEvpnDroppedMaxRouteLimitViolated": 0, + "prefixRtMembershipDroppedLocalAsReject": 0, + "prefixRtMembershipDroppedMaxRouteLimitViolated": 0, + "inDropAsSetConfedSetV4Uni": 0, + "inDropAsSetConfedSetV6Uni": 0 + }, + "peerInUpdateErrors": { + "inUpdErrWithdraw": 0, + "inUpdErrIgnore": 0, + "inUpdErrDisableAfiSafi": 0, + "disabledAfiSafi": "None", + "lastUpdErrTime": 0 + }, + "bgpSoftReconfigInbound": "Default", + "rpkiOriginValidationMethod": "disabled", + "rpkiOriginValidationSendExtComm": false, + "rpkiOriginValidationRouteMap": "", + "rpkiOriginValidationWaitForRoaSync": false, + "rpkiIpv4OvValidPaths": 0, + "rpkiIpv4OvInvalidPaths": 0, + "rpkiIpv4OvUnknownPaths": 0, + "rpkiIpv6OvValidPaths": 0, + "rpkiIpv6OvInvalidPaths": 0, + "rpkiIpv6OvUnknownPaths": 0, + "orrPosition": {}, + "inboundUpdateProcessingDelay": 0, + "inboundUpdateProcessingDelayState": "inactive", + "inboundUpdateProcessingDelayStateDetail": "", + "inboundUpdateProcessingDelayLeft": 0, + "localAsn": "65102", + "localRouterId": "192.168.255.2", + "ttl": 1, + "maxTtlHops": 255, + "updateSource": "172.31.255.1", + "localPort": 36915, + "remotePort": 179, + "prependOwnDisabled": false, + "peerTcpInfo": { + "state": "ESTABLISHED", + "options": 7, + "sendWindowScale": 0, + "rcvWindowScale": 0, + "retransTimeout": 204000, + "delayedAckTimeout": 40000, + "maxSegmentSize": 1448, + "sndRtt": 3285, + "sndRttVariance": 6399, + "slowStartThreshold": 2147483647, + "congestionWindow": 10, + "rcvRtt": 0, + "rcvWindow": 14480, + "totalRetrans": 0, + "outputQueueLength": 0, + "outputMaxQueueLength": 87040, + "inputQueueLength": 0, + "inputMaxQueueLength": 32768, + "connectionOptions": { + "timestampsEnabled": true, + "selectiveAcknowledgementsEnabled": true, + "windowScaleEnabled": true, + "ecnEnabled": false + } + }, + "ifName": "Ethernet1", + "afiSafiInfo": { + "ipv4Unicast": { + "localNexthop": "172.31.255.1" + } + } + }, + { + "peerAddress": "192.168.255.1", + "asn": "65101", + "linkType": "external", + "routerId": "192.168.255.1", + "vrf": "default", + "version": 4, + "negotiatedVersion": 4, + "updateGroupIndex": -1, + "lastRcvd": 4, + "lastSent": 10, + "holdTime": 180, + "keepaliveTime": 60, + "configHoldTime": 180, + "configKeepaliveTime": 60, + "minHoldTime": 3, + "configMinHoldTime": 3, + "sendFailureHoldTime": 0, + "holdTimeLeft": 176, + "keepaliveTimeLeft": 32, + "state": "Established", + "establishedTime": 156, + "establishedTransitions": 1, + "lastState": "OpenConfirm", + "lastEvent": "Established", + "advertisedCommunities": { + "standard": false, + "extended": true, + "large": false + }, + "enRRefreshstalePathRemoval": false, + "outboundEnRRefreshEnabled": true, + "neighborCapabilities": { + "negotiationDisabled": false, + "unsupportedCapReceived": false, + "multiprotocolCaps": { + "l2VpnEvpn": { + "advertised": true, + "received": true, + "enabled": true + } + }, + "fourOctetAsnCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "routeRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "enhancedRouteRefreshCap": { + "advertised": true, + "received": true, + "enabled": true + }, + "sendEorMessages": { + "advertised": true, + "received": true, + "enabled": true + }, + "addPathsCaps": { + "l2VpnEvpn": { + "receivingAddPaths": { + "receiveCapabilityAdvertised": true, + "sendCapabilityReceived": false, + "enabled": false + }, + "sendingAddPaths": { + "sendCapabilityAdvertised": false, + "receiveCapabilityReceived": true, + "enabled": false + } + } + }, + "grCaps": { + "advertised": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + }, + "received": { + "restartTime": 300.0, + "bgpRestarted": true, + "gracefulNotificationSupported": true + } + } + }, + "endOfRibs": { + "incoming": { + "l2VpnEvpn": { + "status": "received", + "eorReceivedTime": 1784649404.00068, + "stalePathsDeleted": 0, + "pathsReceivedBeforeEor": 1 + } + } + }, + "nexthopLuOriginateIpv4Uni": false, + "thirdPartyNexthopLuOriginateIpv4Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv4Uni": false, + "nexthopLuOriginateIpv6Uni": false, + "thirdPartyNexthopLuOriginateIpv6Uni": false, + "nexthopLuOriginateLfibBackupIpForwardIpv6Uni": false, + "rejectAsSetConfedSetV4Uni": false, + "rejectAsSetConfedSetV6Uni": false, + "aigpSessionIpv4Uni": false, + "aigpSessionIpv4LabeledUni": false, + "aigpSessionIpv6Uni": false, + "aigpSessionIpv6LabeledUni": false, + "fwdFailoverTriggerSessionIpv6Uni": false, + "fwdFailoverTriggerSessionIpv4Uni": false, + "outMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 5, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "inMessageStats": { + "opens": 1, + "notifications": 0, + "updates": 2, + "keepalives": 5, + "rtRefreshes": 0, + "beginOfRtRefreshes": 0, + "endOfRtRefreshes": 0 + }, + "sentMessages": 8, + "receivedMessages": 8, + "prefixesSent": 0, + "prefixesReceived": 0, + "v4BestPaths": 0, + "v4BestEcmpPaths": 0, + "v6PrefixesSent": 0, + "v6PrefixesReceived": 0, + "v6BestPaths": 0, + "v6BestEcmpPaths": 0, + "evpnSent": 1, + "evpnReceived": 1, + "evpnBestPaths": 1, + "evpnBestEcmpPaths": 0, + "totalRoutesWarnLimit": 204800, + "maxTotalRoutes": 256000, + "dropStats": { + "inDropAsloop": 0, + "inDropClusterIdLoop": 0, + "inDropMalformedMpbgp": 0, + "inDropOrigId": 0, + "inDropNhLocal": 0, + "inDropNhAfV6": 0, + "prefixDroppedMartianV4": 0, + "prefixDroppedMaxRouteLimitViolatedV4": 0, + "prefixDroppedMartianV6": 0, + "prefixDroppedMaxRouteLimitViolatedV6": 0, + "prefixLuDroppedV4": 0, + "prefixLuDroppedMartianV4": 0, + "prefixLuDroppedMaxRouteLimitViolatedV4": 0, + "prefixLuDroppedV6": 0, + "prefixLuDroppedMartianV6": 0, + "prefixLuDroppedMaxRouteLimitViolatedV6": 0, + "prefixEvpnDroppedUnsupportedRouteType": 0, + "prefixBgpLsDroppedReceptionUnsupported": 0, + "outDropV4LocalAddr": 0, + "outDropV6LocalAddr": 0, + "prefixVpnIpv4DroppedImportMatchFailure": 0, + "prefixVpnIpv4DroppedMaxRouteLimitViolated": 0, + "prefixVpnIpv6DroppedImportMatchFailure": 0, + "prefixVpnIpv6DroppedMaxRouteLimitViolated": 0, + "prefixEvpnDroppedImportMatchFailure": 0, + "prefixEvpnDroppedMaxRouteLimitViolated": 0, + "prefixRtMembershipDroppedLocalAsReject": 0, + "prefixRtMembershipDroppedMaxRouteLimitViolated": 0, + "inDropAsSetConfedSetV4Uni": 0, + "inDropAsSetConfedSetV6Uni": 0 + }, + "peerInUpdateErrors": { + "inUpdErrWithdraw": 0, + "inUpdErrIgnore": 0, + "inUpdErrDisableAfiSafi": 0, + "disabledAfiSafi": "None", + "lastUpdErrTime": 0 + }, + "bgpSoftReconfigInbound": "Default", + "rpkiOriginValidationMethod": "disabled", + "rpkiOriginValidationSendExtComm": false, + "rpkiOriginValidationRouteMap": "", + "rpkiOriginValidationWaitForRoaSync": false, + "rpkiIpv4OvValidPaths": 0, + "rpkiIpv4OvInvalidPaths": 0, + "rpkiIpv4OvUnknownPaths": 0, + "rpkiIpv6OvValidPaths": 0, + "rpkiIpv6OvInvalidPaths": 0, + "rpkiIpv6OvUnknownPaths": 0, + "orrPosition": {}, + "inboundUpdateProcessingDelay": 0, + "inboundUpdateProcessingDelayState": "inactive", + "inboundUpdateProcessingDelayStateDetail": "", + "inboundUpdateProcessingDelayLeft": 0, + "localAsn": "65102", + "localRouterId": "192.168.255.2", + "ttlConfig": "ebgpMultiHop", + "ttl": 3, + "maxTtlHops": 3, + "updateSource": "192.168.255.2", + "localPort": 34397, + "remotePort": 179, + "prependOwnDisabled": false, + "peerTcpInfo": { + "state": "ESTABLISHED", + "options": 7, + "sendWindowScale": 0, + "rcvWindowScale": 0, + "retransTimeout": 204000, + "delayedAckTimeout": 40000, + "maxSegmentSize": 1448, + "sndRtt": 3821, + "sndRttVariance": 7361, + "slowStartThreshold": 2147483647, + "congestionWindow": 10, + "rcvRtt": 0, + "rcvWindow": 14480, + "totalRetrans": 0, + "outputQueueLength": 0, + "outputMaxQueueLength": 87040, + "inputQueueLength": 0, + "inputMaxQueueLength": 32768, + "connectionOptions": { + "timestampsEnabled": true, + "selectiveAcknowledgementsEnabled": true, + "windowScaleEnabled": true, + "ecnEnabled": false + } + }, + "ifName": "Loopback0", + "afiSafiInfo": { + "l2VpnEvpn": { + "localNexthop": "192.168.255.2" + } + } + } + ] + }, + "BLUE": { + "peerList": [] + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_vrf_all_|_json.txt new file mode 100644 index 00000000..270c4067 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_bgp_vrf_all_|_json.txt @@ -0,0 +1,200 @@ +{ + "vrfs": { + "default": { + "vrf": "default", + "routerId": "192.168.255.2", + "asn": "65102", + "bgpRouteEntries": { + "192.168.255.1/32": { + "address": "192.168.255.1", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "172.31.255.0", + "reasonNotBestpath": "noReason", + "localPreference": 100, + "weight": 0, + "tag": 0, + "med": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "172.31.255.0", + "peerRouterId": "192.168.255.1" + }, + "asPathEntry": { + "asPathType": "External", + "asPath": "65101 i" + } + } + ], + "totalPaths": 1 + }, + "192.168.255.2/32": { + "address": "192.168.255.2", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": true, + "ecmp": true, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "192.168.255.2" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + }, + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": false, + "backup": false, + "ecmpHead": false, + "ecmp": true, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "192.168.255.2" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + } + ], + "totalPaths": 2 + } + } + }, + "BLUE": { + "vrf": "BLUE", + "routerId": "10.2.2.2", + "asn": "65102", + "bgpRouteEntries": { + "10.1.1.1/32": { + "address": "10.1.1.1", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "192.168.255.1", + "reasonNotBestpath": "noReason", + "localPreference": 100, + "weight": 0, + "tag": 0, + "med": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "192.168.255.1", + "peerRouterId": "192.168.255.1" + }, + "asPathEntry": { + "asPathType": "External", + "asPath": "65101 i" + } + } + ], + "totalPaths": 1 + }, + "10.2.2.2/32": { + "address": "10.2.2.2", + "maskLength": 32, + "bgpRoutePaths": [ + { + "nextHop": "", + "reasonNotBestpath": "noReason", + "weight": 0, + "tag": 0, + "routeType": { + "stale": false, + "valid": true, + "suppressed": false, + "active": true, + "backup": false, + "ecmpHead": false, + "ecmp": false, + "ecmpContributor": false, + "atomicAggregator": false, + "queued": false, + "luRoute": false, + "sixPeRoute": false, + "ucmp": false, + "origin": "Igp" + }, + "peerEntry": { + "peerAddr": "", + "peerRouterId": "10.2.2.2" + }, + "asPathEntry": { + "asPathType": "Local", + "asPath": "i" + } + } + ], + "totalPaths": 1 + } + } + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_ospf_neighbor_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_ospf_neighbor_|_json.txt new file mode 100644 index 00000000..940ab170 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_ospf_neighbor_|_json.txt @@ -0,0 +1,3 @@ +{ + "vrfs": {} +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_route_vrf_all_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_route_vrf_all_|_json.txt new file mode 100644 index 00000000..5f780a7e --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_ip_route_vrf_all_|_json.txt @@ -0,0 +1,107 @@ +{ + "vrfs": { + "default": { + "routingDisabled": false, + "allRoutesProgrammedHardware": true, + "allRoutesProgrammedKernel": true, + "defaultRouteState": "notSet", + "routes": { + "172.20.20.0/24": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Management0" + } + ], + "directlyConnected": true + }, + "172.31.255.0/31": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Ethernet1" + } + ], + "directlyConnected": true + }, + "192.168.255.1/32": { + "hardwareProgrammed": true, + "routeType": "eBGP", + "routeLeaked": false, + "kernelProgrammed": true, + "preference": 200, + "metric": 0, + "routeAction": "forward", + "directlyConnected": false, + "vias": [ + { + "nexthopAddr": "172.31.255.0", + "interface": "Ethernet1" + } + ] + }, + "192.168.255.2/32": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Loopback0" + } + ], + "directlyConnected": true + } + } + }, + "BLUE": { + "routingDisabled": false, + "allRoutesProgrammedHardware": true, + "allRoutesProgrammedKernel": true, + "defaultRouteState": "notSet", + "routes": { + "10.1.1.1/32": { + "hardwareProgrammed": true, + "routeType": "eBGP", + "routeLeaked": false, + "kernelProgrammed": true, + "preference": 200, + "metric": 0, + "routeAction": "forward", + "directlyConnected": false, + "vias": [ + { + "nexthopAddr": "", + "vtepAddr": "192.168.255.1", + "vni": 15001, + "routerMac": "00:1c:73:6c:a7:2c", + "localInterface": "Vxlan1" + } + ] + }, + "10.2.2.2/32": { + "hardwareProgrammed": true, + "routeType": "connected", + "routeLeaked": false, + "kernelProgrammed": true, + "routeAction": "forward", + "vias": [ + { + "interface": "Loopback101" + } + ], + "directlyConnected": true + } + } + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_isis_neighbors_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_isis_neighbors_|_json.txt new file mode 100644 index 00000000..940ab170 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_isis_neighbors_|_json.txt @@ -0,0 +1,3 @@ +{ + "vrfs": {} +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_version_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_version_|_json.txt new file mode 100644 index 00000000..97836c79 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_version_|_json.txt @@ -0,0 +1,21 @@ +{ + "mfgName": "Arista", + "modelName": "cEOSLab", + "hardwareRevision": "", + "serialNumber": "98F0E0DA3A41CDBCE46EB922D8D0AE3C", + "systemMacAddress": "00:1c:73:48:71:f2", + "hwMacAddress": "00:00:00:00:00:00", + "configMacAddress": "00:00:00:00:00:00", + "version": "4.36.0.1F-47401373.43601F (engineering build)", + "architecture": "x86_64", + "internalVersion": "4.36.0.1F-47401373.43601F", + "internalBuildId": "15b3cfe5-2f32-4176-b3d1-a80bba22ed14", + "imageFormatVersion": "1.0", + "imageOptimization": "None", + "kernelVersion": "6.17.0-1019-aws", + "bootupTimestamp": 1784649378.9368534, + "uptime": 184.82585430145264, + "memTotal": 32311292, + "memFree": 27991476, + "isIntlVersion": false +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/show/leaf2/show_vrf_|_json.txt b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_vrf_|_json.txt new file mode 100644 index 00000000..e8ed7271 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/show/leaf2/show_vrf_|_json.txt @@ -0,0 +1,65 @@ +{ + "vrfs": { + "default": { + "routeDistinguisher": "", + "protocols": { + "ipv4": { + "supported": true, + "protocolState": "up", + "routingState": "up" + }, + "ipv6": { + "supported": true, + "protocolState": "up", + "routingState": "down" + } + }, + "vrfState": "up", + "interfacesV4": [ + "Vlan4094", + "Ethernet1", + "Management0", + "Loopback0" + ], + "interfacesV6": [ + "Vlan4094", + "Management0" + ], + "interfaces": [ + "Vlan4094", + "Ethernet1", + "Management0", + "Loopback0" + ], + "vrfId": 0 + }, + "BLUE": { + "routeDistinguisher": "192.168.255.2:15002", + "protocols": { + "ipv4": { + "supported": true, + "protocolState": "up", + "routingState": "up" + }, + "ipv6": { + "supported": true, + "protocolState": "up", + "routingState": "down" + } + }, + "vrfState": "up", + "interfacesV4": [ + "Loopback101", + "Vlan4097" + ], + "interfacesV6": [ + "Vlan4097" + ], + "interfaces": [ + "Loopback101", + "Vlan4097" + ], + "vrfId": 1 + } + } +} \ No newline at end of file diff --git a/snapshots/eos_evpn_multiple_rts/source/README.md b/snapshots/eos_evpn_multiple_rts/source/README.md new file mode 100644 index 00000000..060fc5dc --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/source/README.md @@ -0,0 +1,68 @@ +# eos_evpn_multiple_rts + +Arista cEOS EVPN lab exercising a single VRF that declares **multiple** +`route-target import evpn` and `route-target export evpn` lines. + +Reference: batfish/batfish#10113. + +## What it tests + +Arista EOS allows a VRF to list several import and several export EVPN +route-targets: + +``` +vrf RED + route-target import evpn 65000:100 + route-target import evpn 65000:199 + route-target export evpn 65000:200 + route-target export evpn 65000:299 +``` + +Batfish's Arista model stores a single import and a single export RT per +VRF (`AristaBgpVrf._importRouteTarget` / `_exportRouteTarget`), and the +extractor overwrites on each line, so only the last value survives. This +lab reproduces the resulting divergence end to end. + +## Topology + +Two directly-connected VTEPs, eBGP IPv4 underlay plus eBGP EVPN overlay +over Loopback0, symmetric-IRB L3VNI: + +- `leaf1` AS 65101, VRF `RED` (L3VNI 15001), tenant loopback `10.1.1.1/32` +- `leaf2` AS 65102, VRF `BLUE` (L3VNI 15002), tenant loopback `10.2.2.2/32` + +RTs are arranged so the **matching** value is never the last one listed +in its direction: + +| leaf1 RED | leaf2 BLUE | +| --------------------- | --------------------- | +| import 65000:100, 199 | import 65000:200, 288 | +| export 65000:200, 299 | export 65000:100, 177 | + +`leaf2` BLUE imports `10.1.1.1/32` because leaf1 RED exports `65000:200` +(BLUE's first import). `leaf1` RED imports `10.2.2.2/32` because leaf2 +BLUE exports `65000:100` (RED's first import). + +## Expected behavior + +Real cEOS: both tenant loopbacks cross into the peer VRF — matching +happens on the first-listed RT, and the decoys (`199`, `299`, `288`, +`177`) are unused. + +Buggy model: only the last RT per direction is retained (`199`/`299` on +leaf1, `288`/`177` on leaf2). None of those match anything, so neither +`10.1.1.1/32` nor `10.2.2.2/32` is imported — visible as missing routes +in the VRF RIB / EVPN RIB and in `evpnL3VniProperties()`. + +## Status + +Deployed on cEOS 4.36.0.1F via the `infra/` lab builder, collected, and +validated against Batfish. All 6 `checks.yaml` preconditions pass on the +real device: both cross-VRF routes import via their non-last RT. + +Against Batfish the bug reproduces exactly. `test_main_rib_routes`, +`test_bgp_rib_routes`, and `test_evpn_rib_routes` fail on both leaves +because the imported route is missing (RED lacks `10.2.2.2/32`, BLUE +lacks `10.1.1.1/32`). These are sickbayed to xfail against +batfish/batfish#10113; remove the entries once Batfish models multiple +import/export RTs. diff --git a/snapshots/eos_evpn_multiple_rts/source/checks.yaml b/snapshots/eos_evpn_multiple_rts/source/checks.yaml new file mode 100644 index 00000000..aff8037e --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/source/checks.yaml @@ -0,0 +1,43 @@ +# Preconditions for the multiple-route-target EVPN lab. Verifies the +# EVPN overlay is up and that each leaf imports the peer's tenant +# loopback into its VRF via a non-last route-target. If these routes are +# present on the real device, any absence in Batfish is a modeling gap +# (batfish/batfish#10113), not a lab misconfiguration. + +checks: + # Underlay eBGP peers (what `show ip bgp summary` reports). The EVPN + # overlay session over Loopback0 is proven up by the cross-VRF route + # imports below. + - type: bgp_peer_established + node: leaf1 + neighbor: 172.31.255.1 + description: "leaf1 -> leaf2 IPv4 underlay" + - type: bgp_peer_established + node: leaf2 + neighbor: 172.31.255.0 + description: "leaf2 -> leaf1 IPv4 underlay" + + # Each leaf originates its own tenant loopback. + - type: route_exists + node: leaf1 + table: RED + prefix: 10.1.1.1/32 + description: "RED originates 10.1.1.1/32 on leaf1" + - type: route_exists + node: leaf2 + table: BLUE + prefix: 10.2.2.2/32 + description: "BLUE originates 10.2.2.2/32 on leaf2" + + # Cross-VRF imports via a non-last route-target. These are the routes + # that disappear if only the last RT per direction is retained. + - type: route_exists + node: leaf2 + table: BLUE + prefix: 10.1.1.1/32 + description: "BLUE imports leaf1 RED 10.1.1.1/32 via evpn 65000:200" + - type: route_exists + node: leaf1 + table: RED + prefix: 10.2.2.2/32 + description: "RED imports leaf2 BLUE 10.2.2.2/32 via evpn 65000:100" diff --git a/snapshots/eos_evpn_multiple_rts/source/configs/leaf1.cfg b/snapshots/eos_evpn_multiple_rts/source/configs/leaf1.cfg new file mode 100644 index 00000000..981c0ecf --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/source/configs/leaf1.cfg @@ -0,0 +1,74 @@ +! leaf1 (AS 65101): EVPN VTEP with VRF RED using MULTIPLE import and +! export route-targets. The matching RT toward leaf2 is intentionally +! NOT the last one listed, so a "last-write-wins" model drops it. +! +! import evpn 65000:100 <- matches leaf2 BLUE export; must be kept +! import evpn 65000:199 <- unused decoy (listed last) +! export evpn 65000:200 <- matches leaf2 BLUE import; must be kept +! export evpn 65000:299 <- unused decoy (listed last) +! +hostname leaf1 +! +username admin privilege 15 secret admin +! +aaa authorization exec default local +! +service routing protocols model multi-agent +! +vrf instance RED +! +interface Loopback0 + description EVPN_Overlay_Peering_and_VTEP_source + ip address 192.168.255.1/32 +! +interface Loopback101 + description RED_tenant_prefix + vrf RED + ip address 10.1.1.1/32 +! +interface Ethernet1 + description P2P_UNDERLAY_TO_leaf2 + no switchport + ip address 172.31.255.0/31 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vrf RED vni 15001 +! +ip routing +ip routing vrf RED +! +ip prefix-list PL-LOOPBACKS + seq 10 permit 192.168.255.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS +! +router bgp 65101 + router-id 192.168.255.1 + no bgp default ipv4-unicast + maximum-paths 2 ecmp 2 + neighbor 172.31.255.1 remote-as 65102 + neighbor 192.168.255.2 remote-as 65102 + neighbor 192.168.255.2 update-source Loopback0 + neighbor 192.168.255.2 ebgp-multihop 3 + neighbor 192.168.255.2 send-community extended + redistribute connected route-map RM-CONN-2-BGP + ! + address-family evpn + neighbor 192.168.255.2 activate + ! + address-family ipv4 + neighbor 172.31.255.1 activate + network 192.168.255.1/32 + ! + vrf RED + rd 192.168.255.1:15001 + route-target import evpn 65000:100 + route-target import evpn 65000:199 + route-target export evpn 65000:200 + route-target export evpn 65000:299 + redistribute connected +! +end diff --git a/snapshots/eos_evpn_multiple_rts/source/configs/leaf2.cfg b/snapshots/eos_evpn_multiple_rts/source/configs/leaf2.cfg new file mode 100644 index 00000000..01a34dda --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/source/configs/leaf2.cfg @@ -0,0 +1,77 @@ +! leaf2 (AS 65102): EVPN VTEP with VRF BLUE using MULTIPLE import and +! export route-targets. As on leaf1, the matching RT is NOT listed last. +! +! import evpn 65000:200 <- matches leaf1 RED export; must be kept +! import evpn 65000:288 <- unused decoy (listed last) +! export evpn 65000:100 <- matches leaf1 RED import; must be kept +! export evpn 65000:177 <- unused decoy (listed last) +! +! On a correct model both leaf loopbacks (10.1.1.1 and 10.2.2.2) cross +! into the peer VRF. If only the last RT per direction survives, no +! RTs match and neither route is imported. +! +hostname leaf2 +! +username admin privilege 15 secret admin +! +aaa authorization exec default local +! +service routing protocols model multi-agent +! +vrf instance BLUE +! +interface Loopback0 + description EVPN_Overlay_Peering_and_VTEP_source + ip address 192.168.255.2/32 +! +interface Loopback101 + description BLUE_tenant_prefix + vrf BLUE + ip address 10.2.2.2/32 +! +interface Ethernet1 + description P2P_UNDERLAY_TO_leaf1 + no switchport + ip address 172.31.255.1/31 +! +interface Vxlan1 + vxlan source-interface Loopback0 + vxlan udp-port 4789 + vxlan vrf BLUE vni 15002 +! +ip routing +ip routing vrf BLUE +! +ip prefix-list PL-LOOPBACKS + seq 10 permit 192.168.255.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS +! +router bgp 65102 + router-id 192.168.255.2 + no bgp default ipv4-unicast + maximum-paths 2 ecmp 2 + neighbor 172.31.255.0 remote-as 65101 + neighbor 192.168.255.1 remote-as 65101 + neighbor 192.168.255.1 update-source Loopback0 + neighbor 192.168.255.1 ebgp-multihop 3 + neighbor 192.168.255.1 send-community extended + redistribute connected route-map RM-CONN-2-BGP + ! + address-family evpn + neighbor 192.168.255.1 activate + ! + address-family ipv4 + neighbor 172.31.255.0 activate + network 192.168.255.2/32 + ! + vrf BLUE + rd 192.168.255.2:15002 + route-target import evpn 65000:200 + route-target import evpn 65000:288 + route-target export evpn 65000:100 + route-target export evpn 65000:177 + redistribute connected +! +end diff --git a/snapshots/eos_evpn_multiple_rts/source/topology.clab.yml b/snapshots/eos_evpn_multiple_rts/source/topology.clab.yml new file mode 100644 index 00000000..ee92181c --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/source/topology.clab.yml @@ -0,0 +1,37 @@ +# Arista cEOS lab: a single EVPN VRF declaring MULTIPLE `route-target +# import evpn` and `route-target export evpn` lines. Reference: +# batfish/batfish#10113. +# +# Topology: +# +# leaf1 (AS 65101) leaf2 (AS 65102) +# vrf RED, L3VNI 15001 vrf BLUE, L3VNI 15002 +# Loopback101 10.1.1.1/32 (RED) Loopback101 10.2.2.2/32 (BLUE) +# import evpn 65000:100, 65000:199 import evpn 65000:200, 65000:288 +# export evpn 65000:200, 65000:299 export evpn 65000:100, 65000:177 +# Et1 172.31.255.0/31 ------------------ Et1 172.31.255.1/31 +# Loopback0 192.168.255.1/32 (overlay) Loopback0 192.168.255.2/32 (overlay) +# +# eBGP IPv4 underlay carries the loopbacks; eBGP EVPN overlay peers over +# Loopback0. Each VRF redistributes its tenant loopback as an EVPN Type-5 +# route. The RTs are chosen so the *matching* value is never the last one +# listed in its direction: leaf2 BLUE imports leaf1 RED's 10.1.1.1/32 via +# 65000:200, and leaf1 RED imports leaf2 BLUE's 10.2.2.2/32 via 65000:100. +# A model that keeps only the last RT per direction matches nothing and +# imports neither route. + +name: ceos-evpn-multiple-rts + +topology: + nodes: + leaf1: + kind: arista_ceos + image: ceos:4.36.0.1F + startup-config: configs/leaf1.cfg + leaf2: + kind: arista_ceos + image: ceos:4.36.0.1F + startup-config: configs/leaf2.cfg + + links: + - endpoints: ["leaf1:eth1", "leaf2:eth1"] diff --git a/snapshots/eos_evpn_multiple_rts/validation/sickbay.yaml b/snapshots/eos_evpn_multiple_rts/validation/sickbay.yaml new file mode 100644 index 00000000..25ca3807 --- /dev/null +++ b/snapshots/eos_evpn_multiple_rts/validation/sickbay.yaml @@ -0,0 +1,22 @@ +# Expected failures for the multiple-route-target EVPN lab. +# +# Batfish's Arista model keeps only a single import and a single export +# EVPN route-target per VRF (last line wins). This lab lists the matching +# RT before an unused decoy in each direction, so Batfish retains only the +# decoy and imports neither cross-VRF route. The real device imports both. +# Tracked in https://github.com/batfish/batfish/issues/10113. +# +# Remove these entries once Batfish models multiple import/export RTs. +entries: + - hostname: "leaf[12]" + test_name: test_main_rib_routes + skip: + reason: "Multiple EVPN route-targets collapse to the last one, so the cross-VRF imported route is missing from the VRF RIB. https://github.com/batfish/batfish/issues/10113" + - hostname: "leaf[12]" + test_name: test_bgp_rib_routes + skip: + reason: "Multiple EVPN route-targets collapse to the last one, so the cross-VRF imported route is missing from the BGP RIB. https://github.com/batfish/batfish/issues/10113" + - hostname: "leaf[12]" + test_name: test_evpn_rib_routes + skip: + reason: "Multiple EVPN route-targets collapse to the last one, so the imported EVPN Type-5 route is missing. https://github.com/batfish/batfish/issues/10113"