"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
}
"table":254,
"internalStatus":16,
"internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
"nexthops":[
{
"flags":3,
"fib":true,
"directlyConnected":true,
- "interfaceIndex":2,
"interfaceName":"spine1-eth0",
"active":true
}
"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
}
"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,
"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,
"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
+++ /dev/null
-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
+++ /dev/null
-{
- "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
- }
- ]
- }
- ]
-}
+++ /dev/null
-hostname spine2
+++ /dev/null
-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
"""
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
"""
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
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'])
#####################################################
##
hostname tor1
router bgp 99
neighbor 192.168.2.3 remote-as internal
- neighbor 192.168.5.4 remote-as internal
redistribute connected
"table":254,
"internalStatus":16,
"internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
"nexthops":[
{
"flags":3,
"fib":true,
"directlyConnected":true,
- "interfaceIndex":2,
"interfaceName":"tor1-eth0",
"active":true
}
"table":254,
"internalStatus":16,
"internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
"nexthops":[
{
"flags":3,
"fib":true,
"directlyConnected":true,
- "interfaceIndex":3,
"interfaceName":"tor1-eth1",
"active":true
}
{
"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
}
]
}
"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,
"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,
"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
}
]
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
hostname tor2
router bgp 99
neighbor 192.168.4.3 remote-as internal
- neighbor 192.168.6.4 remote-as internal
redistribute connected
{
"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
}
]
}
"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"
}
]
}
"table":254,
"internalStatus":16,
"internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
"nexthops":[
{
"flags":3,
"fib":true,
"directlyConnected":true,
- "interfaceIndex":2,
"interfaceName":"tor2-eth0",
"active":true
}
"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,
"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,
"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
}
]
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
# 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