summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-10-28 14:38:23 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-10-28 15:56:59 +0900
commitbb80f633bfde9f7fed166c8d8d02a5b79fced9f5 (patch)
tree38caee1135d53e77090da76ed03eccc0e69f9ab5 /test
parent6f812d289946a3e0e386378263b40d09e125752e (diff)
downloadsystemd-bb80f633bfde9f7fed166c8d8d02a5b79fced9f5.tar.gz
test-network: add testcase for router preference
Diffstat (limited to 'test')
-rw-r--r--test/test-network/conf/25-veth-bridge.network10
-rw-r--r--test/test-network/conf/25-veth-client.netdev9
-rw-r--r--test/test-network/conf/25-veth-client.network10
-rw-r--r--test/test-network/conf/25-veth-router-high.netdev9
-rw-r--r--test/test-network/conf/25-veth-router-high.network17
-rw-r--r--test/test-network/conf/25-veth-router-low.netdev9
-rw-r--r--test/test-network/conf/25-veth-router-low.network17
-rwxr-xr-xtest/test-network/systemd-networkd-tests.py59
8 files changed, 140 insertions, 0 deletions
diff --git a/test/test-network/conf/25-veth-bridge.network b/test/test-network/conf/25-veth-bridge.network
new file mode 100644
index 0000000000..b2f163412a
--- /dev/null
+++ b/test/test-network/conf/25-veth-bridge.network
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=client-p
+Name=router-high-p
+Name=router-low-p
+
+[Network]
+Bridge=bridge99
+IPv6AcceptRA=no
+IPv6SendRA=yes
diff --git a/test/test-network/conf/25-veth-client.netdev b/test/test-network/conf/25-veth-client.netdev
new file mode 100644
index 0000000000..511c1e59ce
--- /dev/null
+++ b/test/test-network/conf/25-veth-client.netdev
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=client
+Kind=veth
+MACAddress=12:34:56:78:9a:00
+
+[Peer]
+Name=client-p
+MACAddress=12:34:56:78:9b:00
diff --git a/test/test-network/conf/25-veth-client.network b/test/test-network/conf/25-veth-client.network
new file mode 100644
index 0000000000..152fb4d4c1
--- /dev/null
+++ b/test/test-network/conf/25-veth-client.network
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=client
+
+[Network]
+IPv6AcceptRA=yes
+
+[IPv6AcceptRA]
+UseDNS=no
+UseDomains=no
diff --git a/test/test-network/conf/25-veth-router-high.netdev b/test/test-network/conf/25-veth-router-high.netdev
new file mode 100644
index 0000000000..845b4a9ce1
--- /dev/null
+++ b/test/test-network/conf/25-veth-router-high.netdev
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=router-high
+Kind=veth
+MACAddress=12:34:56:78:9a:99
+
+[Peer]
+Name=router-high-p
+MACAddress=12:34:56:78:9b:99
diff --git a/test/test-network/conf/25-veth-router-high.network b/test/test-network/conf/25-veth-router-high.network
new file mode 100644
index 0000000000..c6c2df231e
--- /dev/null
+++ b/test/test-network/conf/25-veth-router-high.network
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=router-high
+
+[Network]
+IPv6AcceptRA=no
+IPv6SendRA=yes
+
+[IPv6SendRA]
+RouterPreference=high
+EmitDNS=no
+EmitDomains=no
+
+[IPv6Prefix]
+Prefix=2002:da8:1:99::/64
+PreferredLifetimeSec=1000s
+ValidLifetimeSec=2100s
diff --git a/test/test-network/conf/25-veth-router-low.netdev b/test/test-network/conf/25-veth-router-low.netdev
new file mode 100644
index 0000000000..2842f4f98a
--- /dev/null
+++ b/test/test-network/conf/25-veth-router-low.netdev
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=router-low
+Kind=veth
+MACAddress=12:34:56:78:9a:98
+
+[Peer]
+Name=router-low-p
+MACAddress=12:34:56:78:9b:98
diff --git a/test/test-network/conf/25-veth-router-low.network b/test/test-network/conf/25-veth-router-low.network
new file mode 100644
index 0000000000..d2abc1520e
--- /dev/null
+++ b/test/test-network/conf/25-veth-router-low.network
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=router-low
+
+[Network]
+IPv6AcceptRA=no
+IPv6SendRA=yes
+
+[IPv6SendRA]
+RouterPreference=low
+EmitDNS=no
+EmitDomains=no
+
+[IPv6Prefix]
+Prefix=2002:da8:1:98::/64
+PreferredLifetimeSec=1000s
+ValidLifetimeSec=2100s
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index 2f7614428c..64924a35aa 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -889,6 +889,16 @@ class Utilities():
self.assertNotRegex(output, address_regex)
+ def wait_route(self, link, route_regex, table='main', ipv='', timeout_sec=100):
+ for i in range(timeout_sec):
+ if i > 0:
+ time.sleep(1)
+ output = check_output(f'ip {ipv} route show dev {link} table {table}')
+ if re.search(route_regex, output):
+ break
+
+ self.assertRegex(output, route_regex)
+
def check_netlabel(self, interface, address, label='system_u:object_r:root_t:s0'):
if not shutil.which('selinuxenabled'):
print(f'## Checking NetLabel skipped: selinuxenabled command not found.')
@@ -4316,6 +4326,55 @@ class NetworkdRATests(unittest.TestCase, Utilities):
self.assertIn('2002:da8:1:0:b47e:7975:fc7a:7d6e', output)
self.assertIn('2002:da8:2:0:f689:561a:8eda:7443', output)
+ def test_router_preference(self):
+ copy_network_unit('25-veth-client.netdev',
+ '25-veth-router-high.netdev',
+ '25-veth-router-low.netdev',
+ '26-bridge.netdev',
+ '25-veth-bridge.network',
+ '25-veth-client.network',
+ '25-veth-router-high.network',
+ '25-veth-router-low.network',
+ '25-bridge99.network')
+ start_networkd()
+ self.wait_online(['client-p:enslaved',
+ 'router-high:degraded', 'router-high-p:enslaved',
+ 'router-low:degraded', 'router-low-p:enslaved',
+ 'bridge99:routable'])
+
+ networkctl_reconfigure('client')
+ self.wait_online(['client:routable'])
+
+ self.wait_address('client', '2002:da8:1:99:1034:56ff:fe78:9a00/64', ipv='-6', timeout_sec=10)
+ self.wait_address('client', '2002:da8:1:98:1034:56ff:fe78:9a00/64', ipv='-6', timeout_sec=10)
+ self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a99 proto ra metric 512', ipv='-6', timeout_sec=10)
+ self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a98 proto ra metric 2048', ipv='-6', timeout_sec=10)
+
+ output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a99')
+ print(output)
+ self.assertIn('pref high', output)
+ output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a98')
+ print(output)
+ self.assertIn('pref low', output)
+
+ with open(os.path.join(network_unit_dir, '25-veth-client.network'), mode='a', encoding='utf-8') as f:
+ f.write('\n[Link]\nMACAddress=12:34:56:78:9a:01\n[IPv6AcceptRA]\nRouteMetric=100:200:300\n')
+
+ networkctl_reload()
+ self.wait_online(['client:routable'])
+
+ self.wait_address('client', '2002:da8:1:99:1034:56ff:fe78:9a01/64', ipv='-6', timeout_sec=10)
+ self.wait_address('client', '2002:da8:1:98:1034:56ff:fe78:9a01/64', ipv='-6', timeout_sec=10)
+ self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a99 proto ra metric 100', ipv='-6', timeout_sec=10)
+ self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a98 proto ra metric 300', ipv='-6', timeout_sec=10)
+
+ output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a99')
+ print(output)
+ self.assertIn('pref high', output)
+ output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a98')
+ print(output)
+ self.assertIn('pref low', output)
+
class NetworkdDHCPServerTests(unittest.TestCase, Utilities):
def setUp(self):