]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: dhcp4: introduce RoutesToNTP= boolean setting
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 20 Apr 2021 17:23:00 +0000 (02:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 26 Apr 2021 15:01:18 +0000 (00:01 +0900)
man/systemd.network.xml
src/network/networkd-dhcp4.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
test/fuzz/fuzz-network-parser/directives.network

index ddba9a2cf2e87ab37117753d398b3659d280d045..7f137db2231cd10dddcf1efa29234e8289643dee 100644 (file)
@@ -1641,6 +1641,14 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
             <filename>systemd-timesyncd.service</filename>.</para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>RoutesToNTP=</varname></term>
+          <listitem>
+            <para>When true, the routes to the NTP servers received from the DHCP server will be
+            configured. When <varname>UseNTP=</varname> is disabled, this setting is ignored.
+            Defaults to true.</para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
           <term><varname>UseSIP=</varname></term>
           <listitem>
index b0b93d9f43997b5caa9dcc088b952eedbc7be663..c6fac85292fd76c5850f5dc1ae8d192b6fc60c4f 100644 (file)
@@ -549,6 +549,28 @@ static int link_set_routes_to_dns(Link *link, const struct in_addr *gw) {
         return link_set_routes_to_servers(link, dns, r, gw);
 }
 
+static int link_set_routes_to_ntp(Link *link, const struct in_addr *gw) {
+        const struct in_addr *ntp;
+        int r;
+
+        assert(link);
+        assert(link->dhcp_lease);
+        assert(link->network);
+        assert(gw);
+
+        if (!link->network->dhcp_use_ntp ||
+            !link->network->dhcp_routes_to_ntp)
+                return 0;
+
+        r = sd_dhcp_lease_get_ntp(link->dhcp_lease, &ntp);
+        if (IN_SET(r, 0, -ENODATA))
+                return 0;
+        if (r < 0)
+                return r;
+
+        return link_set_routes_to_servers(link, ntp, r, gw);
+}
+
 static int link_set_dhcp_routes(Link *link) {
         struct in_addr gw = {};
         Route *rt;
@@ -592,6 +614,10 @@ static int link_set_dhcp_routes(Link *link) {
         if (r < 0)
                 return log_link_error_errno(link, r, "DHCP error: Could not set routes to DNS servers: %m");
 
+        r = link_set_routes_to_ntp(link, &gw);
+        if (r < 0)
+                return log_link_error_errno(link, r, "DHCP error: Could not set routes to NTP servers: %m");
+
         return 0;
 }
 
index 19d52a92968b21cafc420f4b23c39ee3850829c2..4228107d29d2e4b0d77e1d34f874b3bf1815651b 100644 (file)
@@ -197,6 +197,7 @@ DHCPv4.ClientIdentifier,                     config_parse_dhcp_client_identifier
 DHCPv4.UseDNS,                               config_parse_dhcp_use_dns,                                0,                             0
 DHCPv4.RoutesToDNS,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_routes_to_dns)
 DHCPv4.UseNTP,                               config_parse_dhcp_use_ntp,                                0,                             0
+DHCPv4.RoutesToNTP,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_routes_to_ntp)
 DHCPv4.UseSIP,                               config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_sip)
 DHCPv4.UseMTU,                               config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_mtu)
 DHCPv4.UseHostname,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_use_hostname)
index 89b78ca1205a24c6908456ab06b63ea58ce6937a..78a402625810b2f6541ec39c485df497cea6d29b 100644 (file)
@@ -304,6 +304,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                 .dhcp_duid.type = _DUID_TYPE_INVALID,
                 .dhcp_critical = -1,
                 .dhcp_use_ntp = true,
+                .dhcp_routes_to_ntp = true,
                 .dhcp_use_sip = true,
                 .dhcp_use_dns = true,
                 .dhcp_routes_to_dns = true,
index 0013de551892c2ba04599cd96a1c9530d8279d6e..e8c2428becc29cada4d9f6091fab6ba2b2ff33d9 100644 (file)
@@ -142,6 +142,7 @@ struct Network {
         bool dhcp_routes_to_dns;
         bool dhcp_use_ntp;
         bool dhcp_use_ntp_set;
+        bool dhcp_routes_to_ntp;
         bool dhcp_use_sip;
         bool dhcp_use_mtu;
         bool dhcp_use_routes;
index d6c1cc7f92fc5aa18100c3fb23c20c236e758cc0..4f1ad785d7bbdf11d83bdc7f3d0dc167ed30ae8f 100644 (file)
@@ -94,6 +94,7 @@ UseGateway=
 IAID=
 UserClass=
 UseNTP=
+RoutesToNTP=
 UseSIP=
 UseMTU=
 UseDomainName=