summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd.network.xml8
-rw-r--r--src/network/networkd-dhcp4.c26
-rw-r--r--src/network/networkd-network-gperf.gperf1
-rw-r--r--src/network/networkd-network.c1
-rw-r--r--src/network/networkd-network.h1
-rw-r--r--test/fuzz/fuzz-network-parser/directives.network1
6 files changed, 38 insertions, 0 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index ddba9a2cf2..7f137db223 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -1642,6 +1642,14 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></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>
<para>When true (the default), the SIP servers received from the DHCP server will be collected
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index b0b93d9f43..c6fac85292 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -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;
}
diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
index 19d52a9296..4228107d29 100644
--- a/src/network/networkd-network-gperf.gperf
+++ b/src/network/networkd-network-gperf.gperf
@@ -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)
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 89b78ca120..78a4026258 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -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,
diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
index 0013de5518..e8c2428bec 100644
--- a/src/network/networkd-network.h
+++ b/src/network/networkd-network.h
@@ -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;
diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network
index d6c1cc7f92..4f1ad785d7 100644
--- a/test/fuzz/fuzz-network-parser/directives.network
+++ b/test/fuzz/fuzz-network-parser/directives.network
@@ -94,6 +94,7 @@ UseGateway=
IAID=
UserClass=
UseNTP=
+RoutesToNTP=
UseSIP=
UseMTU=
UseDomainName=