[systemd-commits] man/systemd-networkd.service.xml src/network

Tom Gundersen tomegun at kemper.freedesktop.org
Mon Jan 13 12:55:12 PST 2014


 man/systemd-networkd.service.xml |   21 +++++++++++++++++++++
 src/network/networkd-gperf.gperf |    1 +
 src/network/networkd-link.c      |   13 ++++++++-----
 src/network/networkd-network.c   |    4 +++-
 src/network/networkd.h           |    1 +
 5 files changed, 34 insertions(+), 6 deletions(-)

New commits:
commit 5be4d38e31281727b6f45ae869136bb01a1f7790
Author: Tom Gundersen <teg at jklm.no>
Date:   Mon Jan 13 21:28:53 2014 +0100

    networkd: DHCPv4 - allow opting out of using DNS servers
    
    Setting UseDNS=no will ignore any received DNS servers.

diff --git a/man/systemd-networkd.service.xml b/man/systemd-networkd.service.xml
index de45d10..2c1bbf7 100644
--- a/man/systemd-networkd.service.xml
+++ b/man/systemd-networkd.service.xml
@@ -193,6 +193,14 @@
                                         </listitem>
                                 </varlistentry>
                                 <varlistentry>
+                                        <term><varname>DNS</varname></term>
+                                        <listitem>
+                                                <para>A DNS server address, which must be in the format described in
+                                                <citerefentry><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                                                .</para>
+                                        </listitem>
+                                </varlistentry>
+                                <varlistentry>
                                         <term><varname>Bridge</varname></term>
                                         <listitem>
                                                 <para>The name of the bridge to add the configured link to.</para>
@@ -233,7 +241,20 @@
                                                 prefixlength, if ommitted a full-length host route is assumed.</para>
                                         </listitem>
                                 </varlistentry>
+                        </variablelist>
+
+                        <para>The <literal>[DHCPv4]</literal> section accepts the following keys:</para>
+
+                        <variablelist class='network-directives'>
+                                <varlistentry>
+                                        <term><varname>UseDNS</varname></term>
+                                        <listitem>
+                                                <para>When true (the default) the DNS servers received from the DHCP server will
+                                                be used, and take precedence over any statically configured ones.</para>
+                                        </listitem>
+                                </varlistentry>
                        </variablelist>
+
                 </refsect2>
         </refsect1>
 
diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf
index 92954a8..3e20681 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 5dd8e91..6186f7f 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 f987310..498dea6 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 607feba..26d7f6b 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);



More information about the systemd-commits mailing list