mirror of
https://github.com/systemd/systemd
synced 2024-07-21 10:17:21 +00:00
test-network: add testcase for router preference
This commit is contained in:
parent
6f812d2899
commit
bb80f633bf
10
test/test-network/conf/25-veth-bridge.network
Normal file
10
test/test-network/conf/25-veth-bridge.network
Normal file
|
@ -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
|
9
test/test-network/conf/25-veth-client.netdev
Normal file
9
test/test-network/conf/25-veth-client.netdev
Normal file
|
@ -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
|
10
test/test-network/conf/25-veth-client.network
Normal file
10
test/test-network/conf/25-veth-client.network
Normal file
|
@ -0,0 +1,10 @@
|
|||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
[Match]
|
||||
Name=client
|
||||
|
||||
[Network]
|
||||
IPv6AcceptRA=yes
|
||||
|
||||
[IPv6AcceptRA]
|
||||
UseDNS=no
|
||||
UseDomains=no
|
9
test/test-network/conf/25-veth-router-high.netdev
Normal file
9
test/test-network/conf/25-veth-router-high.netdev
Normal file
|
@ -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
|
17
test/test-network/conf/25-veth-router-high.network
Normal file
17
test/test-network/conf/25-veth-router-high.network
Normal file
|
@ -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
|
9
test/test-network/conf/25-veth-router-low.netdev
Normal file
9
test/test-network/conf/25-veth-router-low.netdev
Normal file
|
@ -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
|
17
test/test-network/conf/25-veth-router-low.network
Normal file
17
test/test-network/conf/25-veth-router-low.network
Normal file
|
@ -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
|
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue