diff options
-rw-r--r-- | man/systemd.network.xml | 8 | ||||
-rw-r--r-- | src/network/networkd-dhcp4.c | 26 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-network.c | 1 | ||||
-rw-r--r-- | src/network/networkd-network.h | 1 | ||||
-rw-r--r-- | test/fuzz/fuzz-network-parser/directives.network | 1 |
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= |