# systemd-networkd tests
import argparse
+import itertools
import os
import re
import shutil
'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',
'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',
'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):
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'])
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',