]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: Check if iBGP session can drop invalid AIGP attribute 15956/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 1 May 2024 13:33:52 +0000 (16:33 +0300)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 7 May 2024 14:46:12 +0000 (14:46 +0000)
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit f58227c91e4aaf3b54929634b310de86c0202a6e)

tests/topotests/bgp_path_attribute_discard/peer1/exabgp.cfg
tests/topotests/bgp_path_attribute_discard/r1/bgpd.conf [deleted file]
tests/topotests/bgp_path_attribute_discard/r1/frr.conf [new file with mode: 0644]
tests/topotests/bgp_path_attribute_discard/r1/zebra.conf [deleted file]
tests/topotests/bgp_path_attribute_discard/r2/frr.conf [new file with mode: 0644]
tests/topotests/bgp_path_attribute_discard/test_bgp_path_attribute_discard.py

index 7fb9210ecf6e541704a539477e81b38536c638d6..dccec7d15428ef9adce25438c3538bcdbae61034 100644 (file)
@@ -1,8 +1,8 @@
 neighbor 10.0.0.1 {
-  router-id 10.0.0.2;
-  local-address 10.0.0.2;
-  local-as 65001;
-  peer-as 65002;
+  router-id 10.0.0.254;
+  local-address 10.0.0.254;
+  local-as 65254;
+  peer-as 65001;
 
   capability {
     route-refresh;
@@ -12,13 +12,28 @@ neighbor 10.0.0.1 {
     route 192.168.100.101/32 {
       atomic-aggregate;
       community 65001:101;
-      next-hop 10.0.0.2;
+      next-hop 10.0.0.254;
     }
 
     route 192.168.100.102/32 {
-      originator-id 10.0.0.2;
+      originator-id 10.0.0.254;
       community 65001:102;
-      next-hop 10.0.0.2;
+      next-hop 10.0.0.254;
+    }
+  }
+}
+
+neighbor 10.0.0.2 {
+  router-id 10.0.0.254;
+  local-address 10.0.0.254;
+  local-as 65254;
+  peer-as 65254;
+
+  static {
+    route 192.168.100.101/32 {
+      # AIGP invalid attribute: flagged as transitive + optional.
+      attribute [0x1a 0xc0 0x00000064];
+      next-hop 10.0.0.254;
     }
   }
 }
diff --git a/tests/topotests/bgp_path_attribute_discard/r1/bgpd.conf b/tests/topotests/bgp_path_attribute_discard/r1/bgpd.conf
deleted file mode 100644 (file)
index c96f354..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-!
-router bgp 65002
- no bgp ebgp-requires-policy
- neighbor 10.0.0.2 remote-as external
- neighbor 10.0.0.2 timers 3 10
-!
diff --git a/tests/topotests/bgp_path_attribute_discard/r1/frr.conf b/tests/topotests/bgp_path_attribute_discard/r1/frr.conf
new file mode 100644 (file)
index 0000000..ae7fbdd
--- /dev/null
@@ -0,0 +1,9 @@
+!
+interface r1-eth0
+ ip address 10.0.0.1/24
+!
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 10.0.0.254 remote-as external
+ neighbor 10.0.0.254 timers 3 10
+!
diff --git a/tests/topotests/bgp_path_attribute_discard/r1/zebra.conf b/tests/topotests/bgp_path_attribute_discard/r1/zebra.conf
deleted file mode 100644 (file)
index 51a1b26..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-!
-interface r1-eth0
- ip address 10.0.0.1/24
-!
diff --git a/tests/topotests/bgp_path_attribute_discard/r2/frr.conf b/tests/topotests/bgp_path_attribute_discard/r2/frr.conf
new file mode 100644 (file)
index 0000000..1dafbdd
--- /dev/null
@@ -0,0 +1,10 @@
+!
+interface r2-eth0
+ ip address 10.0.0.2/24
+!
+router bgp 65254
+ no bgp ebgp-requires-policy
+ neighbor 10.0.0.254 remote-as internal
+ neighbor 10.0.0.254 timers 3 10
+ neighbor 10.0.0.254 path-attribute discard 26
+!
index c97cd0bddabddbed4d83607b98cfd982e36df4b7..bd8cd8e18a9401d1204783fa7ba82224711b85a5 100644 (file)
@@ -31,10 +31,12 @@ pytestmark = [pytest.mark.bgpd]
 
 def build_topo(tgen):
     r1 = tgen.add_router("r1")
-    peer1 = tgen.add_exabgp_peer("peer1", ip="10.0.0.2", defaultRoute="via 10.0.0.1")
+    r2 = tgen.add_router("r2")
+    peer1 = tgen.add_exabgp_peer("peer1", ip="10.0.0.254", defaultRoute="via 10.0.0.1")
 
     switch = tgen.add_switch("s1")
     switch.add_link(r1)
+    switch.add_link(r2)
     switch.add_link(peer1)
 
 
@@ -42,10 +44,10 @@ def setup_module(mod):
     tgen = Topogen(build_topo, mod.__name__)
     tgen.start_topology()
 
-    router = tgen.gears["r1"]
-    router.load_config(TopoRouter.RD_ZEBRA, os.path.join(CWD, "r1/zebra.conf"))
-    router.load_config(TopoRouter.RD_BGP, os.path.join(CWD, "r1/bgpd.conf"))
-    router.start()
+    for _, (rname, router) in enumerate(tgen.routers().items(), 1):
+        router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+    tgen.start_router()
 
     peer = tgen.gears["peer1"]
     peer.start(os.path.join(CWD, "peer1"), os.path.join(CWD, "exabgp.env"))
@@ -63,6 +65,7 @@ def test_bgp_path_attribute_discard():
         pytest.skip(tgen.errors)
 
     r1 = tgen.gears["r1"]
+    r2 = tgen.gears["r2"]
 
     def _bgp_converge():
         output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast json detail"))
@@ -103,7 +106,7 @@ def test_bgp_path_attribute_discard():
         """
     configure terminal
         router bgp
-            neighbor 10.0.0.2 path-attribute discard 6 8
+            neighbor 10.0.0.254 path-attribute discard 6 8
     """
     )
 
@@ -139,6 +142,28 @@ def test_bgp_path_attribute_discard():
         result is None
     ), "Failed to discard path attributes (atomic-aggregate, community)"
 
+    def _bgp_check_if_aigp_invalid_attribute_discarded():
+        output = json.loads(r2.vtysh_cmd("show bgp ipv4 unicast json detail"))
+        expected = {
+            "routes": {
+                "192.168.100.101/32": {
+                    "paths": [
+                        {
+                            "valid": True,
+                            "aigpMetric": None,
+                        }
+                    ],
+                },
+            }
+        }
+        return topotest.json_cmp(output, expected)
+
+    test_func = functools.partial(_bgp_check_if_aigp_invalid_attribute_discarded)
+    _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+    assert (
+        result is None
+    ), "Failed to discard AIGP invalid path attribute (iBGP session)"
+
 
 def test_memory_leak():
     "Run the memory leak test and report results."