summaryrefslogtreecommitdiff
path: root/src/network/networkd-address.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-05-14 20:27:33 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-05-18 20:20:24 +0900
commit0017ba3165f69e8afb7f73127281bb9a7e5b5641 (patch)
tree289177e5396d359a86a84aaca0179fe49bd8e1f0 /src/network/networkd-address.c
parent998545a7d9607b49facd0e9868b893ac24942c51 (diff)
downloadsystemd-0017ba3165f69e8afb7f73127281bb9a7e5b5641.tar.gz
network: dhcp-server: introduce ServerAddress= setting
This may be useful when the link which DHCP server running on has multiple static addresses.
Diffstat (limited to 'src/network/networkd-address.c')
-rw-r--r--src/network/networkd-address.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 462907439a..29ab83a425 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -1157,6 +1157,32 @@ int link_request_static_addresses(Link *link) {
req->after_configure = static_address_after_configure;
}
+ if (in4_addr_is_set(&link->network->dhcp_server_address)) {
+ _cleanup_(address_freep) Address *address = NULL;
+
+ r = address_new(&address);
+ if (r < 0)
+ return log_oom();
+
+ address->family = AF_INET;
+ address->in_addr.in = link->network->dhcp_server_address;
+ address->prefixlen = link->network->dhcp_server_address_prefixlen;
+ address_set_broadcast(address);
+
+ /* The same address may be explicitly configured in [Address] or [Network] section.
+ * Configure the DHCP server address only when it is not. */
+ if (!link_is_static_address_configured(link, address)) {
+ Request *req;
+
+ r = link_request_address(link, TAKE_PTR(address), true, &link->static_address_messages,
+ static_address_handler, &req);
+ if (r < 0)
+ return r;
+
+ req->after_configure = static_address_after_configure;
+ }
+ }
+
if (link->static_address_messages == 0) {
link->static_addresses_configured = true;
link_check_ready(link);