mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 17:40:04 +00:00
tests: Introduce BFD OSPFv2/v3 topotests
The tests work with the default settings of BFD meaning that bfdd is able to recognize a 'down' link after ~900ms so a route recovery should be visible in the RIB after 1 second. The following topology is used: +---------+ | | eth-rt2 (.1) | RT1 | eth-rt3 (.1) +----------+ 1.1.1.1 +----------+ | | | | | +---------+ | | | | 10.0.2.0/24 | | | | eth-rt1 | (.2) | 10.0.1.0/24 +----+----+ | | | | | RT3 | | | 3.3.3.3 | | | | (.2) | eth-rt1 +----+----+ +----+----+ eth-rt4 | (.1) | | | | RT2 | | | 2.2.2.2 | 10.0.4.0/24 | | | | +----+----+ | (.1) | eth-rt5 eth-rt3 | (.2) | +----+----+ | | | | | RT4 | | | 4.4.4.4 | | | | | +----+----+ | 10.0.3.0/24 eth-rt5 | (.1) | | | | | 10.0.5.0/24 | | | | +---------+ | | | | | +----------+ RT5 +----------+ eth-rt2 (.2) | 5.5.5.5 | eth-rt4 (.2) | | +---------+ Route recovery is tested on RT1. The focus here lies on the two different routes to RT5. Link failures are generated by taking down interfaces via the mininet Python interface on RT2 and RT3. Hence routes are supposed to be adjusted to use RT3 when a link failure happens on RT2 or vice versa. Note that only failure recognition and recovery is "fast". BFD does not monitor a link becoming available again. Signed-off-by: GalaxyGorilla <sascha@netdef.org>
This commit is contained in:
parent
9bcab3130b
commit
da78f4fe92
0
tests/topotests/bfd-ospf-topo1/__init__.py
Normal file
0
tests/topotests/bfd-ospf-topo1/__init__.py
Normal file
9
tests/topotests/bfd-ospf-topo1/rt1/bfdd.conf
Normal file
9
tests/topotests/bfd-ospf-topo1/rt1/bfdd.conf
Normal file
@ -0,0 +1,9 @@
|
||||
log file bfdd.log
|
||||
log timestamp precision 3
|
||||
!
|
||||
debug bfd network
|
||||
debug bfd peer
|
||||
debug bfd zebra
|
||||
!
|
||||
bfd
|
||||
!
|
21
tests/topotests/bfd-ospf-topo1/rt1/ospf6d.conf
Normal file
21
tests/topotests/bfd-ospf-topo1/rt1/ospf6d.conf
Normal file
@ -0,0 +1,21 @@
|
||||
log file ospf6d.log
|
||||
log timestamp precision 3
|
||||
!
|
||||
hostname rt1
|
||||
!
|
||||
password 1
|
||||
!
|
||||
interface eth-rt2
|
||||
ipv6 ospf6 network broadcast
|
||||
ipv6 ospf6 bfd
|
||||
!
|
||||
interface eth-rt3
|
||||
ipv6 ospf6 network broadcast
|
||||
ipv6 ospf6 bfd
|
||||
!
|
||||
router ospf6
|
||||
ospf6 router-id 1.1.1.1
|
||||
interface eth-rt2 area 0.0.0.0
|
||||
interface eth-rt3 area 0.0.0.0
|
||||
redistribute connected
|
||||
!
|
26
tests/topotests/bfd-ospf-topo1/rt1/ospfd.conf
Normal file
26
tests/topotests/bfd-ospf-topo1/rt1/ospfd.conf
Normal file
@ -0,0 +1,26 @@
|
||||
log file ospfd.log
|
||||
log timestamp precision 3
|
||||
!
|
||||
hostname rt1
|
||||
!
|
||||
password 1
|
||||
!
|
||||
debug ospf event
|
||||
debug ospf zebra
|
||||
!
|
||||
interface lo
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt2
|
||||
ip ospf area 0.0.0.0
|
||||
ip ospf bfd
|
||||
!
|
||||
interface eth-rt3
|
||||
ip ospf area 0.0.0.0
|
||||
ip ospf bfd
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 1.1.1.1
|
||||
passive interface lo
|
||||
router-info area 0.0.0.0
|
||||
!
|
74
tests/topotests/bfd-ospf-topo1/rt1/step1/show_ip_route.ref
Normal file
74
tests/topotests/bfd-ospf-topo1/rt1/step1/show_ip_route.ref
Normal file
@ -0,0 +1,74 @@
|
||||
{
|
||||
"2.2.2.2\/32":[
|
||||
{
|
||||
"prefix":"2.2.2.2\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3.3.3.3\/32":[
|
||||
{
|
||||
"prefix":"3.3.3.3\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4.4.4.4\/32":[
|
||||
{
|
||||
"prefix":"4.4.4.4\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"5.5.5.5\/32":[
|
||||
{
|
||||
"prefix":"5.5.5.5\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
70
tests/topotests/bfd-ospf-topo1/rt1/step1/show_ipv6_route.ref
Normal file
70
tests/topotests/bfd-ospf-topo1/rt1/step1/show_ipv6_route.ref
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"::ffff:202:202\/128":[
|
||||
{
|
||||
"prefix":"::ffff:202:202\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:303:303\/128":[
|
||||
{
|
||||
"prefix":"::ffff:303:303\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:404:404\/128":[
|
||||
{
|
||||
"prefix":"::ffff:404:404\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:505:505\/128":[
|
||||
{
|
||||
"prefix":"::ffff:505:505\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
26
tests/topotests/bfd-ospf-topo1/rt1/step2/show_bfd_peers.ref
Normal file
26
tests/topotests/bfd-ospf-topo1/rt1/step2/show_bfd_peers.ref
Normal file
@ -0,0 +1,26 @@
|
||||
[
|
||||
{
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
@ -0,0 +1,28 @@
|
||||
[
|
||||
{
|
||||
"peer": "10.0.2.2",
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"peer": "10.0.1.2",
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"peer": "10.0.2.2",
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt3",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"peer": "10.0.1.2",
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt2",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
@ -0,0 +1,74 @@
|
||||
{
|
||||
"2.2.2.2\/32":[
|
||||
{
|
||||
"prefix":"2.2.2.2\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3.3.3.3\/32":[
|
||||
{
|
||||
"prefix":"3.3.3.3\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4.4.4.4\/32":[
|
||||
{
|
||||
"prefix":"4.4.4.4\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"5.5.5.5\/32":[
|
||||
{
|
||||
"prefix":"5.5.5.5\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
{
|
||||
"2.2.2.2\/32":[
|
||||
{
|
||||
"prefix":"2.2.2.2\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3.3.3.3\/32":[
|
||||
{
|
||||
"prefix":"3.3.3.3\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4.4.4.4\/32":[
|
||||
{
|
||||
"prefix":"4.4.4.4\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"5.5.5.5\/32":[
|
||||
{
|
||||
"prefix":"5.5.5.5\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.2.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
{
|
||||
"2.2.2.2\/32":[
|
||||
{
|
||||
"prefix":"2.2.2.2\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3.3.3.3\/32":[
|
||||
{
|
||||
"prefix":"3.3.3.3\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4.4.4.4\/32":[
|
||||
{
|
||||
"prefix":"4.4.4.4\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"5.5.5.5\/32":[
|
||||
{
|
||||
"prefix":"5.5.5.5\/32",
|
||||
"protocol":"ospf",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"ip":"10.0.1.2",
|
||||
"afi":"ipv4",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
{
|
||||
"::ffff:202:202\/128":[
|
||||
{
|
||||
"prefix":"::ffff:202:202\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:303:303\/128":[
|
||||
{
|
||||
"prefix":"::ffff:303:303\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:404:404\/128":[
|
||||
{
|
||||
"prefix":"::ffff:404:404\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:505:505\/128":[
|
||||
{
|
||||
"prefix":"::ffff:505:505\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
{
|
||||
"::ffff:202:202\/128":[
|
||||
{
|
||||
"prefix":"::ffff:202:202\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:303:303\/128":[
|
||||
{
|
||||
"prefix":"::ffff:303:303\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:404:404\/128":[
|
||||
{
|
||||
"prefix":"::ffff:404:404\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:505:505\/128":[
|
||||
{
|
||||
"prefix":"::ffff:505:505\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt3",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
{
|
||||
"::ffff:202:202\/128":[
|
||||
{
|
||||
"prefix":"::ffff:202:202\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:303:303\/128":[
|
||||
{
|
||||
"prefix":"::ffff:303:303\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:404:404\/128":[
|
||||
{
|
||||
"prefix":"::ffff:404:404\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"::ffff:505:505\/128":[
|
||||
{
|
||||
"prefix":"::ffff:505:505\/128",
|
||||
"protocol":"ospf6",
|
||||
"selected":true,
|
||||
"destSelected":true,
|
||||
"installed":true,
|
||||
"nexthops":[
|
||||
{
|
||||
"fib":true,
|
||||
"afi":"ipv6",
|
||||
"interfaceName":"eth-rt2",
|
||||
"active":true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
25
tests/topotests/bfd-ospf-topo1/rt1/zebra.conf
Normal file
25
tests/topotests/bfd-ospf-topo1/rt1/zebra.conf
Normal file
@ -0,0 +1,25 @@
|
||||
log file zebra.log
|
||||
log timestamp precision 3
|
||||
!
|
||||
hostname rt1
|
||||
!
|
||||
debug zebra kernel
|
||||
debug zebra packet
|
||||
debug zebra events
|
||||
debug zebra rib
|
||||
!
|
||||
interface lo
|
||||
ip address 1.1.1.1/32
|
||||
ipv6 address ::ffff:0101:0101/128
|
||||
!
|
||||
interface eth-rt2
|
||||
ip address 10.0.1.1/24
|
||||
!
|
||||
interface eth-rt3
|
||||
ip address 10.0.2.1/24
|
||||
!
|
||||
ip forwarding
|
||||
ipv6 forwarding
|
||||
!
|
||||
line vty
|
||||
!
|
7
tests/topotests/bfd-ospf-topo1/rt2/bfdd.conf
Normal file
7
tests/topotests/bfd-ospf-topo1/rt2/bfdd.conf
Normal file
@ -0,0 +1,7 @@
|
||||
!
|
||||
debug bfd network
|
||||
debug bfd peer
|
||||
debug bfd zebra
|
||||
!
|
||||
bfd
|
||||
!
|
19
tests/topotests/bfd-ospf-topo1/rt2/ospf6d.conf
Normal file
19
tests/topotests/bfd-ospf-topo1/rt2/ospf6d.conf
Normal file
@ -0,0 +1,19 @@
|
||||
log file ospf6d.log
|
||||
!
|
||||
hostname rt2
|
||||
!
|
||||
password 1
|
||||
!
|
||||
interface eth-rt1
|
||||
ipv6 ospf6 network broadcast
|
||||
ipv6 ospf6 bfd
|
||||
!
|
||||
interface eth-rt5
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
router ospf6
|
||||
ospf6 router-id 2.2.2.2
|
||||
interface eth-rt1 area 0.0.0.0
|
||||
interface eth-rt5 area 0.0.0.0
|
||||
redistribute connected
|
||||
!
|
24
tests/topotests/bfd-ospf-topo1/rt2/ospfd.conf
Normal file
24
tests/topotests/bfd-ospf-topo1/rt2/ospfd.conf
Normal file
@ -0,0 +1,24 @@
|
||||
log file ospfd.log
|
||||
!
|
||||
hostname rt2
|
||||
!
|
||||
password 1
|
||||
!
|
||||
debug ospf event
|
||||
debug ospf zebra
|
||||
!
|
||||
interface lo
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt1
|
||||
ip ospf area 0.0.0.0
|
||||
ip ospf bfd
|
||||
!
|
||||
interface eth-rt5
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 2.2.2.2
|
||||
passive interface lo
|
||||
router-info area 0.0.0.0
|
||||
!
|
14
tests/topotests/bfd-ospf-topo1/rt2/step2/show_bfd_peers.ref
Normal file
14
tests/topotests/bfd-ospf-topo1/rt2/step2/show_bfd_peers.ref
Normal file
@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"interface": "eth-rt1",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt1",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
22
tests/topotests/bfd-ospf-topo1/rt2/zebra.conf
Normal file
22
tests/topotests/bfd-ospf-topo1/rt2/zebra.conf
Normal file
@ -0,0 +1,22 @@
|
||||
log file zebra.log
|
||||
!
|
||||
hostname rt2
|
||||
!
|
||||
debug zebra kernel
|
||||
debug zebra packet
|
||||
!
|
||||
interface lo
|
||||
ip address 2.2.2.2/32
|
||||
ipv6 address ::ffff:0202:0202/128
|
||||
!
|
||||
interface eth-rt1
|
||||
ip address 10.0.1.2/24
|
||||
!
|
||||
interface eth-rt5
|
||||
ip address 10.0.3.1/24
|
||||
!
|
||||
ip forwarding
|
||||
ipv6 forwarding
|
||||
!
|
||||
line vty
|
||||
!
|
7
tests/topotests/bfd-ospf-topo1/rt3/bfdd.conf
Normal file
7
tests/topotests/bfd-ospf-topo1/rt3/bfdd.conf
Normal file
@ -0,0 +1,7 @@
|
||||
!
|
||||
debug bfd network
|
||||
debug bfd peer
|
||||
debug bfd zebra
|
||||
!
|
||||
bfd
|
||||
!
|
19
tests/topotests/bfd-ospf-topo1/rt3/ospf6d.conf
Normal file
19
tests/topotests/bfd-ospf-topo1/rt3/ospf6d.conf
Normal file
@ -0,0 +1,19 @@
|
||||
log file ospf6d.log
|
||||
!
|
||||
hostname rt3
|
||||
!
|
||||
password 1
|
||||
!
|
||||
interface eth-rt1
|
||||
ipv6 ospf6 network broadcast
|
||||
ipv6 ospf6 bfd
|
||||
!
|
||||
interface eth-rt4
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
router ospf6
|
||||
ospf6 router-id 3.3.3.3
|
||||
interface eth-rt1 area 0.0.0.0
|
||||
interface eth-rt4 area 0.0.0.0
|
||||
redistribute connected
|
||||
!
|
24
tests/topotests/bfd-ospf-topo1/rt3/ospfd.conf
Normal file
24
tests/topotests/bfd-ospf-topo1/rt3/ospfd.conf
Normal file
@ -0,0 +1,24 @@
|
||||
log file ospfd.log
|
||||
!
|
||||
hostname rt3
|
||||
!
|
||||
password 1
|
||||
!
|
||||
debug ospf event
|
||||
debug ospf zebra
|
||||
!
|
||||
interface lo
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt1
|
||||
ip ospf area 0.0.0.0
|
||||
ip ospf bfd
|
||||
!
|
||||
interface eth-rt4
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 3.3.3.3
|
||||
passive interface lo
|
||||
router-info area 0.0.0.0
|
||||
!
|
14
tests/topotests/bfd-ospf-topo1/rt3/step2/show_bfd_peers.ref
Normal file
14
tests/topotests/bfd-ospf-topo1/rt3/step2/show_bfd_peers.ref
Normal file
@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"interface": "eth-rt1",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
},
|
||||
{
|
||||
"interface": "eth-rt1",
|
||||
"status": "up",
|
||||
"diagnostic": "ok",
|
||||
"remote-diagnostic": "ok"
|
||||
}
|
||||
]
|
22
tests/topotests/bfd-ospf-topo1/rt3/zebra.conf
Normal file
22
tests/topotests/bfd-ospf-topo1/rt3/zebra.conf
Normal file
@ -0,0 +1,22 @@
|
||||
log file zebra.log
|
||||
!
|
||||
hostname rt3
|
||||
!
|
||||
debug zebra kernel
|
||||
debug zebra packet
|
||||
!
|
||||
interface lo
|
||||
ip address 3.3.3.3/32
|
||||
ipv6 address ::ffff:0303:0303/128
|
||||
!
|
||||
interface eth-rt1
|
||||
ip address 10.0.2.2/24
|
||||
!
|
||||
interface eth-rt4
|
||||
ip address 10.0.4.1/24
|
||||
!
|
||||
ip forwarding
|
||||
ipv6 forwarding
|
||||
!
|
||||
line vty
|
||||
!
|
5
tests/topotests/bfd-ospf-topo1/rt4/bfdd.conf
Normal file
5
tests/topotests/bfd-ospf-topo1/rt4/bfdd.conf
Normal file
@ -0,0 +1,5 @@
|
||||
!
|
||||
debug bfd network
|
||||
debug bfd peer
|
||||
debug bfd zebra
|
||||
!
|
18
tests/topotests/bfd-ospf-topo1/rt4/ospf6d.conf
Normal file
18
tests/topotests/bfd-ospf-topo1/rt4/ospf6d.conf
Normal file
@ -0,0 +1,18 @@
|
||||
log file ospf6d.log
|
||||
!
|
||||
hostname rt4
|
||||
!
|
||||
password 1
|
||||
!
|
||||
interface eth-rt3
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
interface eth-rt5
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
router ospf6
|
||||
ospf6 router-id 4.4.4.4
|
||||
interface eth-rt3 area 0.0.0.0
|
||||
interface eth-rt5 area 0.0.0.0
|
||||
redistribute connected
|
||||
!
|
23
tests/topotests/bfd-ospf-topo1/rt4/ospfd.conf
Normal file
23
tests/topotests/bfd-ospf-topo1/rt4/ospfd.conf
Normal file
@ -0,0 +1,23 @@
|
||||
log file ospfd.log
|
||||
!
|
||||
hostname rt4
|
||||
!
|
||||
password 1
|
||||
!
|
||||
debug ospf event
|
||||
debug ospf zebra
|
||||
!
|
||||
interface lo
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt3
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt5
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 4.4.4.4
|
||||
passive interface lo
|
||||
router-info area 0.0.0.0
|
||||
!
|
22
tests/topotests/bfd-ospf-topo1/rt4/zebra.conf
Normal file
22
tests/topotests/bfd-ospf-topo1/rt4/zebra.conf
Normal file
@ -0,0 +1,22 @@
|
||||
log file zebra.log
|
||||
!
|
||||
hostname rt4
|
||||
!
|
||||
debug zebra kernel
|
||||
debug zebra packet
|
||||
!
|
||||
interface lo
|
||||
ip address 4.4.4.4/32
|
||||
ipv6 address ::ffff:0404:0404/128
|
||||
!
|
||||
interface eth-rt3
|
||||
ip address 10.0.4.2/24
|
||||
!
|
||||
interface eth-rt5
|
||||
ip address 10.0.5.1/24
|
||||
!
|
||||
ip forwarding
|
||||
ipv6 forwarding
|
||||
!
|
||||
line vty
|
||||
!
|
5
tests/topotests/bfd-ospf-topo1/rt5/bfdd.conf
Normal file
5
tests/topotests/bfd-ospf-topo1/rt5/bfdd.conf
Normal file
@ -0,0 +1,5 @@
|
||||
!
|
||||
debug bfd network
|
||||
debug bfd peer
|
||||
debug bfd zebra
|
||||
!
|
18
tests/topotests/bfd-ospf-topo1/rt5/ospf6d.conf
Normal file
18
tests/topotests/bfd-ospf-topo1/rt5/ospf6d.conf
Normal file
@ -0,0 +1,18 @@
|
||||
log file ospf6d.log
|
||||
!
|
||||
hostname rt5
|
||||
!
|
||||
password 1
|
||||
!
|
||||
interface eth-rt2
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
interface eth-rt4
|
||||
ipv6 ospf6 network broadcast
|
||||
!
|
||||
router ospf6
|
||||
ospf6 router-id 5.5.5.5
|
||||
interface eth-rt2 area 0.0.0.0
|
||||
interface eth-rt4 area 0.0.0.0
|
||||
redistribute connected
|
||||
!
|
23
tests/topotests/bfd-ospf-topo1/rt5/ospfd.conf
Normal file
23
tests/topotests/bfd-ospf-topo1/rt5/ospfd.conf
Normal file
@ -0,0 +1,23 @@
|
||||
log file ospfd.log
|
||||
!
|
||||
hostname rt5
|
||||
!
|
||||
password 1
|
||||
!
|
||||
debug ospf event
|
||||
debug ospf zebra
|
||||
!
|
||||
interface lo
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt2
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
interface eth-rt4
|
||||
ip ospf area 0.0.0.0
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 5.5.5.5
|
||||
passive interface lo
|
||||
router-info area 0.0.0.0
|
||||
!
|
22
tests/topotests/bfd-ospf-topo1/rt5/zebra.conf
Normal file
22
tests/topotests/bfd-ospf-topo1/rt5/zebra.conf
Normal file
@ -0,0 +1,22 @@
|
||||
log file zebra.log
|
||||
!
|
||||
hostname rt5
|
||||
!
|
||||
debug zebra kernel
|
||||
debug zebra packet
|
||||
!
|
||||
interface lo
|
||||
ip address 5.5.5.5/32
|
||||
ipv6 address ::ffff:0505:0505/128
|
||||
!
|
||||
interface eth-rt2
|
||||
ip address 10.0.3.2/24
|
||||
!
|
||||
interface eth-rt4
|
||||
ip address 10.0.5.2/24
|
||||
!
|
||||
ip forwarding
|
||||
ipv6 forwarding
|
||||
!
|
||||
line vty
|
||||
!
|
307
tests/topotests/bfd-ospf-topo1/test_bfd_ospf_topo1.py
Executable file
307
tests/topotests/bfd-ospf-topo1/test_bfd_ospf_topo1.py
Executable file
@ -0,0 +1,307 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#
|
||||
# test_bfd_ospf_topo1.py
|
||||
# Part of NetDEF Topology Tests
|
||||
#
|
||||
# Copyright (c) 2020 by
|
||||
# Network Device Education Foundation, Inc. ("NetDEF")
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software
|
||||
# for any purpose with or without fee is hereby granted, provided
|
||||
# that the above copyright notice and this permission notice appear
|
||||
# in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
|
||||
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
# OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
"""
|
||||
test_bfd_ospf_topo1.py:
|
||||
|
||||
+---------+
|
||||
| |
|
||||
eth-rt2 (.1) | RT1 | eth-rt3 (.1)
|
||||
+----------+ 1.1.1.1 +----------+
|
||||
| | | |
|
||||
| +---------+ |
|
||||
| |
|
||||
| 10.0.2.0/24 |
|
||||
| |
|
||||
| eth-rt1 | (.2)
|
||||
| 10.0.1.0/24 +----+----+
|
||||
| | |
|
||||
| | RT3 |
|
||||
| | 3.3.3.3 |
|
||||
| | |
|
||||
(.2) | eth-rt1 +----+----+
|
||||
+----+----+ eth-rt4 | (.1)
|
||||
| | |
|
||||
| RT2 | |
|
||||
| 2.2.2.2 | 10.0.4.0/24 |
|
||||
| | |
|
||||
+----+----+ |
|
||||
(.1) | eth-rt5 eth-rt3 | (.2)
|
||||
| +----+----+
|
||||
| | |
|
||||
| | RT4 |
|
||||
| | 4.4.4.4 |
|
||||
| | |
|
||||
| +----+----+
|
||||
| 10.0.3.0/24 eth-rt5 | (.1)
|
||||
| |
|
||||
| |
|
||||
| 10.0.5.0/24 |
|
||||
| |
|
||||
| +---------+ |
|
||||
| | | |
|
||||
+----------+ RT5 +----------+
|
||||
eth-rt2 (.2) | 5.5.5.5 | eth-rt4 (.2)
|
||||
| |
|
||||
+---------+
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import pytest
|
||||
import json
|
||||
import re
|
||||
from time import sleep
|
||||
from time import time
|
||||
from functools import partial
|
||||
|
||||
# Save the Current Working Directory to find configuration files.
|
||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||
sys.path.append(os.path.join(CWD, "../"))
|
||||
|
||||
# pylint: disable=C0413
|
||||
# Import topogen and topotest helpers
|
||||
from lib import topotest
|
||||
from lib.topogen import Topogen, TopoRouter, get_topogen
|
||||
from lib.topolog import logger
|
||||
|
||||
# Required to instantiate the topology builder class.
|
||||
from mininet.topo import Topo
|
||||
|
||||
|
||||
class TemplateTopo(Topo):
|
||||
"Test topology builder"
|
||||
|
||||
def build(self, *_args, **_opts):
|
||||
"Build function"
|
||||
tgen = get_topogen(self)
|
||||
|
||||
#
|
||||
# Define FRR Routers
|
||||
#
|
||||
for router in ["rt1", "rt2", "rt3", "rt4", "rt5"]:
|
||||
tgen.add_router(router)
|
||||
|
||||
#
|
||||
# Define connections
|
||||
#
|
||||
switch = tgen.add_switch("s1")
|
||||
switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
|
||||
switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
|
||||
|
||||
switch = tgen.add_switch("s2")
|
||||
switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
|
||||
switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
|
||||
|
||||
switch = tgen.add_switch("s3")
|
||||
switch.add_link(tgen.gears["rt2"], nodeif="eth-rt5")
|
||||
switch.add_link(tgen.gears["rt5"], nodeif="eth-rt2")
|
||||
|
||||
switch = tgen.add_switch("s4")
|
||||
switch.add_link(tgen.gears["rt3"], nodeif="eth-rt4")
|
||||
switch.add_link(tgen.gears["rt4"], nodeif="eth-rt3")
|
||||
|
||||
switch = tgen.add_switch("s5")
|
||||
switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
|
||||
switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
|
||||
|
||||
|
||||
def setup_module(mod):
|
||||
"Sets up the pytest environment"
|
||||
tgen = Topogen(TemplateTopo, mod.__name__)
|
||||
tgen.start_topology()
|
||||
|
||||
router_list = tgen.routers()
|
||||
|
||||
# For all registered routers, load the zebra configuration file
|
||||
for rname, router in router_list.iteritems():
|
||||
router.load_config(
|
||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_BFD, os.path.join(CWD, "{}/bfdd.conf".format(rname))
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_OSPF, os.path.join(CWD, "{}/ospfd.conf".format(rname))
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_OSPF6, os.path.join(CWD, "{}/ospf6d.conf".format(rname))
|
||||
)
|
||||
|
||||
tgen.start_router()
|
||||
|
||||
|
||||
def teardown_module(mod):
|
||||
"Teardown the pytest environment"
|
||||
tgen = get_topogen()
|
||||
|
||||
# This function tears down the whole topology.
|
||||
tgen.stop_topology()
|
||||
|
||||
|
||||
def print_cmd_result(rname, command):
|
||||
print(get_topogen().gears[rname].vtysh_cmd(command, isjson=False))
|
||||
|
||||
|
||||
def router_compare_json_output(rname, command, reference, count=120, wait=0.5):
|
||||
"Compare router JSON output"
|
||||
|
||||
logger.info('Comparing router "%s" "%s" output', rname, command)
|
||||
|
||||
tgen = get_topogen()
|
||||
filename = "{}/{}/{}".format(CWD, rname, reference)
|
||||
expected = json.loads(open(filename).read())
|
||||
|
||||
# Run test function until we get an result. Wait at most 60 seconds.
|
||||
test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected)
|
||||
_, diff = topotest.run_and_expect(test_func, None, count=count, wait=wait)
|
||||
assertmsg = '"{}" JSON output mismatches the expected result'.format(rname)
|
||||
assert diff is None, assertmsg
|
||||
|
||||
|
||||
## TEST STEPS
|
||||
|
||||
|
||||
def test_rib_ospf_step1():
|
||||
logger.info("Test (step 1): verify RIB for OSPF")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
router_compare_json_output(
|
||||
"rt1", "show ip route ospf json", "step1/show_ip_route.ref"
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ipv6 route ospf json", "step1/show_ipv6_route.ref"
|
||||
)
|
||||
|
||||
|
||||
def test_bfd_ospf_sessions_step2():
|
||||
logger.info("Test (step 2): verify BFD peers for OSPF")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
# BFD is just used on three routers
|
||||
for rt in ["rt1", "rt2", "rt3"]:
|
||||
router_compare_json_output(
|
||||
rt, "show bfd peers json", "step2/show_bfd_peers.ref"
|
||||
)
|
||||
|
||||
|
||||
def test_bfd_ospf_interface_failure_rt2_step3():
|
||||
logger.info("Test (step 3): Check failover handling with RT2 down")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
# Let's kill the interface on rt2 and see what happens with the RIB and BFD on rt1
|
||||
tgen.gears["rt2"].link_enable("eth-rt1", enabled=False)
|
||||
|
||||
# By default BFD provides a recovery time of 900ms plus jitter, so let's wait
|
||||
# initial 2 seconds to let the CI not suffer.
|
||||
# TODO: add check for array size
|
||||
sleep(2)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ip route ospf json", "step3/show_ip_route_rt2_down.ref", 1, 0
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ipv6 route ospf json", "step3/show_ipv6_route_rt2_down.ref", 1, 0
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show bfd peers json", "step3/show_bfd_peers_rt2_down.ref", 1, 0
|
||||
)
|
||||
|
||||
# Check recovery, this can take some time
|
||||
tgen.gears["rt2"].link_enable("eth-rt1", enabled=True)
|
||||
|
||||
router_compare_json_output(
|
||||
"rt1", "show ip route ospf json", "step3/show_ip_route_healthy.ref"
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ipv6 route ospf json", "step3/show_ipv6_route_healthy.ref"
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show bfd peers json", "step3/show_bfd_peers_healthy.ref"
|
||||
)
|
||||
|
||||
|
||||
def test_bfd_ospf_interface_failure_rt3_step3():
|
||||
logger.info("Test (step 3): Check failover handling with RT3 down")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
# Let's kill the interface on rt3 and see what happens with the RIB and BFD on rt1
|
||||
tgen.gears["rt3"].link_enable("eth-rt1", enabled=False)
|
||||
|
||||
# By default BFD provides a recovery time of 900ms plus jitter, so let's wait
|
||||
# initial 2 seconds to let the CI not suffer.
|
||||
# TODO: add check for array size
|
||||
sleep(2)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ip route ospf json", "step3/show_ip_route_rt3_down.ref", 1, 0
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ipv6 route ospf json", "step3/show_ipv6_route_rt3_down.ref", 1, 0
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show bfd peers json", "step3/show_bfd_peers_rt3_down.ref", 1, 0
|
||||
)
|
||||
|
||||
# Check recovery, this can take some time
|
||||
tgen.gears["rt3"].link_enable("eth-rt1", enabled=True)
|
||||
|
||||
router_compare_json_output(
|
||||
"rt1", "show ip route ospf json", "step3/show_ip_route_healthy.ref"
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show ipv6 route ospf json", "step3/show_ipv6_route_healthy.ref"
|
||||
)
|
||||
router_compare_json_output(
|
||||
"rt1", "show bfd peers json", "step3/show_bfd_peers_healthy.ref"
|
||||
)
|
||||
|
||||
|
||||
def test_memory_leak():
|
||||
"Run the memory leak test and report results."
|
||||
tgen = get_topogen()
|
||||
if not tgen.is_memleak_enabled():
|
||||
pytest.skip("Memory leak test/report is disabled")
|
||||
|
||||
tgen.report_memory_leaks()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = ["-s"] + sys.argv[1:]
|
||||
sys.exit(pytest.main(args))
|
Loading…
Reference in New Issue
Block a user