From 150d3b8ea748f45e80b1bd4f5f1ae1554fc5e7fa Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 14 Jul 2019 10:29:40 +0900 Subject: [PATCH 1/3] network:dhcp4: request domain search list if UseDomains=yes Closes #8174. --- src/network/networkd-dhcp4.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 7ed91cebd1..5ada9f0d01 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1041,6 +1041,12 @@ int dhcp4_configure(Link *link) { return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for classless static route: %m"); } + if (link->network->dhcp_use_domains != DHCP_USE_DOMAINS_NO && !link->network->dhcp_anonymize) { + r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_DOMAIN_SEARCH_LIST); + if (r < 0) + return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for domain search list: %m"); + } + if (link->network->dhcp_use_ntp) { r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_NTP_SERVER); if (r < 0) From a0cd6da5bb4a62aa0d26cb2c38182d6324dc529c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 14 Jul 2019 10:30:24 +0900 Subject: [PATCH 2/3] network: honor IPv6AcceptRA.UseDomains= setting --- src/network/networkd-link.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 5565e08578..d7c2d393cd 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3557,14 +3557,16 @@ int link_save(Link *link) { fputs_with_space(f, p, NULL, &space); if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES) { - NDiscDNSSL *dd; - if (dhcp_domainname) fputs_with_space(f, dhcp_domainname, NULL, &space); if (dhcp_domains) fputstrv(f, dhcp_domains, NULL, &space); if (dhcp6_domains) fputstrv(f, dhcp6_domains, NULL, &space); + } + + if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_YES) { + NDiscDNSSL *dd; SET_FOREACH(dd, link->ndisc_dnssl, i) fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space); @@ -3578,14 +3580,16 @@ int link_save(Link *link) { fputs_with_space(f, p, NULL, &space); if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_ROUTE) { - NDiscDNSSL *dd; - if (dhcp_domainname) fputs_with_space(f, dhcp_domainname, NULL, &space); if (dhcp_domains) fputstrv(f, dhcp_domains, NULL, &space); if (dhcp6_domains) fputstrv(f, dhcp6_domains, NULL, &space); + } + + if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_ROUTE) { + NDiscDNSSL *dd; SET_FOREACH(dd, link->ndisc_dnssl, i) fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space); From e0c1341df2bc3b46ceaf1fb82da388a5d49b5897 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 14 Jul 2019 10:46:16 +0900 Subject: [PATCH 3/3] test-network: add tests for DHCPv4.UseDomains= --- .../conf/dhcp-client-use-domains.network | 9 +++++++++ test/test-network/systemd-networkd-tests.py | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/test-network/conf/dhcp-client-use-domains.network diff --git a/test/test-network/conf/dhcp-client-use-domains.network b/test/test-network/conf/dhcp-client-use-domains.network new file mode 100644 index 0000000000..0d0e2dd7b6 --- /dev/null +++ b/test/test-network/conf/dhcp-client-use-domains.network @@ -0,0 +1,9 @@ +[Match] +Name=veth99 + +[Network] +DHCP=ipv4 +IPv6AcceptRA=no + +[DHCPv4] +UseDomains=yes diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index e396af05da..901171e899 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -2233,6 +2233,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): 'dhcp-client-use-dns-ipv4.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', @@ -2241,6 +2242,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): 'dhcp-client.network', 'dhcp-server-veth-peer.network', 'dhcp-v4-server-veth-peer.network', + 'dhcp-client-use-domains.network', 'static.network'] def setUp(self): @@ -2860,6 +2862,23 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.assertRegex(output, '192.168.5.1') self.assertRegex(output, '2600::1') + def test_dhcp_client_use_domains(self): + copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-use-domains.network') + + start_networkd() + wait_online(['veth-peer:carrier']) + start_dnsmasq('--dhcp-option=option:domain-search,example.com') + wait_online(['veth99:routable', 'veth-peer:routable']) + + output = check_output(*networkctl_cmd, 'status', 'veth99', env=env) + print(output) + self.assertRegex(output, 'Search Domains: example.com') + + time.sleep(3) + output = check_output(*resolvectl_cmd, 'domain', 'veth99', env=env) + print(output) + self.assertRegex(output, 'example.com') + if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--build-dir', help='Path to build dir', dest='build_dir')