]> git.proxmox.com Git - mirror_frr.git/blobdiff - tests/topotests/bgp_conditional_advertisement/test_bgp_conditional_advertisement.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_conditional_advertisement / test_bgp_conditional_advertisement.py
index e9b393ba7f8b4b260d3f0e50e9838089159cd2f1..0128c883491699c560de3f78e49919edc60f0602 100644 (file)
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+# SPDX-License-Identifier: ISC
 
 #
 # test_bgp_conditional_advertisement.py
@@ -7,20 +8,6 @@
 # Samsung R&D Institute India - Bangalore.
 # Madhurilatha Kuruganti
 #
-# 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 BGP conditional advertisement functionality.
@@ -43,10 +30,15 @@ TC21: exist-map routes present in R2's BGP table.
       advertise-map routes present in R2's BGP table are advertised to R3.
 TC22: exist-map routes not present in R2's BGP table
       advertise-map routes present in R2's BGP table are withdrawn from R3.
+TC23: advertise-map with exist-map configuration is removed from a peer
+      send normal BGP update to advertise previously withdrawn routes if any.
+
 TC31: non-exist-map routes not present in R2's BGP table
       advertise-map routes present in R2's BGP table are advertised to R3.
 TC32: non-exist-map routes present in R2's BGP table
       advertise-map routes present in R2's BGP table are withdrawn from R3.
+TC33: advertise-map with non-exist-map configuration is removed from a peer
+      send normal BGP update to advertisepreviously withdrawn routes if any.
 
 TC41: non-exist-map route-map configuration removed in R2.
       advertise-map routes present in R2's BGP table are advertised to R3.
@@ -197,11 +189,203 @@ def teardown_module(mod):
     logger.info("=" * 40)
 
 
