diff --git a/test/test-network/conf/ipv6ra-prefix-client-deny-list.network b/test/test-network/conf/ipv6ra-prefix-client-deny-list.network new file mode 100644 index 0000000000..ce7a76f70c --- /dev/null +++ b/test/test-network/conf/ipv6ra-prefix-client-deny-list.network @@ -0,0 +1,11 @@ +[Match] +Name=veth-peer + +[Network] +DHCP=no +IPv6AcceptRA=yes + +[IPv6AcceptRA] +RouterDenyList=2001::1 +PrefixDenyList=2001:db8:0:2:: +RouteDenyList=2001:db1:fff:: diff --git a/test/test-network/conf/ipv6ra-prefix-client.network b/test/test-network/conf/ipv6ra-prefix-client.network index bc40b123c7..58883658f3 100644 --- a/test/test-network/conf/ipv6ra-prefix-client.network +++ b/test/test-network/conf/ipv6ra-prefix-client.network @@ -4,3 +4,10 @@ Name=veth-peer [Network] DHCP=no IPv6AcceptRA=yes + +[IPv6AcceptRA] +# PrefixDenyList= and RouteDenyList= will be ignored. +PrefixAllowList=2001:db8:0:1:: 2001:db8:0:1:: +PrefixDenyList=2001:db8:0:1:: 2001:db8:0:1:: +RouteAllowList=2001:db0:fff:: 2001:db0:fff:: +RouteDenyList=2001:db0:fff:: 2001:db0:fff:: diff --git a/test/test-network/conf/ipv6ra-prefix.network b/test/test-network/conf/ipv6ra-prefix.network index a0ac1e4537..cfb03f50c4 100644 --- a/test/test-network/conf/ipv6ra-prefix.network +++ b/test/test-network/conf/ipv6ra-prefix.network @@ -15,3 +15,7 @@ Assign=yes [IPv6RoutePrefix] Route=2001:db0:fff::/64 LifetimeSec=1000 + +[IPv6RoutePrefix] +Route=2001:db1:fff::/64 +LifetimeSec=1000 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 454e6ce66b..1c4046d4f2 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -4274,6 +4274,7 @@ class NetworkdIPv6PrefixTests(unittest.TestCase, Utilities): units = [ '25-veth.netdev', + 'ipv6ra-prefix-client-deny-list.network', 'ipv6ra-prefix-client.network', 'ipv6ra-prefix.network' ] @@ -4294,14 +4295,45 @@ class NetworkdIPv6PrefixTests(unittest.TestCase, Utilities): start_networkd() self.wait_online(['veth99:routable', 'veth-peer:routable']) + output = check_output('ip address show dev veth-peer') + print(output) + self.assertIn('inet6 2001:db8:0:1:', output) + self.assertNotIn('inet6 2001:db8:0:2:', output) + output = check_output('ip -6 route show dev veth-peer') print(output) - self.assertRegex(output, '2001:db8:0:1::/64 proto ra') + self.assertIn('2001:db8:0:1::/64 proto ra', output) + self.assertNotIn('2001:db8:0:2::/64 proto ra', output) + self.assertIn('2001:db0:fff::/64 via ', output) + self.assertNotIn('2001:db1:fff::/64 via ', output) - output = check_output('ip addr show dev veth99') + output = check_output('ip address show dev veth99') print(output) - self.assertNotRegex(output, '2001:db8:0:1') - self.assertRegex(output, '2001:db8:0:2') + self.assertNotIn('inet6 2001:db8:0:1:', output) + self.assertIn('inet6 2001:db8:0:2:', output) + + def test_ipv6_route_prefix_deny_list(self): + copy_unit_to_networkd_unit_path('25-veth.netdev', 'ipv6ra-prefix-client-deny-list.network', 'ipv6ra-prefix.network') + + start_networkd() + self.wait_online(['veth99:routable', 'veth-peer:routable']) + + output = check_output('ip address show dev veth-peer') + print(output) + self.assertIn('inet6 2001:db8:0:1:', output) + self.assertNotIn('inet6 2001:db8:0:2:', output) + + output = check_output('ip -6 route show dev veth-peer') + print(output) + self.assertIn('2001:db8:0:1::/64 proto ra', output) + self.assertNotIn('2001:db8:0:2::/64 proto ra', output) + self.assertIn('2001:db0:fff::/64 via ', output) + self.assertNotIn('2001:db1:fff::/64 via ', output) + + output = check_output('ip address show dev veth99') + print(output) + self.assertNotIn('inet6 2001:db8:0:1:', output) + self.assertIn('inet6 2001:db8:0:2:', output) class NetworkdMTUTests(unittest.TestCase, Utilities): links = ['dummy98']