From 5be4d38e31281727b6f45ae869136bb01a1f7790 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Mon, 13 Jan 2014 21:28:53 +0100 Subject: networkd: DHCPv4 - allow opting out of using DNS servers Setting UseDNS=no will ignore any received DNS servers. --- src/network/networkd-gperf.gperf | 1 + src/network/networkd-link.c | 13 ++++++++----- src/network/networkd-network.c | 4 +++- src/network/networkd.h | 1 + 4 files changed, 13 insertions(+), 6 deletions(-) (limited to 'src/network') diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf index 92954a8365..3e20681c30 100644 --- a/src/network/networkd-gperf.gperf +++ b/src/network/networkd-gperf.gperf @@ -30,5 +30,6 @@ Address.Address, config_parse_address, 0, 0 Address.Label, config_parse_label, 0, 0 Route.Gateway, config_parse_gateway, 0, 0 Route.Destination, config_parse_destination, 0, 0 +DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns) Bridge.Description, config_parse_string, 0, offsetof(Bridge, description) Bridge.Name, config_parse_ifname, 0, offsetof(Bridge, name) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 5dd8e91007..6186f7f892 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -319,6 +319,7 @@ static void dhcp_handler(sd_dhcp_client *client, int event, void *userdata) { int r; assert(link); + assert(link->network); if (link->state == LINK_STATE_FAILED) return; @@ -421,11 +422,13 @@ static void dhcp_handler(sd_dhcp_client *client, int event, void *userdata) { addr = NULL; rt = NULL; - r = sd_dhcp_client_get_dns(client, &nameservers); - if (r >= 0) { - r = manager_update_resolv_conf(link->manager); - if (r < 0) - log_error("Failed to update resolv.conf"); + if (link->network->dhcp_dns) { + r = sd_dhcp_client_get_dns(client, &nameservers); + if (r >= 0) { + r = manager_update_resolv_conf(link->manager); + if (r < 0) + log_error("Failed to update resolv.conf"); + } } link_enter_set_addresses(link); diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index f987310011..498dea65fe 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -65,7 +65,9 @@ static int network_load_one(Manager *manager, const char *filename) { if (!network->filename) return log_oom(); - r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0", config_item_perf_lookup, + network->dhcp_dns = true; + + r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCPv4\0", config_item_perf_lookup, (void*) network_gperf_lookup, false, false, network); if (r < 0) { log_warning("Could not parse config file %s: %s", filename, strerror(-r)); diff --git a/src/network/networkd.h b/src/network/networkd.h index 607feba0e7..26d7f6baa6 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -85,6 +85,7 @@ struct Network { char *description; Bridge *bridge; bool dhcp; + bool dhcp_dns; LIST_HEAD(Address, static_addresses); LIST_HEAD(Route, static_routes); -- cgit v1.2.3-54-g00ecf