test-network: add test case for issue #37714

I cannot reproduce the issue with the current git HEAD.
Let's add a test case that is used by the reporter of the issue.
This commit is contained in:
Yu Watanabe
2025-06-15 09:33:23 +09:00
parent f09a5aa970
commit ce5a54ed9b
2 changed files with 108 additions and 0 deletions
@@ -0,0 +1,72 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
[Match]
Name=dummy98
[Network]
IPv6AcceptRA=no
ConfigureWithoutCarrier=false
[Link]
RequiredForOnline=false
ActivationPolicy=up
[Address]
Address=2000:f00::227/64
AddPrefixRoute=false
[Route]
Destination=2000:f00::/64
PreferredSource=2000:f00::227
Metric=128
Table=249
[Route]
Gateway=2000:f00::1
GatewayOnLink=true
PreferredSource=2000:f00::227
Metric=128
Table=249
[RoutingPolicyRule]
From=2000:f00::227
Table=249
[Address]
Address=192.168.0.227/26
AddPrefixRoute=false
[Route]
Destination=192.168.0.192/26
PreferredSource=192.168.0.227
Metric=128
Table=249
[Route]
Gateway=192.168.0.193
GatewayOnLink=true
PreferredSource=192.168.0.227
Metric=128
Table=249
[RoutingPolicyRule]
From=192.168.0.227
Table=249
[Route]
Destination=192.168.0.193
PreferredSource=192.168.0.227
Metric=128
[Route]
Destination=192.168.0.72
PreferredSource=192.168.0.227
Gateway=192.168.0.193
GatewayOnLink=true
Metric=128
[Route]
Destination=10.1.2.2
PreferredSource=192.168.0.227
Gateway=192.168.0.193
GatewayOnLink=true
Metric=128
@@ -4404,6 +4404,42 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
self.assertIn('local 192.0.2.1 table local proto kernel scope host src 192.0.2.1', output)
self.assertIn('198.51.100.0/24 via 192.0.2.2 proto static', output)
def test_route_static_issue_37714(self):
copy_network_unit('12-dummy.netdev', '25-route-static-issue-37714.network')
start_networkd()
self.wait_online('dummy98:routable')
print('### ip -4 rule list table 249')
output = check_output('ip -4 rule list table 249')
print(output)
self.assertIn('32765: from 192.168.0.227 lookup 249 proto static', output)
print('### ip -6 rule list table 249')
output = check_output('ip -6 rule list table 249')
print(output)
self.assertIn('32765: from 2000:f00::227 lookup 249 proto static', output)
print('### ip -4 route show table all dev dummy98')
output = check_output('ip -4 route show table all dev dummy98')
print(output)
self.assertIn('default via 192.168.0.193 table 249 proto static src 192.168.0.227 metric 128 onlink', output)
self.assertIn('192.168.0.192/26 table 249 proto static scope link src 192.168.0.227 metric 128', output)
self.assertIn('10.1.2.2 via 192.168.0.193 proto static src 192.168.0.227 metric 128 onlink', output)
self.assertIn('192.168.0.72 via 192.168.0.193 proto static src 192.168.0.227 metric 128 onlink', output)
self.assertIn('192.168.0.193 proto static scope link src 192.168.0.227 metric 128', output)
self.assertIn('local 192.168.0.227 table local proto kernel scope host src 192.168.0.227', output)
self.assertIn('broadcast 192.168.0.255 table local proto kernel scope link src 192.168.0.227', output)
print('### ip -6 route show table all dev dummy98')
output = check_output('ip -6 route show table all dev dummy98')
print(output)
self.assertIn('2000:f00::/64 table 249 proto static src 2000:f00::227 metric 128 pref medium', output)
self.assertIn('default via 2000:f00::1 table 249 proto static src 2000:f00::227 metric 128 onlink pref medium', output)
self.assertIn('fe80::/64 proto kernel metric 256 pref medium', output)
self.assertIn('local 2000:f00::227 table local proto kernel metric 0 pref medium', output)
self.assertRegex(output, 'local fe80:[a-f0-9:]* table local proto kernel metric 0 pref medium', output)
self.assertIn('multicast ff00::/8 table local proto kernel metric 256 pref medium', output)
@expectedFailureIfRTA_VIAIsNotSupported()
def test_route_via_ipv6(self):
copy_network_unit('25-route-via-ipv6.network', '12-dummy.netdev')