]> git.puffer.fish Git - mirror/frr.git/commitdiff
topotests: test PIM neighbor filtering
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Wed, 22 Jan 2025 14:07:15 +0000 (11:07 -0300)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Wed, 19 Feb 2025 12:56:08 +0000 (09:56 -0300)
Add new topology for testing neighbor filtering and more features in
the future.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
tests/topotests/multicast_features/r1/frr.conf
tests/topotests/multicast_features/test_multicast_features.py

index bd1cc4103ce46cd942b69ea6d70951e8fdfd0b90..dcf73c08794ce74e68b2e9aaf1f6a5bacadad628 100644 (file)
@@ -1,5 +1,8 @@
 log commands
 !
+!ip prefix-list pim-eth0-neighbors permit 192.168.2.0/24
+!ipv6 prefix-list pimv6-eth0-neighbors permit 2001:db8:2::/64
+!
 interface r1-eth0
  ip address 192.168.1.1/24
  ip pim
@@ -9,8 +12,10 @@ interface r1-eth0
 interface r1-eth1
  ip address 192.168.2.1/24
  ip pim
+ ip pim allowed-neighbors prefix-list pim-eth0-neighbors
  ipv6 address 2001:db8:2::1/64
  ipv6 pim
+ ipv6 pim allowed-neighbors prefix-list pimv6-eth0-neighbors
 !
 interface r1-eth2
  ip address 192.168.100.1/24
@@ -45,4 +50,4 @@ router pim
 !
 router pim6
  rp 2001:db8:ffff::1
-!
\ No newline at end of file
+!
index bce1c91e31f05491e22fe3b950568b696102cff3..f3365575202e08ecbe6a06d0051a7c26ff7ee573 100644 (file)
@@ -149,10 +149,14 @@ def test_pim_convergence():
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
 
-    def expect_pim_peer(router, iptype, interface, peer):
+    def expect_pim_peer(router, iptype, interface, peer, missing=False):
         "Wait until peer is present."
-        logger.info(f"waiting peer {peer} in {router}")
-        expected = {interface: {peer: {"upTime": "*"}}}
+        if missing:
+            logger.info(f"waiting peer {peer} in {router} to disappear")
+            expected = {interface: {peer: None}}
+        else:
+            logger.info(f"waiting peer {peer} in {router}")
+            expected = {interface: {peer: {"upTime": "*"}}}
 
         test_func = partial(
             topotest.router_json_cmp,
@@ -166,23 +170,38 @@ def test_pim_convergence():
 
     expect_pim_peer("r1", "ip", "r1-eth0", "192.168.1.2")
     expect_pim_peer("r2", "ip", "r2-eth0", "192.168.1.1")
-    expect_pim_peer("r1", "ip", "r1-eth1", "192.168.2.2")
+
+    # This neighbor is denied by default
+    expect_pim_peer("r1", "ip", "r1-eth1", "192.168.2.2", missing=True)
+    # Lets configure the prefix list so the above neighbor gets accepted:
+    tgen.gears["r1"].vtysh_cmd("""
+        configure terminal
+        ip prefix-list pim-eth0-neighbors permit 192.168.2.0/24
+    """)
+    expect_pim_peer("r1", "ip", "r1-eth1", "192.168.2.2", missing=False)
 
     #
     # IPv6 part
     #
     out = tgen.gears["r1"].vtysh_cmd("show interface r1-eth0 json", True)
-    r1_r2_link_address = out["r1-eth0"]["ipAddresses"][1]["address"].split("/")[0]
+    r1_r2_link_address = out["r1-eth0"]["ipAddresses"][1]["address"].split('/')[0]
     out = tgen.gears["r1"].vtysh_cmd("show interface r1-eth1 json", True)
-    r1_r3_link_address = out["r1-eth1"]["ipAddresses"][1]["address"].split("/")[0]
+    r1_r3_link_address = out["r1-eth1"]["ipAddresses"][1]["address"].split('/')[0]
     out = tgen.gears["r2"].vtysh_cmd("show interface r2-eth0 json", True)
-    r2_link_address = out["r2-eth0"]["ipAddresses"][1]["address"].split("/")[0]
+    r2_link_address = out["r2-eth0"]["ipAddresses"][1]["address"].split('/')[0]
     out = tgen.gears["r3"].vtysh_cmd("show interface r3-eth0 json", True)
-    r3_link_address = out["r3-eth0"]["ipAddresses"][1]["address"].split("/")[0]
+    r3_link_address = out["r3-eth0"]["ipAddresses"][1]["address"].split('/')[0]
 
     expect_pim_peer("r1", "ipv6", "r1-eth0", r2_link_address)
     expect_pim_peer("r2", "ipv6", "r2-eth0", r1_r2_link_address)
-    expect_pim_peer("r1", "ipv6", "r1-eth1", r3_link_address)
+    expect_pim_peer("r1", "ipv6", "r1-eth1", r3_link_address, missing=True)
+
+    tgen.gears["r1"].vtysh_cmd(f"""
+        configure terminal
+        ipv6 prefix-list pimv6-eth0-neighbors permit {r3_link_address}/64
+    """)
+
+    expect_pim_peer("r1", "ipv6", "r1-eth1", r3_link_address, missing=False)
 
 
 def test_igmp_group_limit():