mirror of
https://github.com/systemd/systemd
synced 2024-07-21 10:17:21 +00:00
test-network: add test case about replacing nexthop
This commit is contained in:
parent
9362f7d5b5
commit
78265b5b4a
|
@ -6,7 +6,6 @@ Name=veth99
|
|||
IPv6AcceptRA=no
|
||||
Address=2001:1234:5:8f63::1/120
|
||||
Address=192.168.5.10/24
|
||||
Gateway=192.168.5.1
|
||||
|
||||
[NextHop]
|
||||
Id=1
|
98
test/test-network/conf/25-nexthop-2.network
Normal file
98
test/test-network/conf/25-nexthop-2.network
Normal file
|
@ -0,0 +1,98 @@
|
|||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
[Match]
|
||||
Name=veth99
|
||||
|
||||
[Network]
|
||||
IPv6AcceptRA=no
|
||||
Address=2001:1234:5:8f63::1/120
|
||||
Address=192.168.5.10/24
|
||||
|
||||
# Commented out lines are specified in 25-nexthop.network
|
||||
|
||||
[NextHop]
|
||||
#Id=1
|
||||
Id=6
|
||||
Gateway=192.168.5.1
|
||||
|
||||
[NextHop]
|
||||
#Id=2
|
||||
Id=7
|
||||
Gateway=2001:1234:5:8f63::2
|
||||
|
||||
[NextHop]
|
||||
#Id=3
|
||||
Id=4
|
||||
Family=ipv6
|
||||
|
||||
[NextHop]
|
||||
#Id=4
|
||||
Id=3
|
||||
Family=ipv4
|
||||
|
||||
[NextHop]
|
||||
Id=5
|
||||
#Gateway=192.168.10.1
|
||||
#OnLink=yes
|
||||
Gateway=192.168.5.3
|
||||
OnLink=no
|
||||
|
||||
[NextHop]
|
||||
#Id=6
|
||||
Id=1
|
||||
Family=ipv4
|
||||
Blackhole=yes
|
||||
|
||||
[NextHop]
|
||||
#Id=7
|
||||
Id=2
|
||||
Family=ipv6
|
||||
Blackhole=yes
|
||||
|
||||
[NextHop]
|
||||
Id=8
|
||||
Gateway=fe80::222:4dff:ff:ff:ff:ff
|
||||
|
||||
[NextHop]
|
||||
Gateway=192.168.5.2
|
||||
|
||||
[NextHop]
|
||||
Family=ipv4
|
||||
Blackhole=yes
|
||||
|
||||
[NextHop]
|
||||
Family=ipv6
|
||||
Blackhole=yes
|
||||
|
||||
[Route]
|
||||
#NextHop=1
|
||||
NextHop=6
|
||||
Destination=10.10.10.10
|
||||
|
||||
[Route]
|
||||
#NextHop=2
|
||||
NextHop=7
|
||||
Destination=10.10.10.11
|
||||
|
||||
[Route]
|
||||
#NextHop=2
|
||||
NextHop=7
|
||||
Destination=2001:1234:5:8f62::1
|
||||
|
||||
[Route]
|
||||
NextHop=5
|
||||
Destination=10.10.10.12
|
||||
|
||||
[Route]
|
||||
#NextHop=6
|
||||
NextHop=1
|
||||
Destination=10.10.10.13
|
||||
|
||||
[Route]
|
||||
#NextHop=7
|
||||
NextHop=2
|
||||
Destination=2001:1234:5:8f62::2
|
||||
|
||||
[Route]
|
||||
#NextHop=21
|
||||
NextHop=20
|
||||
Destination=10.10.10.14
|
20
test/test-network/conf/25-nexthop-dummy-2.network
Normal file
20
test/test-network/conf/25-nexthop-dummy-2.network
Normal file
|
@ -0,0 +1,20 @@
|
|||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
[Match]
|
||||
Name=dummy98
|
||||
|
||||
[Network]
|
||||
Address=192.168.20.20/24
|
||||
IPv6AcceptRA=no
|
||||
|
||||
# Commented out lines are specified in 25-nexthop-dummy.network
|
||||
|
||||
[NextHop]
|
||||
#Id=20
|
||||
Id=21
|
||||
Gateway=192.168.20.1
|
||||
|
||||
[NextHop]
|
||||
#Id=21
|
||||
#Group=1:3 20:1
|
||||
Id=20
|
||||
Group=5:3 21:1
|
|
@ -3854,23 +3854,34 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
|
|||
self.assertRegex(output, 'inet 10.1.2.3/16 scope global dummy98')
|
||||
self.assertNotRegex(output, 'inet 10.2.3.4/16 scope global dynamic dummy98')
|
||||
|
||||
def check_nexthop(self, manage_foreign_nexthops):
|
||||
def check_nexthop(self, manage_foreign_nexthops, first):
|
||||
self.wait_online(['veth99:routable', 'veth-peer:routable', 'dummy98:routable'])
|
||||
|
||||
output = check_output('ip nexthop list dev veth99')
|
||||
print(output)
|
||||
self.assertIn('id 1 via 192.168.5.1 dev veth99', output)
|
||||
self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output)
|
||||
if first:
|
||||
self.assertIn('id 1 via 192.168.5.1 dev veth99', output)
|
||||
self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output)
|
||||
else:
|
||||
self.assertIn('id 6 via 192.168.5.1 dev veth99', output)
|
||||
self.assertIn('id 7 via 2001:1234:5:8f63::2 dev veth99', output)
|
||||
self.assertIn('id 3 dev veth99', output)
|
||||
self.assertIn('id 4 dev veth99', output)
|
||||
self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink')
|
||||
if first:
|
||||
self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink')
|
||||
else:
|
||||
self.assertIn('id 5 via 192.168.5.3 dev veth99', output)
|
||||
self.assertNotRegex(output, 'id 5 via 192.168.5.3 dev veth99 .*onlink')
|
||||
self.assertIn('id 8 via fe80:0:222:4dff:ff:ff:ff:ff dev veth99', output)
|
||||
if manage_foreign_nexthops:
|
||||
self.assertRegex(output, r'id [0-9]* via 192.168.5.2 dev veth99')
|
||||
|
||||
output = check_output('ip nexthop list dev dummy98')
|
||||
print(output)
|
||||
self.assertIn('id 20 via 192.168.20.1 dev dummy98', output)
|
||||
if first:
|
||||
self.assertIn('id 20 via 192.168.20.1 dev dummy98', output)
|
||||
else:
|
||||
self.assertIn('id 21 via 192.168.20.1 dev dummy98', output)
|
||||
if manage_foreign_nexthops:
|
||||
self.assertNotIn('id 42 via 192.168.20.2 dev dummy98', output)
|
||||
else:
|
||||
|
@ -3879,43 +3890,74 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
|
|||
# kernel manages blackhole nexthops on lo
|
||||
output = check_output('ip nexthop list dev lo')
|
||||
print(output)
|
||||
self.assertIn('id 6 blackhole', output)
|
||||
self.assertIn('id 7 blackhole', output)
|
||||
if first:
|
||||
self.assertIn('id 6 blackhole', output)
|
||||
self.assertIn('id 7 blackhole', output)
|
||||
else:
|
||||
self.assertIn('id 1 blackhole', output)
|
||||
self.assertIn('id 2 blackhole', output)
|
||||
|
||||
# group nexthops are shown with -0 option
|
||||
output = check_output('ip -0 nexthop list id 21')
|
||||
print(output)
|
||||
self.assertRegex(output, r'id 21 group (1,3/20|20/1,3)')
|
||||
if first:
|
||||
output = check_output('ip -0 nexthop list id 21')
|
||||
print(output)
|
||||
self.assertRegex(output, r'id 21 group (1,3/20|20/1,3)')
|
||||
else:
|
||||
output = check_output('ip -0 nexthop list id 20')
|
||||
print(output)
|
||||
self.assertRegex(output, r'id 20 group (5,3/21|21/5,3)')
|
||||
|
||||
output = check_output('ip route show dev veth99 10.10.10.10')
|
||||
print(output)
|
||||
self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output)
|
||||
if first:
|
||||
self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output)
|
||||
else:
|
||||
self.assertEqual('10.10.10.10 nhid 6 via 192.168.5.1 proto static', output)
|
||||
|
||||
output = check_output('ip route show dev veth99 10.10.10.11')
|
||||
print(output)
|
||||
self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output)
|
||||
if first:
|
||||
self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output)
|
||||
else:
|
||||
self.assertEqual('10.10.10.11 nhid 7 via inet6 2001:1234:5:8f63::2 proto static', output)
|
||||
|
||||
output = check_output('ip route show dev veth99 10.10.10.12')
|
||||
print(output)
|
||||
self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output)
|
||||
if first:
|
||||
self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output)
|
||||
else:
|
||||
self.assertEqual('10.10.10.12 nhid 5 via 192.168.5.3 proto static', output)
|
||||
|
||||
output = check_output('ip -6 route show dev veth99 2001:1234:5:8f62::1')
|
||||
print(output)
|
||||
self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output)
|
||||
if first:
|
||||
self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output)
|
||||
else:
|
||||
self.assertEqual('2001:1234:5:8f62::1 nhid 7 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output)
|
||||
|
||||
output = check_output('ip route show 10.10.10.13')
|
||||
print(output)
|
||||
self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output)
|
||||
if first:
|
||||
self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output)
|
||||
else:
|
||||
self.assertEqual('blackhole 10.10.10.13 nhid 1 dev lo proto static', output)
|
||||
|
||||
output = check_output('ip -6 route show 2001:1234:5:8f62::2')
|
||||
print(output)
|
||||
self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output)
|
||||
if first:
|
||||
self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output)
|
||||
else:
|
||||
self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 2 dev lo proto static metric 1024 pref medium', output)
|
||||
|
||||
output = check_output('ip route show 10.10.10.14')
|
||||
print(output)
|
||||
self.assertIn('10.10.10.14 nhid 21 proto static', output)
|
||||
if first:
|
||||
self.assertIn('10.10.10.14 nhid 21 proto static', output)
|
||||
self.assertIn('nexthop via 192.168.5.1 dev veth99 weight 3', output)
|
||||
else:
|
||||
self.assertIn('10.10.10.14 nhid 20 proto static', output)
|
||||
self.assertIn('nexthop via 192.168.5.3 dev veth99 weight 3', output)
|
||||
self.assertIn('nexthop via 192.168.20.1 dev dummy98 weight 1', output)
|
||||
self.assertIn('nexthop via 192.168.5.1 dev veth99 weight 3', output)
|
||||
|
||||
output = check_output(*networkctl_cmd, '--json=short', 'status', env=env)
|
||||
check_json(output)
|
||||
|
@ -3929,13 +3971,18 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
|
|||
check_output('ip address add 192.168.20.20/24 dev dummy98')
|
||||
check_output('ip nexthop add id 42 via 192.168.20.2 dev dummy98')
|
||||
|
||||
copy_network_unit('25-nexthop.network', '25-veth.netdev', '25-veth-peer.network',
|
||||
'12-dummy.netdev', '25-nexthop-dummy.network')
|
||||
copy_network_unit('25-nexthop-1.network', '25-veth.netdev', '25-veth-peer.network',
|
||||
'12-dummy.netdev', '25-nexthop-dummy-1.network')
|
||||
start_networkd()
|
||||
|
||||
self.check_nexthop(manage_foreign_nexthops)
|
||||
self.check_nexthop(manage_foreign_nexthops, first=True)
|
||||
|
||||
remove_network_unit('25-nexthop.network')
|
||||
remove_network_unit('25-nexthop-1.network', '25-nexthop-dummy-1.network')
|
||||
copy_network_unit('25-nexthop-2.network', '25-nexthop-dummy-2.network')
|
||||
networkctl_reload()
|
||||
self.check_nexthop(manage_foreign_nexthops, first=False)
|
||||
|
||||
remove_network_unit('25-nexthop-2.network')
|
||||
copy_network_unit('25-nexthop-nothing.network')
|
||||
networkctl_reload()
|
||||
self.wait_online(['veth99:routable', 'veth-peer:routable'])
|
||||
|
@ -3947,12 +3994,11 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
|
|||
print(output)
|
||||
self.assertEqual(output, '')
|
||||
|
||||
remove_network_unit('25-nexthop-nothing.network')
|
||||
copy_network_unit('25-nexthop.network')
|
||||
networkctl_reconfigure('dummy98')
|
||||
remove_network_unit('25-nexthop-nothing.network', '25-nexthop-dummy-2.network')
|
||||
copy_network_unit('25-nexthop-1.network', '25-nexthop-dummy-1.network')
|
||||
networkctl_reload()
|
||||
|
||||
self.check_nexthop(manage_foreign_nexthops)
|
||||
self.check_nexthop(manage_foreign_nexthops, first=True)
|
||||
|
||||
remove_link('veth99')
|
||||
time.sleep(2)
|
||||
|
|
Loading…
Reference in a new issue