diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-05-14 20:27:33 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-05-18 20:20:24 +0900 |
commit | 0017ba3165f69e8afb7f73127281bb9a7e5b5641 (patch) | |
tree | 289177e5396d359a86a84aaca0179fe49bd8e1f0 /src/network/networkd-address.c | |
parent | 998545a7d9607b49facd0e9868b893ac24942c51 (diff) | |
download | systemd-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.c | 26 |
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); |