-def test_bgp_conditional_advertisement():
-    """
-    Test BGP conditional advertisement functionality.
-    """
+def all_routes_advertised(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": [{"protocol": "bgp"}],
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": [{"protocol": "bgp"}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def all_routes_withdrawn(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": None,
+        "192.0.2.5/32": None,
+        "10.139.224.0/20": None,
+        "203.0.113.1/32": None,
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def default_route_withdrawn(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": [{"protocol": "bgp"}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
+# BGP conditional advertisement with route-maps
+# EXIST-MAP, ADV-MAP-1 and RMAP-1
+def exist_map_routes_present(router):
+    return all_routes_advertised(router)
+
+
+def exist_map_routes_not_present(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": None,
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": None,
+        "203.0.113.1/32": [{"protocol": "bgp"}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def non_exist_map_routes_present(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": [{"protocol": "bgp"}],
+        "192.0.2.1/32": None,
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": None,
+        "203.0.113.1/32": [{"protocol": "bgp"}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def non_exist_map_routes_not_present(router):
+    return default_route_withdrawn(router)
+
+
+def exist_map_no_condition_route_map(router):
+    return non_exist_map_routes_present(router)
+
+
+def non_exist_map_no_condition_route_map(router):
+    return all_routes_advertised(router)
+
+
+def exist_map_routes_present_rmap_filter(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": None,
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": None,
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def exist_map_routes_present_no_rmap_filter(router):
+    return all_routes_advertised(router)
+
+
+def non_exist_map_routes_present_rmap_filter(router):
+    return all_routes_withdrawn(router)
+
+
+def non_exist_map_routes_present_no_rmap_filter(router):
+    return non_exist_map_routes_present(router)
+
+
+def exist_map_routes_not_present_rmap_filter(router):
+    return all_routes_withdrawn(router)
+
+
+def exist_map_routes_not_present_no_rmap_filter(router):
+    return exist_map_routes_not_present(router)
+
+
+def non_exist_map_routes_not_present_rmap_filter(router):
+    return exist_map_routes_present_rmap_filter(router)
+
+
+def non_exist_map_routes_not_present_no_rmap_filter(router):
+    return non_exist_map_routes_not_present(router)
+
+
+# BGP conditional advertisement with route-maps
+# EXIST-MAP, ADV-MAP-2 and RMAP-2
+def exist_map_routes_not_present_rmap2_filter(router):
+    return all_routes_withdrawn(router)
+
+
+def exist_map_routes_not_present_no_rmap2_filter(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": None,
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def non_exist_map_routes_not_present_rmap2_filter(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": None,
+        "192.0.2.5/32": None,
+        "10.139.224.0/20": None,
+        "203.0.113.1/32": [{"protocol": "bgp", "metric": 911}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def non_exist_map_routes_not_present_no_rmap2_filter(router):
+    return non_exist_map_routes_not_present(router)
 
+
+def exist_map_routes_present_rmap2_filter(router):
+    return non_exist_map_routes_not_present_rmap2_filter(router)
+
+
+def exist_map_routes_present_no_rmap2_filter(router):
+    return all_routes_advertised(router)
+
+
+def non_exist_map_routes_present_rmap2_filter(router):
+    return all_routes_withdrawn(router)
+
+
+def non_exist_map_routes_present_no_rmap2_filter(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": [{"protocol": "bgp"}],
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": None,
+    }
+    return topotest.json_cmp(output, expected)
+
+
+def exist_map_routes_present_rmap2_network(router):
+    return non_exist_map_routes_not_present_rmap2_filter(router)
+
+
+def exist_map_routes_present_rmap2_no_network(router):
+    return all_routes_withdrawn(router)
+
+
+def non_exist_map_routes_not_present_rmap2_network(router):
+    return non_exist_map_routes_not_present_rmap2_filter(router)
+
+
+def non_exist_map_routes_not_present_rmap2_no_network(router):
+    return all_routes_withdrawn(router)
+
+
+passed = "PASSED!!!"
+failed = "FAILED!!!"
+
+
+def test_bgp_conditional_advertisement_tc_1_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -210,172 +394,9 @@ def test_bgp_conditional_advertisement():
     router2 = tgen.gears["r2"]
     router3 = tgen.gears["r3"]
 
-    passed = "PASSED!!!"
-    failed = "FAILED!!!"
-
-    def _all_routes_advertised(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": [{"protocol": "bgp"}],
-            "192.0.2.1/32": [{"protocol": "bgp"}],
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": [{"protocol": "bgp"}],
-            "203.0.113.1/32": [{"protocol": "bgp"}],
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _all_routes_withdrawn(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": None,
-            "192.0.2.5/32": None,
-            "10.139.224.0/20": None,
-            "203.0.113.1/32": None,
-        }
-        return topotest.json_cmp(output, expected)
-
-    # BGP conditional advertisement with route-maps
-    # EXIST-MAP, ADV-MAP-1 and RMAP-1
-    def _exist_map_routes_present(router):
-        return _all_routes_advertised(router)
-
-    def _exist_map_routes_not_present(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": None,
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": None,
-            "203.0.113.1/32": [{"protocol": "bgp"}],
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _non_exist_map_routes_present(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": [{"protocol": "bgp"}],
-            "192.0.2.1/32": None,
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": None,
-            "203.0.113.1/32": [{"protocol": "bgp"}],
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _non_exist_map_routes_not_present(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": [{"protocol": "bgp"}],
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": [{"protocol": "bgp"}],
-            "203.0.113.1/32": [{"protocol": "bgp"}],
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _exist_map_no_condition_route_map(router):
-        return _non_exist_map_routes_present(router)
-
-    def _non_exist_map_no_condition_route_map(router):
-        return _all_routes_advertised(router)
-
-    def _exist_map_routes_present_rmap_filter(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": [{"protocol": "bgp"}],
-            "192.0.2.5/32": None,
-            "10.139.224.0/20": [{"protocol": "bgp"}],
-            "203.0.113.1/32": None,
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _exist_map_routes_present_no_rmap_filter(router):
-        return _all_routes_advertised(router)
-
-    def _non_exist_map_routes_present_rmap_filter(router):
-        return _all_routes_withdrawn(router)
-
-    def _non_exist_map_routes_present_no_rmap_filter(router):
-        return _non_exist_map_routes_present(router)
-
-    def _exist_map_routes_not_present_rmap_filter(router):
-        return _all_routes_withdrawn(router)
-
-    def _exist_map_routes_not_present_no_rmap_filter(router):
-        return _exist_map_routes_not_present(router)
-
-    def _non_exist_map_routes_not_present_rmap_filter(router):
-        return _exist_map_routes_present_rmap_filter(router)
-
-    def _non_exist_map_routes_not_present_no_rmap_filter(router):
-        return _non_exist_map_routes_not_present(router)
-
-    # BGP conditional advertisement with route-maps
-    # EXIST-MAP, ADV-MAP-2 and RMAP-2
-    def _exist_map_routes_not_present_rmap2_filter(router):
-        return _all_routes_withdrawn(router)
-
-    def _exist_map_routes_not_present_no_rmap2_filter(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": [{"protocol": "bgp"}],
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": [{"protocol": "bgp"}],
-            "203.0.113.1/32": None,
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _non_exist_map_routes_not_present_rmap2_filter(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": None,
-            "192.0.2.1/32": None,
-            "192.0.2.5/32": None,
-            "10.139.224.0/20": None,
-            "203.0.113.1/32": [{"protocol": "bgp"}],
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _non_exist_map_routes_not_present_no_rmap2_filter(router):
-        return _non_exist_map_routes_not_present(router)
-
-    def _exist_map_routes_present_rmap2_filter(router):
-        return _non_exist_map_routes_not_present_rmap2_filter(router)
-
-    def _exist_map_routes_present_no_rmap2_filter(router):
-        return _all_routes_advertised(router)
-
-    def _non_exist_map_routes_present_rmap2_filter(router):
-        return _all_routes_withdrawn(router)
-
-    def _non_exist_map_routes_present_no_rmap2_filter(router):
-        output = json.loads(router.vtysh_cmd("show ip route json"))
-        expected = {
-            "0.0.0.0/0": [{"protocol": "bgp"}],
-            "192.0.2.1/32": [{"protocol": "bgp"}],
-            "192.0.2.5/32": [{"protocol": "bgp"}],
-            "10.139.224.0/20": [{"protocol": "bgp"}],
-            "203.0.113.1/32": None,
-        }
-        return topotest.json_cmp(output, expected)
-
-    def _exist_map_routes_present_rmap2_network(router):
-        return _non_exist_map_routes_not_present_rmap2_filter(router)
-
-    def _exist_map_routes_present_rmap2_no_network(router):
-        return _all_routes_withdrawn(router)
-
-    def _non_exist_map_routes_not_present_rmap2_network(router):
-        return _non_exist_map_routes_not_present_rmap2_filter(router)
-
-    def _non_exist_map_routes_not_present_rmap2_no_network(router):
-        return _all_routes_withdrawn(router)
-
     # TC11: R3 BGP convergence, without advertise-map configuration.
     # All routes are advertised to R3.
-    test_func = functools.partial(_all_routes_advertised, router3)
+    test_func = functools.partial(all_routes_advertised, router3)
     success, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
 
     msg = 'TC11: "router3" BGP convergence - '
@@ -383,6 +404,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_2_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC21: exist-map routes present in R2's BGP table.
     # advertise-map routes present in R2's BGP table are advertised to R3.
     router2.vtysh_cmd(
@@ -394,7 +425,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present, router3)
+    test_func = functools.partial(exist_map_routes_present, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC21: exist-map routes present in "router2" BGP table - '
@@ -402,6 +433,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_2_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC22: exist-map routes not present in R2's BGP table
     # advertise-map routes present in R2's BGP table are withdrawn from R3.
     router1.vtysh_cmd(
@@ -413,7 +454,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_not_present, router3)
+    test_func = functools.partial(exist_map_routes_not_present, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC22: exist-map routes not present in "router2" BGP table - '
@@ -421,6 +462,45 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_2_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
+    # TC23: advertise-map with exist-map configuration is removed from a peer
+    # send normal BGP update to advertise previously withdrawn routes if any.
+    router2.vtysh_cmd(
+        """
+          configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             no neighbor 10.10.20.3 advertise-map ADV-MAP-1 exist-map EXIST-MAP
+        """
+    )
+
+    test_func = functools.partial(default_route_withdrawn, router3)
+    success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
+
+    msg = "TC23: advertise-map with exist-map configuration is removed from peer - "
+    assert result is None, msg + failed
+
+    logger.info(msg + passed)
+
+
+def test_bgp_conditional_advertisement_tc_3_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC31: non-exist-map routes not present in R2's BGP table
     # advertise-map routes present in R2's BGP table are advertised to R3.
     router2.vtysh_cmd(
@@ -432,7 +512,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_non_exist_map_routes_not_present, router3)
+    test_func = functools.partial(non_exist_map_routes_not_present, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC31: non-exist-map routes not present in "router2" BGP table - '
@@ -440,6 +520,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_3_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC32: non-exist-map routes present in R2's BGP table
     # advertise-map routes present in R2's BGP table are withdrawn from R3.
     router1.vtysh_cmd(
@@ -451,7 +541,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_non_exist_map_routes_present, router3)
+    test_func = functools.partial(non_exist_map_routes_present, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC32: non-exist-map routes present in "router2" BGP table - '
@@ -459,16 +549,60 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_3_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
+    # TC33: advertise-map with non-exist-map configuration is removed from a peer
+    # send normal BGP update to advertisepreviously withdrawn routes if any.
+    router2.vtysh_cmd(
+        """
+          configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             no neighbor 10.10.20.3 advertise-map ADV-MAP-1 non-exist-map EXIST-MAP
+        """
+    )
+
+    test_func = functools.partial(all_routes_advertised, router3)
+    success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
+
+    msg = (
+        "TC33: advertise-map with non-exist-map configuration is removed from a peer - "
+    )
+    assert result is None, msg + failed
+
+    logger.info(msg + passed)
+
+
+def test_bgp_conditional_advertisement_tc_4_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC41: non-exist-map route-map configuration removed in R2.
     # advertise-map routes present in R2's BGP table are advertised to R3.
     router2.vtysh_cmd(
         """
           configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             neighbor 10.10.20.3 advertise-map ADV-MAP-1 non-exist-map EXIST-MAP
            no route-map EXIST-MAP permit 10
         """
     )
 
-    test_func = functools.partial(_non_exist_map_no_condition_route_map, router3)
+    test_func = functools.partial(non_exist_map_no_condition_route_map, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC41: non-exist-map route-map removed in "router2" - '
@@ -476,6 +610,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_4_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC42: exist-map route-map configuration removed in R2
     # advertise-map routes present in R2's BGP table are withdrawn from R3.
     router2.vtysh_cmd(
@@ -487,7 +631,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_no_condition_route_map, router3)
+    test_func = functools.partial(exist_map_no_condition_route_map, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = 'TC42: exist-map route-map removed in "router2" - '
@@ -495,6 +639,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_5_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC51: exist-map routes present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -510,7 +664,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_rmap_filter, router3)
+    test_func = functools.partial(exist_map_routes_present_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC51: exist-map routes present with route-map filter - "
@@ -518,6 +672,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_5_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC52: exist-map routes present in R2's BGP table, no route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -529,7 +693,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_no_rmap_filter, router3)
+    test_func = functools.partial(exist_map_routes_present_no_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC52: exist-map routes present, no route-map filter - "
@@ -537,6 +701,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_5_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC53: non-exist-map routes present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -549,7 +723,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_non_exist_map_routes_present_rmap_filter, router3)
+    test_func = functools.partial(non_exist_map_routes_present_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC53: non-exist-map routes present, with route-map filter - "
@@ -557,6 +731,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_5_4():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC54: non-exist-map routes present in R2's BGP table, no route-map filter.
     # All routes are advertised to R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -568,7 +752,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_non_exist_map_routes_present_no_rmap_filter, router3)
+    test_func = functools.partial(non_exist_map_routes_present_no_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC54: non-exist-map routes present, no route-map filter - "
@@ -576,6 +760,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_6_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC61: exist-map routes not present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 including advertise-map routes.
     router1.vtysh_cmd(
@@ -596,7 +790,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_not_present_rmap_filter, router3)
+    test_func = functools.partial(exist_map_routes_not_present_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC61: exist-map routes not present, route-map filter - "
@@ -604,6 +798,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_6_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC62: exist-map routes not present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -615,7 +819,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_not_present_no_rmap_filter, router3)
+    test_func = functools.partial(exist_map_routes_not_present_no_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC62: exist-map routes not present, no route-map filter - "
@@ -623,6 +827,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_6_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC63: non-exist-map routes not present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -635,9 +849,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(
-        _non_exist_map_routes_not_present_rmap_filter, router3
-    )
+    test_func = functools.partial(non_exist_map_routes_not_present_rmap_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC63: non-exist-map routes not present, route-map filter - "
@@ -645,6 +857,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_6_4():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC64: non-exist-map routes not present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -657,7 +879,7 @@ def test_bgp_conditional_advertisement():
     )
 
     test_func = functools.partial(
-        _non_exist_map_routes_not_present_no_rmap_filter, router3
+        non_exist_map_routes_not_present_no_rmap_filter, router3
     )
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
@@ -666,6 +888,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_7_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC71: exist-map routes present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 except advertise-map routes.
     router1.vtysh_cmd(
@@ -686,7 +918,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_rmap2_filter, router3)
+    test_func = functools.partial(exist_map_routes_present_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC71: exist-map routes present, route-map filter - "
@@ -694,6 +926,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_7_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC72: exist-map routes present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -705,7 +947,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_no_rmap2_filter, router3)
+    test_func = functools.partial(exist_map_routes_present_no_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC72: exist-map routes present, no route-map filter - "
@@ -713,6 +955,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_7_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC73: non-exist-map routes present in R2's BGP table, with route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -725,7 +977,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_non_exist_map_routes_present_rmap2_filter, router3)
+    test_func = functools.partial(non_exist_map_routes_present_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC73: non-exist-map routes present, route-map filter - "
@@ -733,6 +985,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_7_4():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC74: non-exist-map routes present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -744,9 +1006,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(
-        _non_exist_map_routes_present_no_rmap2_filter, router3
-    )
+    test_func = functools.partial(non_exist_map_routes_present_no_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC74: non-exist-map routes present, no route-map filter - "
@@ -754,6 +1014,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_8_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC81: exist-map routes not present in R2's BGP table, with route-map filter.
     # All routes are withdrawn from R3 including advertise-map routes.
     router1.vtysh_cmd(
@@ -774,7 +1044,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_not_present_rmap2_filter, router3)
+    test_func = functools.partial(exist_map_routes_not_present_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC81: exist-map routes not present, route-map filter - "
@@ -782,6 +1052,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_8_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC82: exist-map routes not present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -793,9 +1073,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(
-        _exist_map_routes_not_present_no_rmap2_filter, router3
-    )
+    test_func = functools.partial(exist_map_routes_not_present_no_rmap2_filter, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC82: exist-map routes not present, no route-map filter - "
@@ -803,6 +1081,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_8_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC83: non-exist-map routes not present in R2's BGP table, with route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -816,7 +1104,7 @@ def test_bgp_conditional_advertisement():
     )
 
     test_func = functools.partial(
-        _non_exist_map_routes_not_present_rmap2_filter, router3
+        non_exist_map_routes_not_present_rmap2_filter, router3
     )
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
@@ -825,6 +1113,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_8_4():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC84: non-exist-map routes not present in R2's BGP table, without route-map filter.
     # All routes are advertised to R3 including advertise-map routes.
     router2.vtysh_cmd(
@@ -837,7 +1135,7 @@ def test_bgp_conditional_advertisement():
     )
 
     test_func = functools.partial(
-        _non_exist_map_routes_not_present_no_rmap2_filter, router3
+        non_exist_map_routes_not_present_no_rmap2_filter, router3
     )
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
@@ -846,6 +1144,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_9_1():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC91: exist-map routes present in R2's BGP table, with route-map filter and network.
     # All routes are advertised to R3 including advertise-map routes.
     router1.vtysh_cmd(
@@ -866,7 +1174,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_rmap2_network, router3)
+    test_func = functools.partial(exist_map_routes_present_rmap2_network, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC91: exist-map routes present, route-map filter and network - "
@@ -874,6 +1182,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_9_2():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC92: exist-map routes present in R2's BGP table, with route-map filter and no network.
     # All routes are advertised to R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -885,7 +1203,7 @@ def test_bgp_conditional_advertisement():
         """
     )
 
-    test_func = functools.partial(_exist_map_routes_present_rmap2_no_network, router3)
+    test_func = functools.partial(exist_map_routes_present_rmap2_no_network, router3)
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
     msg = "TC92: exist-map routes present, route-map filter and no network - "
@@ -893,6 +1211,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_9_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC93: non-exist-map routes not present in R2's BGP table, with route-map filter and network.
     # All routes are advertised to R3 including advertise-map routes.
     router1.vtysh_cmd(
@@ -914,7 +1242,7 @@ def test_bgp_conditional_advertisement():
     )
 
     test_func = functools.partial(
-        _non_exist_map_routes_not_present_rmap2_network, router3
+        non_exist_map_routes_not_present_rmap2_network, router3
     )
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
 
@@ -923,6 +1251,16 @@ def test_bgp_conditional_advertisement():
 
     logger.info(msg + passed)
 
+
+def test_bgp_conditional_advertisement_tc_9_4():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
     # TC94: non-exist-map routes not present in R2's BGP table, with route-map filter and no network.
     # All routes are advertised to R3 except advertise-map routes.
     router2.vtysh_cmd(
@@ -935,7 +1273,7 @@ def test_bgp_conditional_advertisement():
     )
 
     test_func = functools.partial(
-        _non_exist_map_routes_not_present_rmap2_no_network, router3
+        non_exist_map_routes_not_present_rmap2_no_network, router3
     )
     success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)