From 771fdeaf3928970f879e946944fb2ba6a3d7e81a Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Wed, 24 Mar 2021 09:41:04 -0300 Subject: [PATCH] topotests: test BFD static route integration Test that BFD static monitoring works: When BFD session is up the routes are installed in the RIB and distributed with routing protocol (in this case BGP). When the session is down it is removed from RIB and propagated. Signed-off-by: Philippe Guibert Signed-off-by: Rafael Zalamena --- .../bfd_topo3/r3/bfd-static-down.json | 12 +++ tests/topotests/bfd_topo3/r3/bfd-static.json | 13 +++ tests/topotests/bfd_topo3/r3/staticd.conf | 1 + tests/topotests/bfd_topo3/r4/bfd-peers.json | 48 +++++++++- tests/topotests/bfd_topo3/r4/bgpd.conf | 1 + tests/topotests/bfd_topo3/r4/staticd.conf | 2 + tests/topotests/bfd_topo3/r4/zebra.conf | 4 + tests/topotests/bfd_topo3/r5/bfd-peers.json | 23 +++++ tests/topotests/bfd_topo3/r5/bfdd.conf | 11 +++ tests/topotests/bfd_topo3/r5/staticd.conf | 2 + tests/topotests/bfd_topo3/r5/zebra.conf | 10 ++ tests/topotests/bfd_topo3/r6/bfd-peers.json | 46 +++++++++ .../bfd_topo3/r6/bfd-static-down.json | 19 ++++ tests/topotests/bfd_topo3/r6/bfd-static.json | 19 ++++ tests/topotests/bfd_topo3/r6/bfdd.conf | 11 +++ tests/topotests/bfd_topo3/r6/staticd.conf | 5 + tests/topotests/bfd_topo3/r6/zebra.conf | 10 ++ tests/topotests/bfd_topo3/test_bfd_topo3.dot | 22 +++++ tests/topotests/bfd_topo3/test_bfd_topo3.jpg | Bin 34705 -> 42789 bytes tests/topotests/bfd_topo3/test_bfd_topo3.py | 90 ++++++++++++++++++ 20 files changed, 347 insertions(+), 2 deletions(-) create mode 100644 tests/topotests/bfd_topo3/r3/bfd-static-down.json create mode 100644 tests/topotests/bfd_topo3/r3/bfd-static.json create mode 100644 tests/topotests/bfd_topo3/r3/staticd.conf create mode 100644 tests/topotests/bfd_topo3/r4/staticd.conf create mode 100644 tests/topotests/bfd_topo3/r5/bfd-peers.json create mode 100644 tests/topotests/bfd_topo3/r5/bfdd.conf create mode 100644 tests/topotests/bfd_topo3/r5/staticd.conf create mode 100644 tests/topotests/bfd_topo3/r5/zebra.conf create mode 100644 tests/topotests/bfd_topo3/r6/bfd-peers.json create mode 100644 tests/topotests/bfd_topo3/r6/bfd-static-down.json create mode 100644 tests/topotests/bfd_topo3/r6/bfd-static.json create mode 100644 tests/topotests/bfd_topo3/r6/bfdd.conf create mode 100644 tests/topotests/bfd_topo3/r6/staticd.conf create mode 100644 tests/topotests/bfd_topo3/r6/zebra.conf diff --git a/tests/topotests/bfd_topo3/r3/bfd-static-down.json b/tests/topotests/bfd_topo3/r3/bfd-static-down.json new file mode 100644 index 0000000000..60752d3aa1 --- /dev/null +++ b/tests/topotests/bfd_topo3/r3/bfd-static-down.json @@ -0,0 +1,12 @@ +{ + "path-list": { + "ipv4-multicast": [], + "ipv4-unicast": [], + "ipv6-unicast": [ + { + "prefix": "2001:db8:5::\/64", + "vrf": "default", + "installed": false + } + ] + }} diff --git a/tests/topotests/bfd_topo3/r3/bfd-static.json b/tests/topotests/bfd_topo3/r3/bfd-static.json new file mode 100644 index 0000000000..c65060c7b0 --- /dev/null +++ b/tests/topotests/bfd_topo3/r3/bfd-static.json @@ -0,0 +1,13 @@ +{ + "path-list": { + "ipv4-multicast": [], + "ipv4-unicast": [], + "ipv6-unicast": [ + { + "prefix": "2001:db8:5::\/64", + "vrf": "default", + "installed": true + } + ] + } +} diff --git a/tests/topotests/bfd_topo3/r3/staticd.conf b/tests/topotests/bfd_topo3/r3/staticd.conf new file mode 100644 index 0000000000..44f91f3f34 --- /dev/null +++ b/tests/topotests/bfd_topo3/r3/staticd.conf @@ -0,0 +1 @@ +ipv6 route 2001:db8:5::/64 2001:db8:4::3 bfd multi-hop profile slow-tx diff --git a/tests/topotests/bfd_topo3/r4/bfd-peers.json b/tests/topotests/bfd_topo3/r4/bfd-peers.json index 2f41f25c58..4f71d75389 100644 --- a/tests/topotests/bfd_topo3/r4/bfd-peers.json +++ b/tests/topotests/bfd_topo3/r4/bfd-peers.json @@ -19,7 +19,8 @@ "remote-transmit-interval": 2000, "status": "up", "uptime": "*", - "transmit-interval": 2000 + "transmit-interval": 2000, + "vrf": "default" }, { "detect-multiplier": 3, @@ -41,6 +42,49 @@ "remote-transmit-interval": 2000, "status": "up", "uptime": "*", - "transmit-interval": 2000 + "transmit-interval": 2000, + "vrf": "default" + }, + { + "detect-multiplier": 3, + "diagnostic": "ok", + "echo-receive-interval": 50, + "echo-transmit-interval": 0, + "id": "*", + "multihop": false, + "passive-mode": false, + "peer": "192.168.4.3", + "receive-interval": 2000, + "remote-detect-multiplier": 3, + "remote-diagnostic": "ok", + "remote-echo-receive-interval": 50, + "remote-id": "*", + "remote-receive-interval": 2000, + "remote-transmit-interval": 2000, + "status": "up", + "transmit-interval": 2000, + "uptime": "*", + "vrf": "default" + }, + { + "detect-multiplier": 3, + "diagnostic": "ok", + "echo-receive-interval": 50, + "echo-transmit-interval": 0, + "id": "*", + "multihop": false, + "passive-mode": false, + "peer": "192.168.4.2", + "receive-interval": 2000, + "remote-detect-multiplier": 3, + "remote-diagnostic": "ok", + "remote-echo-receive-interval": 50, + "remote-id": "*", + "remote-receive-interval": 2000, + "remote-transmit-interval": 2000, + "status": "up", + "transmit-interval": 2000, + "uptime": "*", + "vrf": "default" } ] diff --git a/tests/topotests/bfd_topo3/r4/bgpd.conf b/tests/topotests/bfd_topo3/r4/bgpd.conf index 0aab6e3017..bfad78a7ad 100644 --- a/tests/topotests/bfd_topo3/r4/bgpd.conf +++ b/tests/topotests/bfd_topo3/r4/bgpd.conf @@ -9,6 +9,7 @@ router bgp 400 neighbor 2001:db8:1::1 bfd profile slow-tx-mh address-family ipv4 unicast redistribute connected + redistribute static exit-address-family address-family ipv6 unicast redistribute connected diff --git a/tests/topotests/bfd_topo3/r4/staticd.conf b/tests/topotests/bfd_topo3/r4/staticd.conf new file mode 100644 index 0000000000..3b1c5bfb66 --- /dev/null +++ b/tests/topotests/bfd_topo3/r4/staticd.conf @@ -0,0 +1,2 @@ +ip route 10.254.254.5/32 192.168.4.2 bfd profile slow-tx +ip route 10.254.254.6/32 192.168.4.3 bfd profile slow-tx diff --git a/tests/topotests/bfd_topo3/r4/zebra.conf b/tests/topotests/bfd_topo3/r4/zebra.conf index bf0cfcf42c..2574941724 100644 --- a/tests/topotests/bfd_topo3/r4/zebra.conf +++ b/tests/topotests/bfd_topo3/r4/zebra.conf @@ -8,3 +8,7 @@ interface r4-eth0 ip address 192.168.3.1/24 ipv6 address 2001:db8:3::1/64 ! +interface r4-eth1 + ip address 192.168.4.1/24 + ipv6 address 2001:db8:4::1/64 +! diff --git a/tests/topotests/bfd_topo3/r5/bfd-peers.json b/tests/topotests/bfd_topo3/r5/bfd-peers.json new file mode 100644 index 0000000000..777b1dd9cc --- /dev/null +++ b/tests/topotests/bfd_topo3/r5/bfd-peers.json @@ -0,0 +1,23 @@ +[ + { + "detect-multiplier": 3, + "diagnostic": "ok", + "echo-receive-interval": 50, + "echo-transmit-interval": 0, + "id": "*", + "multihop": false, + "passive-mode": false, + "peer": "192.168.4.1", + "receive-interval": 2000, + "remote-detect-multiplier": 3, + "remote-diagnostic": "ok", + "remote-echo-receive-interval": 50, + "remote-id": "*", + "remote-receive-interval": 2000, + "remote-transmit-interval": 2000, + "status": "up", + "transmit-interval": 2000, + "uptime": "*", + "vrf": "default" + } +] diff --git a/tests/topotests/bfd_topo3/r5/bfdd.conf b/tests/topotests/bfd_topo3/r5/bfdd.conf new file mode 100644 index 0000000000..6d4483acc4 --- /dev/null +++ b/tests/topotests/bfd_topo3/r5/bfdd.conf @@ -0,0 +1,11 @@ +debug bfd network +debug bfd peer +debug bfd zebra +! +bfd + profile slow-tx + receive-interval 2000 + transmit-interval 2000 + minimum-ttl 250 + ! +! diff --git a/tests/topotests/bfd_topo3/r5/staticd.conf b/tests/topotests/bfd_topo3/r5/staticd.conf new file mode 100644 index 0000000000..9828cffe0c --- /dev/null +++ b/tests/topotests/bfd_topo3/r5/staticd.conf @@ -0,0 +1,2 @@ +ip route 0.0.0.0/0 192.168.4.1 +ip route 10.254.254.4/32 192.168.4.1 bfd profile slow-tx diff --git a/tests/topotests/bfd_topo3/r5/zebra.conf b/tests/topotests/bfd_topo3/r5/zebra.conf new file mode 100644 index 0000000000..f84ce7e7f0 --- /dev/null +++ b/tests/topotests/bfd_topo3/r5/zebra.conf @@ -0,0 +1,10 @@ +ip forwarding +ipv6 forwarding +! +interface lo + ip address 10.254.254.5/32 +! +interface r5-eth0 + ip address 192.168.4.2/24 + ipv6 address 2001:db8:4::2/64 +! diff --git a/tests/topotests/bfd_topo3/r6/bfd-peers.json b/tests/topotests/bfd_topo3/r6/bfd-peers.json new file mode 100644 index 0000000000..4de451d15b --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/bfd-peers.json @@ -0,0 +1,46 @@ +[ + { + "detect-multiplier": 3, + "diagnostic": "ok", + "echo-receive-interval": 50, + "echo-transmit-interval": 0, + "id": "*", + "multihop": false, + "passive-mode": false, + "peer": "192.168.4.1", + "receive-interval": 2000, + "remote-detect-multiplier": 3, + "remote-diagnostic": "ok", + "remote-echo-receive-interval": 50, + "remote-id": "*", + "remote-receive-interval": 2000, + "remote-transmit-interval": 2000, + "status": "up", + "transmit-interval": 2000, + "uptime": "*", + "vrf": "default" + }, + { + "detect-multiplier": 3, + "diagnostic": "ok", + "echo-receive-interval": 50, + "echo-transmit-interval": 0, + "id": "*", + "local": "2001:db8:4::3", + "minimum-ttl": 2, + "multihop": true, + "passive-mode": false, + "peer": "2001:db8:3::2", + "receive-interval": 2000, + "remote-detect-multiplier": 3, + "remote-diagnostic": "ok", + "remote-echo-receive-interval": 50, + "remote-id": "*", + "remote-receive-interval": 2000, + "remote-transmit-interval": 2000, + "status": "up", + "transmit-interval": 2000, + "uptime": "*", + "vrf": "default" + } +] diff --git a/tests/topotests/bfd_topo3/r6/bfd-static-down.json b/tests/topotests/bfd_topo3/r6/bfd-static-down.json new file mode 100644 index 0000000000..4dadff2251 --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/bfd-static-down.json @@ -0,0 +1,19 @@ +{ + "path-list": { + "ipv4-multicast": [], + "ipv4-unicast": [ + { + "installed": true, + "prefix": "10.254.254.4/32", + "vrf": "default" + } + ], + "ipv6-unicast": [ + { + "prefix": "2001:db8:1::\/64", + "vrf": "default", + "installed": false + } + ] + } +} diff --git a/tests/topotests/bfd_topo3/r6/bfd-static.json b/tests/topotests/bfd_topo3/r6/bfd-static.json new file mode 100644 index 0000000000..d042889d50 --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/bfd-static.json @@ -0,0 +1,19 @@ +{ + "path-list": { + "ipv4-multicast": [], + "ipv4-unicast": [ + { + "installed": true, + "prefix": "10.254.254.4/32", + "vrf": "default" + } + ], + "ipv6-unicast": [ + { + "prefix": "2001:db8:1::\/64", + "vrf": "default", + "installed": true + } + ] + } +} diff --git a/tests/topotests/bfd_topo3/r6/bfdd.conf b/tests/topotests/bfd_topo3/r6/bfdd.conf new file mode 100644 index 0000000000..6d4483acc4 --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/bfdd.conf @@ -0,0 +1,11 @@ +debug bfd network +debug bfd peer +debug bfd zebra +! +bfd + profile slow-tx + receive-interval 2000 + transmit-interval 2000 + minimum-ttl 250 + ! +! diff --git a/tests/topotests/bfd_topo3/r6/staticd.conf b/tests/topotests/bfd_topo3/r6/staticd.conf new file mode 100644 index 0000000000..28da508fc2 --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/staticd.conf @@ -0,0 +1,5 @@ +ip route 0.0.0.0/0 192.168.4.1 +ip route 10.254.254.4/32 192.168.4.1 bfd profile slow-tx +! +ipv6 route 2001:db8:3::/64 2001:db8:4::1 +ipv6 route 2001:db8:1::/64 2001:db8:3::2 bfd multi-hop source 2001:db8:4::3 profile slow-tx diff --git a/tests/topotests/bfd_topo3/r6/zebra.conf b/tests/topotests/bfd_topo3/r6/zebra.conf new file mode 100644 index 0000000000..b8f2ea4c03 --- /dev/null +++ b/tests/topotests/bfd_topo3/r6/zebra.conf @@ -0,0 +1,10 @@ +ip forwarding +ipv6 forwarding +! +interface lo + ip address 10.254.254.6/32 +! +interface r6-eth0 + ip address 192.168.4.3/24 + ipv6 address 2001:db8:4::3/64 +! diff --git a/tests/topotests/bfd_topo3/test_bfd_topo3.dot b/tests/topotests/bfd_topo3/test_bfd_topo3.dot index 502cea11f2..8d18783d54 100644 --- a/tests/topotests/bfd_topo3/test_bfd_topo3.dot +++ b/tests/topotests/bfd_topo3/test_bfd_topo3.dot @@ -40,6 +40,18 @@ graph template { fillcolor="#f08080", style=filled, ]; + r5 [ + shape=doubleoctagon + label="r5", + fillcolor="#f08080", + style=filled, + ]; + r6 [ + shape=doubleoctagon + label="r6", + fillcolor="#f08080", + style=filled, + ]; # Switches sw1 [ @@ -60,6 +72,12 @@ graph template { fillcolor="#d0e0d0", style=filled, ]; + sw4 [ + shape=oval, + label="sw4\n192.168.4.0/24\n2001:db8:4::/64", + fillcolor="#d0e0d0", + style=filled, + ]; # Connections r1 -- sw1 [label="eth0\n.1"]; @@ -70,4 +88,8 @@ graph template { r4 -- sw3 [label="eth0\n.1"]; r3 -- sw3 [label="eth2\n.2"]; + + r4 -- sw4 [label="eth1\n.1"]; + r5 -- sw4 [label="eth0\n.2"]; + r6 -- sw4 [label="eth0\n.3"]; } diff --git a/tests/topotests/bfd_topo3/test_bfd_topo3.jpg b/tests/topotests/bfd_topo3/test_bfd_topo3.jpg index 6b532560bf98c04cdfba54b8645f270b7aca1aba..f100eae712481f072e082643680d5ec1e4eb02ef 100644 GIT binary patch literal 42789 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 TbN$EsU#Ii0b{dv^yC44x&C2?+p@5I+EX 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 BW@P{X diff --git a/tests/topotests/bfd_topo3/test_bfd_topo3.py b/tests/topotests/bfd_topo3/test_bfd_topo3.py index 978593e41a..ea9f981d9b 100644 --- a/tests/topotests/bfd_topo3/test_bfd_topo3.py +++ b/tests/topotests/bfd_topo3/test_bfd_topo3.py @@ -51,6 +51,7 @@ def setup_module(mod): "s1": ("r1", "r2"), "s2": ("r2", "r3"), "s3": ("r3", "r4"), + "s4": ("r4", "r5", "r6"), } tgen = Topogen(topodef, mod.__name__) tgen.start_topology() @@ -69,6 +70,10 @@ def setup_module(mod): if os.path.isfile(daemon_file): router.load_config(TopoRouter.RD_BGP, daemon_file) + daemon_file = "{}/{}/staticd.conf".format(CWD, rname) + if os.path.isfile(daemon_file): + router.load_config(TopoRouter.RD_STATIC, daemon_file) + # Initialize all routers. tgen.start_router() @@ -100,6 +105,10 @@ def test_wait_bgp_convergence(): expect_loopback_route("r1", "ip", "10.254.254.3/32", "bgp") # Wait for R1 <-> R4 convergence. expect_loopback_route("r1", "ip", "10.254.254.4/32", "bgp") + # Wait for R1 <-> R5 convergence. + expect_loopback_route("r1", "ip", "10.254.254.5/32", "bgp") + # Wait for R1 <-> R6 convergence. + expect_loopback_route("r1", "ip", "10.254.254.6/32", "bgp") # Wait for R2 <-> R1 convergence. expect_loopback_route("r2", "ip", "10.254.254.1/32", "bgp") @@ -107,6 +116,10 @@ def test_wait_bgp_convergence(): expect_loopback_route("r2", "ip", "10.254.254.3/32", "bgp") # Wait for R2 <-> R4 convergence. expect_loopback_route("r2", "ip", "10.254.254.4/32", "bgp") + # Wait for R2 <-> R5 convergence. + expect_loopback_route("r2", "ip", "10.254.254.5/32", "bgp") + # Wait for R2 <-> R6 convergence. + expect_loopback_route("r2", "ip", "10.254.254.6/32", "bgp") # Wait for R3 <-> R1 convergence. expect_loopback_route("r3", "ip", "10.254.254.1/32", "bgp") @@ -114,6 +127,10 @@ def test_wait_bgp_convergence(): expect_loopback_route("r3", "ip", "10.254.254.2/32", "bgp") # Wait for R3 <-> R4 convergence. expect_loopback_route("r3", "ip", "10.254.254.4/32", "bgp") + # Wait for R3 <-> R5 convergence. + expect_loopback_route("r3", "ip", "10.254.254.5/32", "bgp") + # Wait for R3 <-> R6 convergence. + expect_loopback_route("r3", "ip", "10.254.254.6/32", "bgp") # Wait for R4 <-> R1 convergence. expect_loopback_route("r4", "ip", "10.254.254.1/32", "bgp") @@ -121,6 +138,15 @@ def test_wait_bgp_convergence(): expect_loopback_route("r4", "ip", "10.254.254.2/32", "bgp") # Wait for R4 <-> R3 convergence. expect_loopback_route("r4", "ip", "10.254.254.3/32", "bgp") + # Wait for R4 <-> R5 convergence. + expect_loopback_route("r4", "ip", "10.254.254.5/32", "static") + # Wait for R4 <-> R6 convergence. + expect_loopback_route("r4", "ip", "10.254.254.6/32", "static") + + # Wait for R5 <-> R6 convergence. + expect_loopback_route("r3", "ipv6", "2001:db8:5::/64", "static") + # Wait for R6 <-> R5 convergence. + expect_loopback_route("r6", "ipv6", "2001:db8:1::/64", "static") def test_wait_bfd_convergence(): @@ -149,6 +175,70 @@ def test_wait_bfd_convergence(): expect_bfd_configuration("r2") expect_bfd_configuration("r3") expect_bfd_configuration("r4") + expect_bfd_configuration("r5") + expect_bfd_configuration("r6") + + +def test_static_route_monitoring(): + "Test static route monitoring output." + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + logger.info("test BFD static route status") + + def expect_static_bfd_output(router, filename): + "Load JSON file and compare with 'show bfd peer json'" + logger.info("waiting BFD configuration on router {}".format(router)) + bfd_config = json.loads( + open("{}/{}/{}.json".format(CWD, router, filename)).read() + ) + test_func = partial( + topotest.router_json_cmp, + tgen.gears[router], + "show bfd static route json", + bfd_config, + ) + _, result = topotest.run_and_expect(test_func, None, count=20, wait=1) + assertmsg = '"{}" BFD static route status failure'.format(router) + assert result is None, assertmsg + + expect_static_bfd_output("r3", "bfd-static") + expect_static_bfd_output("r6", "bfd-static") + + logger.info("Setting r4 link down ...") + + tgen.gears["r4"].link_enable("r4-eth0", False) + + expect_static_bfd_output("r3", "bfd-static-down") + expect_static_bfd_output("r6", "bfd-static-down") + + +def test_expect_static_rib_removal(): + "Test that route got removed from RIB (staticd and bgpd)." + + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + def expect_route_missing(router, iptype, route): + "Wait until route is present on RIB for protocol." + logger.info("waiting route {} to disapear in {}".format(route, router)) + test_func = partial( + topotest.router_json_cmp, + tgen.gears[router], + "show {} route json".format(iptype), + {route: None}, + ) + rv, result = topotest.run_and_expect(test_func, None, count=20, wait=1) + assertmsg = '"{}" convergence failure'.format(router) + assert result is None, assertmsg + + expect_route_missing("r1", "ip", "10.254.254.5/32") + expect_route_missing("r2", "ip", "10.254.254.5/32") + expect_route_missing("r3", "ip", "10.254.254.5/32") + expect_route_missing("r3", "ipv6", "2001:db8:5::/64") + expect_route_missing("r6", "ipv6", "2001:db8:1::/64") def teardown_module(_mod):