From a19aca1671f5f6fcec7b83dda03f46dc09c5b311 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sat, 28 Mar 2020 13:56:42 -0400 Subject: [PATCH] tests: Modify bgp_rr_ibgp to test RR server correctness Fixup this basically unused test to ensure that a RR server passes the nexthop through correctly. Signed-off-by: Donald Sharp --- .../bgp_rr_ibgp/spine1/show_ip_route.json_ref | 28 +-- tests/topotests/bgp_rr_ibgp/spine2/bgpd.conf | 8 - .../bgp_rr_ibgp/spine2/show_ip_route.json_ref | 162 ------------------ .../topotests/bgp_rr_ibgp/spine2/staticd.conf | 1 - tests/topotests/bgp_rr_ibgp/spine2/zebra.conf | 9 - .../bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py | 53 +----- tests/topotests/bgp_rr_ibgp/tor1/bgpd.conf | 1 - .../bgp_rr_ibgp/tor1/show_ip_route.json_ref | 64 +++---- tests/topotests/bgp_rr_ibgp/tor1/zebra.conf | 4 +- tests/topotests/bgp_rr_ibgp/tor2/bgpd.conf | 1 - .../bgp_rr_ibgp/tor2/show_ip_route.json_ref | 64 +++---- tests/topotests/bgp_rr_ibgp/tor2/zebra.conf | 4 +- tests/topotests/pytest.ini | 2 +- 13 files changed, 64 insertions(+), 337 deletions(-) delete mode 100644 tests/topotests/bgp_rr_ibgp/spine2/bgpd.conf delete mode 100644 tests/topotests/bgp_rr_ibgp/spine2/show_ip_route.json_ref delete mode 100644 tests/topotests/bgp_rr_ibgp/spine2/staticd.conf delete mode 100644 tests/topotests/bgp_rr_ibgp/spine2/zebra.conf diff --git a/tests/topotests/bgp_rr_ibgp/spine1/show_ip_route.json_ref b/tests/topotests/bgp_rr_ibgp/spine1/show_ip_route.json_ref index 552e96ddb9..75ce1b149e 100644 --- a/tests/topotests/bgp_rr_ibgp/spine1/show_ip_route.json_ref +++ b/tests/topotests/bgp_rr_ibgp/spine1/show_ip_route.json_ref @@ -11,15 +11,12 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.2.1", "afi":"ipv4", - "interfaceIndex":2, "interfaceName":"spine1-eth0", "active":true } @@ -38,14 +35,11 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":2, "interfaceName":"spine1-eth0", "active":true } @@ -64,15 +58,12 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.4.2", "afi":"ipv4", - "interfaceIndex":3, "interfaceName":"spine1-eth1", "active":true } @@ -91,23 +82,20 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":3, "interfaceName":"spine1-eth1", "active":true } ] } ], - "192.168.5.0\/24":[ + "192.168.5.1\/32":[ { - "prefix":"192.168.5.0\/24", + "prefix":"192.168.5.1\/32", "protocol":"bgp", "selected":true, "destSelected":true, @@ -117,24 +105,21 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.2.1", "afi":"ipv4", - "interfaceIndex":2, "interfaceName":"spine1-eth0", "active":true } ] } ], - "192.168.6.0\/24":[ + "192.168.6.2\/32":[ { - "prefix":"192.168.6.0\/24", + "prefix":"192.168.6.2\/32", "protocol":"bgp", "selected":true, "destSelected":true, @@ -144,19 +129,16 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.4.2", "afi":"ipv4", - "interfaceIndex":3, "interfaceName":"spine1-eth1", "active":true } ] } ] -} +} \ No newline at end of file diff --git a/tests/topotests/bgp_rr_ibgp/spine2/bgpd.conf b/tests/topotests/bgp_rr_ibgp/spine2/bgpd.conf deleted file mode 100644 index a865b388ac..0000000000 --- a/tests/topotests/bgp_rr_ibgp/spine2/bgpd.conf +++ /dev/null @@ -1,8 +0,0 @@ -hostname spine2 -router bgp 99 - neighbor 192.168.5.1 remote-as internal - neighbor 192.168.6.2 remote-as internal - address-family ipv4 uni - redistribute connected - neighbor 192.168.5.1 route-reflector-client - neighbor 192.168.6.2 route-reflector-client diff --git a/tests/topotests/bgp_rr_ibgp/spine2/show_ip_route.json_ref b/tests/topotests/bgp_rr_ibgp/spine2/show_ip_route.json_ref deleted file mode 100644 index c428a8832f..0000000000 --- a/tests/topotests/bgp_rr_ibgp/spine2/show_ip_route.json_ref +++ /dev/null @@ -1,162 +0,0 @@ -{ - "192.168.1.0\/24":[ - { - "prefix":"192.168.1.0\/24", - "protocol":"bgp", - "selected":true, - "destSelected":true, - "distance":200, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "ip":"192.168.5.1", - "afi":"ipv4", - "interfaceIndex":2, - "interfaceName":"spine2-eth0", - "active":true - } - ] - } - ], - "192.168.2.0\/24":[ - { - "prefix":"192.168.2.0\/24", - "protocol":"bgp", - "selected":true, - "destSelected":true, - "distance":200, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "ip":"192.168.5.1", - "afi":"ipv4", - "interfaceIndex":2, - "interfaceName":"spine2-eth0", - "active":true - } - ] - } - ], - "192.168.3.0\/24":[ - { - "prefix":"192.168.3.0\/24", - "protocol":"bgp", - "selected":true, - "destSelected":true, - "distance":200, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "ip":"192.168.6.2", - "afi":"ipv4", - "interfaceIndex":3, - "interfaceName":"spine2-eth1", - "active":true - } - ] - } - ], - "192.168.4.0\/24":[ - { - "prefix":"192.168.4.0\/24", - "protocol":"bgp", - "selected":true, - "destSelected":true, - "distance":200, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":13, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "ip":"192.168.6.2", - "afi":"ipv4", - "interfaceIndex":3, - "interfaceName":"spine2-eth1", - "active":true - } - ] - } - ], - "192.168.5.0\/24":[ - { - "prefix":"192.168.5.0\/24", - "protocol":"connected", - "selected":true, - "destSelected":true, - "distance":0, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "directlyConnected":true, - "interfaceIndex":2, - "interfaceName":"spine2-eth0", - "active":true - } - ] - } - ], - "192.168.6.0\/24":[ - { - "prefix":"192.168.6.0\/24", - "protocol":"connected", - "selected":true, - "destSelected":true, - "distance":0, - "metric":0, - "installed":true, - "table":254, - "internalStatus":16, - "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, - "nexthops":[ - { - "flags":3, - "fib":true, - "directlyConnected":true, - "interfaceIndex":3, - "interfaceName":"spine2-eth1", - "active":true - } - ] - } - ] -} diff --git a/tests/topotests/bgp_rr_ibgp/spine2/staticd.conf b/tests/topotests/bgp_rr_ibgp/spine2/staticd.conf deleted file mode 100644 index 3ee14d262c..0000000000 --- a/tests/topotests/bgp_rr_ibgp/spine2/staticd.conf +++ /dev/null @@ -1 +0,0 @@ -hostname spine2 diff --git a/tests/topotests/bgp_rr_ibgp/spine2/zebra.conf b/tests/topotests/bgp_rr_ibgp/spine2/zebra.conf deleted file mode 100644 index a06681fbc4..0000000000 --- a/tests/topotests/bgp_rr_ibgp/spine2/zebra.conf +++ /dev/null @@ -1,9 +0,0 @@ -hostname spine2 -ip forwarding -ipv6 forwarding - -int spine2-eth0 - ip addr 192.168.5.4/24 - -int spine2-eth1 - ip addr 192.168.6.4/24 diff --git a/tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py b/tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py index c28394a7a7..c7daa06b76 100755 --- a/tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py +++ b/tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py @@ -25,47 +25,8 @@ """ test_bgp_rr_ibgp_topo1.py: Testing IBGP with RR and no IGP - - In a leaf/spine topology with only IBGP connections, where - the same network is being redistributed at multiple points - in the network ( say a redistribute connected at both leaf and spines ) - we end up in a state where zebra gets very confused. - - eva# show ip route - Codes: K - kernel route, C - connected, S - static, R - RIP, - O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, - T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, - F - PBR, f - OpenFabric, - > - selected route, * - FIB route, q - queued route, r - rejected route - - C>* 192.168.1.0/24 is directly connected, tor1-eth0, 00:00:30 - C>* 192.168.2.0/24 is directly connected, tor1-eth1, 00:00:30 - B 192.168.3.0/24 [200/0] via 192.168.4.2 inactive, 00:00:25 - via 192.168.6.2 inactive, 00:00:25 - B>* 192.168.4.0/24 [200/0] via 192.168.2.3, tor1-eth1, 00:00:25 - * via 192.168.6.2 inactive, 00:00:25 - C>* 192.168.5.0/24 is directly connected, tor1-eth2, 00:00:30 - B>* 192.168.6.0/24 [200/0] via 192.168.4.2 inactive, 00:00:25 - * via 192.168.5.4, tor1-eth2, 00:00:25 - - Effectively we have ibgp routes recursing through ibgp routes - and there is no metric to discern whom to listen to. - - This draft: - https://tools.ietf.org/html/draft-ietf-idr-bgp-optimal-route-reflection-19 - - appears to address this issue. From looking at both cisco and arista - deployments they are handling this issue by having the route reflector - prefer the localy learned routes over from their clients. - - Add this topology, in a broken state, so that when we do fix this issue - it is a simple matter of touching this topology up and re-adding it - to the normal daily builds. I also wanted to add this topology - since it is in a state of `doneness` and I wanted to move onto - my normal day job without having to remember about this test. - - This topology is not configured to be run as part of the normal - topotests. +Ensure that a basic rr topology comes up and correctly passes +routes around """ @@ -105,7 +66,6 @@ class NetworkTopo(Topo): tgen.add_router('tor1') tgen.add_router('tor2') tgen.add_router('spine1') - tgen.add_router('spine2') # First switch is for a dummy interface (for local network) # on tor1 @@ -128,15 +88,6 @@ class NetworkTopo(Topo): switch.add_link(tgen.gears['tor2']) switch.add_link(tgen.gears['spine1']) - # 192.168.5.0/24 - tor1 <-> spine2 connection - switch = tgen.add_switch('sw5') - switch.add_link(tgen.gears['tor1']) - switch.add_link(tgen.gears['spine2']) - - # 192.168.6.0/24 - tor2 <-> spine2 connection - switch = tgen.add_switch('sw6') - switch.add_link(tgen.gears['tor2']) - switch.add_link(tgen.gears['spine2']) ##################################################### ## diff --git a/tests/topotests/bgp_rr_ibgp/tor1/bgpd.conf b/tests/topotests/bgp_rr_ibgp/tor1/bgpd.conf index 44a78dffd7..e8ec0f7680 100644 --- a/tests/topotests/bgp_rr_ibgp/tor1/bgpd.conf +++ b/tests/topotests/bgp_rr_ibgp/tor1/bgpd.conf @@ -1,5 +1,4 @@ hostname tor1 router bgp 99 neighbor 192.168.2.3 remote-as internal - neighbor 192.168.5.4 remote-as internal redistribute connected diff --git a/tests/topotests/bgp_rr_ibgp/tor1/show_ip_route.json_ref b/tests/topotests/bgp_rr_ibgp/tor1/show_ip_route.json_ref index 223dcebbca..6cfa02441f 100644 --- a/tests/topotests/bgp_rr_ibgp/tor1/show_ip_route.json_ref +++ b/tests/topotests/bgp_rr_ibgp/tor1/show_ip_route.json_ref @@ -11,14 +11,11 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":2, "interfaceName":"tor1-eth0", "active":true } @@ -37,14 +34,11 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":3, "interfaceName":"tor1-eth1", "active":true } @@ -55,23 +49,29 @@ { "prefix":"192.168.3.0\/24", "protocol":"bgp", + "selected":true, + "destSelected":true, "distance":200, "metric":0, + "installed":true, "table":254, - "internalStatus":0, - "internalFlags":5, - "internalNextHopNum":2, - "internalNextHopActiveNum":0, + "internalStatus":16, + "internalFlags":13, "nexthops":[ { - "flags":0, + "flags":5, "ip":"192.168.4.2", - "afi":"ipv4" + "afi":"ipv4", + "active":true, + "recursive":true }, { - "flags":0, - "ip":"192.168.6.2", - "afi":"ipv4" + "flags":3, + "fib":true, + "ip":"192.168.2.3", + "afi":"ipv4", + "interfaceName":"tor1-eth1", + "active":true } ] } @@ -88,29 +88,21 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":2, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.2.3", "afi":"ipv4", - "interfaceIndex":3, "interfaceName":"tor1-eth1", "active":true - }, - { - "flags":0, - "ip":"192.168.6.2", - "afi":"ipv4" } ] } ], - "192.168.5.0\/24":[ + "192.168.5.1\/32":[ { - "prefix":"192.168.5.0\/24", + "prefix":"192.168.5.1\/32", "protocol":"connected", "selected":true, "destSelected":true, @@ -120,23 +112,20 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":4, - "interfaceName":"tor1-eth2", + "interfaceName":"lo", "active":true } ] } ], - "192.168.6.0\/24":[ + "192.168.6.2\/32":[ { - "prefix":"192.168.6.0\/24", + "prefix":"192.168.6.2\/32", "protocol":"bgp", "selected":true, "destSelected":true, @@ -146,21 +135,20 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":2, - "internalNextHopActiveNum":1, "nexthops":[ { - "flags":0, + "flags":5, "ip":"192.168.4.2", - "afi":"ipv4" + "afi":"ipv4", + "active":true, + "recursive":true }, { "flags":3, "fib":true, - "ip":"192.168.5.4", + "ip":"192.168.2.3", "afi":"ipv4", - "interfaceIndex":4, - "interfaceName":"tor1-eth2", + "interfaceName":"tor1-eth1", "active":true } ] diff --git a/tests/topotests/bgp_rr_ibgp/tor1/zebra.conf b/tests/topotests/bgp_rr_ibgp/tor1/zebra.conf index f2fa713507..25b4fcfd0f 100644 --- a/tests/topotests/bgp_rr_ibgp/tor1/zebra.conf +++ b/tests/topotests/bgp_rr_ibgp/tor1/zebra.conf @@ -8,5 +8,5 @@ int tor1-eth0 int tor1-eth1 ip addr 192.168.2.1/24 -int tor1-eth2 - ip addr 192.168.5.1/24 +int lo + ip addr 192.168.5.1/32 diff --git a/tests/topotests/bgp_rr_ibgp/tor2/bgpd.conf b/tests/topotests/bgp_rr_ibgp/tor2/bgpd.conf index 5ef1de260e..b091c97ac3 100644 --- a/tests/topotests/bgp_rr_ibgp/tor2/bgpd.conf +++ b/tests/topotests/bgp_rr_ibgp/tor2/bgpd.conf @@ -1,5 +1,4 @@ hostname tor2 router bgp 99 neighbor 192.168.4.3 remote-as internal - neighbor 192.168.6.4 remote-as internal redistribute connected diff --git a/tests/topotests/bgp_rr_ibgp/tor2/show_ip_route.json_ref b/tests/topotests/bgp_rr_ibgp/tor2/show_ip_route.json_ref index 5f041b8c62..d9e9290e61 100644 --- a/tests/topotests/bgp_rr_ibgp/tor2/show_ip_route.json_ref +++ b/tests/topotests/bgp_rr_ibgp/tor2/show_ip_route.json_ref @@ -3,23 +3,29 @@ { "prefix":"192.168.1.0\/24", "protocol":"bgp", + "selected":true, + "destSelected":true, "distance":200, "metric":0, + "installed":true, "table":254, - "internalStatus":0, - "internalFlags":5, - "internalNextHopNum":2, - "internalNextHopActiveNum":0, + "internalStatus":16, + "internalFlags":13, "nexthops":[ { - "flags":0, + "flags":5, "ip":"192.168.2.1", - "afi":"ipv4" + "afi":"ipv4", + "active":true, + "recursive":true }, { - "flags":0, - "ip":"192.168.5.1", - "afi":"ipv4" + "flags":3, + "fib":true, + "ip":"192.168.4.3", + "afi":"ipv4", + "interfaceName":"tor2-eth1", + "active":true } ] } @@ -36,22 +42,14 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":2, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "ip":"192.168.4.3", "afi":"ipv4", - "interfaceIndex":3, "interfaceName":"tor2-eth1", "active":true - }, - { - "flags":0, - "ip":"192.168.5.1", - "afi":"ipv4" } ] } @@ -68,14 +66,11 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":2, "interfaceName":"tor2-eth0", "active":true } @@ -94,23 +89,20 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":3, "interfaceName":"tor2-eth1", "active":true } ] } ], - "192.168.5.0\/24":[ + "192.168.5.1\/32":[ { - "prefix":"192.168.5.0\/24", + "prefix":"192.168.5.1\/32", "protocol":"bgp", "selected":true, "destSelected":true, @@ -120,29 +112,28 @@ "table":254, "internalStatus":16, "internalFlags":13, - "internalNextHopNum":2, - "internalNextHopActiveNum":1, "nexthops":[ { - "flags":0, + "flags":5, "ip":"192.168.2.1", - "afi":"ipv4" + "afi":"ipv4", + "active":true, + "recursive":true }, { "flags":3, "fib":true, - "ip":"192.168.6.4", + "ip":"192.168.4.3", "afi":"ipv4", - "interfaceIndex":4, - "interfaceName":"tor2-eth2", + "interfaceName":"tor2-eth1", "active":true } ] } ], - "192.168.6.0\/24":[ + "192.168.6.2\/32":[ { - "prefix":"192.168.6.0\/24", + "prefix":"192.168.6.2\/32", "protocol":"connected", "selected":true, "destSelected":true, @@ -152,15 +143,12 @@ "table":254, "internalStatus":16, "internalFlags":8, - "internalNextHopNum":1, - "internalNextHopActiveNum":1, "nexthops":[ { "flags":3, "fib":true, "directlyConnected":true, - "interfaceIndex":4, - "interfaceName":"tor2-eth2", + "interfaceName":"lo", "active":true } ] diff --git a/tests/topotests/bgp_rr_ibgp/tor2/zebra.conf b/tests/topotests/bgp_rr_ibgp/tor2/zebra.conf index 3318cbb196..e1a06b14fc 100644 --- a/tests/topotests/bgp_rr_ibgp/tor2/zebra.conf +++ b/tests/topotests/bgp_rr_ibgp/tor2/zebra.conf @@ -9,5 +9,5 @@ int tor2-eth1 ip addr 192.168.4.2/24 -int tor2-eth2 - ip addr 192.168.6.2/24 +int lo + ip addr 192.168.6.2/32 diff --git a/tests/topotests/pytest.ini b/tests/topotests/pytest.ini index 62c825341f..ade5bfd501 100644 --- a/tests/topotests/pytest.ini +++ b/tests/topotests/pytest.ini @@ -1,6 +1,6 @@ # Skip pytests example directory [pytest] -norecursedirs = .git example-test example-topojson-test lib docker bgp_rr_ibgp +norecursedirs = .git example-test example-topojson-test lib docker [topogen] # Default configuration values -- 2.39.5