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 <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2020-03-28 13:56:42 -04:00
parent 99819027b1
commit a19aca1671
13 changed files with 64 additions and 337 deletions

View File

@ -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,15 +129,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
}

View File

@ -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

View File

@ -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
}
]
}
]
}

View File

@ -1 +0,0 @@
hostname spine2

View File

@ -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

View File

@ -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'])
#####################################################
##

View File

@ -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

View File

@ -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
}
]

View File

@ -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

View File

@ -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

View File

@ -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
}
]

View File

@ -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

View File

@ -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