diff --git a/test/test-network/conf/dhcp-client-ipv4-use-routes-no.network b/test/test-network/conf/dhcp-client-ipv4-use-routes-no.network deleted file mode 100644 index 21e21fabb3..0000000000 --- a/test/test-network/conf/dhcp-client-ipv4-use-routes-no.network +++ /dev/null @@ -1,9 +0,0 @@ -[Match] -Name=veth99 - -[Network] -DHCP=ipv4 -IPv6AcceptRA=false - -[DHCPv4] -UseRoutes=no diff --git a/test/test-network/conf/dhcp-client-ipv4-use-gateway-no.network b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network similarity index 81% rename from test/test-network/conf/dhcp-client-ipv4-use-gateway-no.network rename to test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network index fb31772201..b0d0d8605e 100644 --- a/test/test-network/conf/dhcp-client-ipv4-use-gateway-no.network +++ b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network @@ -6,4 +6,4 @@ DHCP=ipv4 IPv6AcceptRA=false [DHCPv4] -UseGateway=no +RoutesToDNS=yes diff --git a/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-False.conf b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-False.conf new file mode 100644 index 0000000000..78d0493013 --- /dev/null +++ b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-False.conf @@ -0,0 +1,2 @@ +[DHCPv4] +UseGateway=no diff --git a/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-True.conf b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-True.conf new file mode 100644 index 0000000000..f6f597b0f4 --- /dev/null +++ b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-gateway-True.conf @@ -0,0 +1,2 @@ +[DHCPv4] +UseGateway=yes diff --git a/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-False.conf b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-False.conf new file mode 100644 index 0000000000..38fa983cd2 --- /dev/null +++ b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-False.conf @@ -0,0 +1,2 @@ +[DHCPv4] +UseRoutes=no diff --git a/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-True.conf b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-True.conf new file mode 100644 index 0000000000..3b2d0abf32 --- /dev/null +++ b/test/test-network/conf/dhcp-client-ipv4-use-routes-use-gateway.network.d/use-routes-True.conf @@ -0,0 +1,2 @@ +[DHCPv4] +UseRoutes=yes diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 388e615602..efc3b2ad09 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3,6 +3,7 @@ # systemd-networkd tests import argparse +import itertools import os import re import shutil @@ -2921,8 +2922,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): 'dhcp-client-ipv4-dhcp-settings.network', 'dhcp-client-ipv4-only-ipv6-disabled.network', 'dhcp-client-ipv4-only.network', - 'dhcp-client-ipv4-use-gateway-no.network', - 'dhcp-client-ipv4-use-routes-no.network', + 'dhcp-client-ipv4-use-routes-use-gateway.network', 'dhcp-client-ipv6-only.network', 'dhcp-client-ipv6-rapid-commit.network', 'dhcp-client-keep-configuration-dhcp-on-stop.network', @@ -2937,7 +2937,6 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): 'dhcp-client-use-dns-no.network', 'dhcp-client-use-dns-yes.network', 'dhcp-client-use-domains.network', - 'dhcp-client-use-routes-no.network', 'dhcp-client-vrf.network', 'dhcp-client-with-ipv4ll-fallback-with-dhcp-server.network', 'dhcp-client-with-ipv4ll-fallback-without-dhcp-server.network', @@ -2946,7 +2945,6 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): 'dhcp-server-decline.network', 'dhcp-server-veth-peer.network', 'dhcp-v4-server-veth-peer.network', - 'dhcp-client-use-domains.network', 'static.network'] def setUp(self): @@ -3027,8 +3025,21 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.assertRegex(output, r'192.168.5.7 proto dhcp scope link src 192.168.5.181 metric 1024') self.assertRegex(output, r'192.168.5.8 proto dhcp scope link src 192.168.5.181 metric 1024') - def test_dhcp_client_ipv4_use_routes_no(self): - copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv4-use-routes-no.network') + def test_dhcp_client_ipv4_use_routes_gateway(self): + for (routes, gateway) in itertools.product([True, False, None], repeat=2): + self.setUp() + with self.subTest(routes=routes, gateway=gateway): + self._test_dhcp_client_ipv4_use_routes_gateway(routes, gateway) + self.tearDown() + + def _test_dhcp_client_ipv4_use_routes_gateway(self, routes, gateway): + testunit = 'dhcp-client-ipv4-use-routes-use-gateway.network' + testunits = ['25-veth.netdev', 'dhcp-server-veth-peer.network', testunit] + if routes != None: + testunits.append(f'{testunit}.d/use-routes-{routes}.conf'); + if gateway != None: + testunits.append(f'{testunit}.d/use-gateway-{gateway}.conf'); + copy_unit_to_networkd_unit_path(*testunits, dropins=False) start_networkd() self.wait_online(['veth-peer:carrier']) @@ -3037,22 +3048,31 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): output = check_output('ip route show dev veth99') print(output) - self.assertNotRegex(output, r'192.168.5.5') - self.assertRegex(output, r'default via 192.168.5.1 proto dhcp src 192.168.5.181 metric 1024') - self.assertRegex(output, r'192.168.5.1 proto dhcp scope link src 192.168.5.181 metric 1024') - def test_dhcp_client_ipv4_use_gateway_no(self): - copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv4-use-gateway-no.network') + # UseRoutes= defaults to true + useroutes = routes in [True, None] + # UseGateway= defaults to useroutes + usegateway = useroutes if gateway == None else gateway - start_networkd() - self.wait_online(['veth-peer:carrier']) - start_dnsmasq(additional_options='--dhcp-option=option:dns-server,192.168.5.6,192.168.5.7', lease_time='2m') - self.wait_online(['veth99:routable', 'veth-peer:routable']) + # Check UseRoutes= + if useroutes: + self.assertRegex(output, r'192.168.5.0/24 via 192.168.5.5 proto dhcp src 192.168.5.181 metric 1024') + else: + self.assertNotRegex(output, r'192.168.5.5') - output = check_output('ip route show dev veth99') - print(output) - self.assertRegex(output, r'192.168.5.0/24 via 192.168.5.5 proto dhcp src 192.168.5.181 metric 1024') - self.assertNotRegex(output, r'default via 192.168.5.1') + # Check UseGateway= + if usegateway: + self.assertRegex(output, r'default via 192.168.5.1 proto dhcp src 192.168.5.181 metric 1024') + else: + self.assertNotRegex(output, r'default via 192.168.5.1') + + # check for routes to DNS server, only if using gateway + if usegateway: + self.assertRegex(output, r'192.168.5.6 proto dhcp scope link src 192.168.5.181 metric 1024') + self.assertRegex(output, r'192.168.5.7 proto dhcp scope link src 192.168.5.181 metric 1024') + else: + self.assertNotRegex(output, r'192.168.5.6') + self.assertNotRegex(output, r'192.168.5.7') def test_dhcp_client_ipv4_ipv6(self): copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-only.network',