]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: add a new BGP AIGP topotest
authorEnke Chen <enchen@paloaltonetworks.com>
Thu, 24 Oct 2024 17:30:24 +0000 (10:30 -0700)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Fri, 25 Oct 2024 07:00:47 +0000 (07:00 +0000)
The topotest verifies that a local route is favored irrespective
of its AIGP value.

Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
(cherry picked from commit 1a2c3d684a6a8054eb8cf878955834cbbec6efe1)

tests/topotests/bgp_aigp_rr/r1/bgpd.conf
tests/topotests/bgp_aigp_rr/r2/bgpd.conf
tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py

index 90d34bdf8382c7e0575f786dbd07712a92adc82c..4099a248f128e68daecc4ac668a4a92311c18504 100644 (file)
@@ -18,6 +18,7 @@ router bgp 65001
  neighbor 10.0.0.4 timers connect 1
  neighbor 10.0.0.4 route-reflector-client
  address-family ipv4
+  network 10.0.1.2/32 route-map set-aigp
   neighbor 10.0.0.4 route-map set-nexthop out
  exit-address-family
 !
@@ -25,3 +26,7 @@ route-map set-nexthop permit 10
  set ip next-hop peer-address
 exit
 !
+route-map set-aigp permit 10
+ set aigp 50
+ set weight 0
+!
index 97059fdd333f5e1d60c5d8f69c096915c47e1a2c..0159dc8e7c3376a67750184061df0bc6dd656ba0 100644 (file)
@@ -7,6 +7,7 @@ router bgp 65001
  neighbor 10.0.0.1 timers connect 1
  address-family ipv4
   redistribute connected route-map connected-to-bgp
+  network 10.0.1.2/32 route-map set-aigp
   neighbor 10.0.0.1 next-hop-self
  exit-address-family
 !
@@ -16,3 +17,6 @@ route-map connected-to-bgp permit 10
  match ip address prefix-list p22
  set aigp 2
 !
+route-map set-aigp permit 10
+ set aigp 10
+!
index 0079535da7cedc13fb855953cbcce47f452c3b2d..206e229b2ee6e0065315cad57c64941d750277d4 100644 (file)
@@ -101,6 +101,45 @@ def test_bgp_aigp_rr():
         expected = {"paths": [{"aigpMetric": aigp, "valid": True}]}
         return topotest.json_cmp(output, expected)
 
+    def _bgp_check_aigp_bestpath():
+        output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.0.1.2/32 json"))
+        expected = {
+            "prefix": "10.0.1.2/32",
+            "paths": [
+                {
+                    "aigpMetric": 50,
+                    "valid": True,
+                    "sourced": True,
+                    "local": True,
+                    "bestpath": {"overall": True, "selectionReason": "Local Route"},
+                    "nexthops": [
+                        {
+                            "ip": "0.0.0.0",
+                            "hostname": "r1",
+                            "afi": "ipv4",
+                            "metric": 0,
+                            "accessible": True,
+                            "used": True,
+                        }
+                    ],
+                },
+                {
+                    "aigpMetric": 10,
+                    "valid": True,
+                    "nexthops": [
+                        {
+                            "ip": "10.0.0.2",
+                            "hostname": "r2",
+                            "afi": "ipv4",
+                            "metric": 10,
+                            "accessible": True,
+                            "used": True,
+                        }
+                    ],
+                },
+            ],
+        }
+        return topotest.json_cmp(output, expected)
 
     # r2, 10.0.2.2/32 with aigp-metric 2
     test_func = functools.partial(_bgp_check_aigp_metric, r2, "10.0.2.2/32", 2)
@@ -122,6 +161,11 @@ def test_bgp_aigp_rr():
     _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
     assert result is None, "aigp-metric for 10.0.2.2/32 is not 12"
 
+    # r1, check if the local route is favored over AIGP comparison
+    test_func = functools.partial(_bgp_check_aigp_bestpath)
+    _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+    assert result is None, "Local route is not favored over AIGP in best-path selection"
+
 
 if __name__ == "__main__":
     args = ["-s"] + sys.argv[1:]