diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-02-01 16:39:43 +0900 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2022-02-01 11:18:53 +0000 |
commit | bab29f2ab791f1d0b82c883a0f1bfa16112088f3 (patch) | |
tree | 3dc19cc98f4a8d192e12025091e499d3e1d602fe /src/network/networkd-dhcp-server.c | |
parent | b0f83c2d82df97c67c3eecc1b18c2eded2d0cdf9 (diff) | |
download | systemd-bab29f2ab791f1d0b82c883a0f1bfa16112088f3.tar.gz |
network: dhcp-server: also refuse link local address to use as the server address
Diffstat (limited to 'src/network/networkd-dhcp-server.c')
-rw-r--r-- | src/network/networkd-dhcp-server.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c index 9acfd17d49..1c1ca1684c 100644 --- a/src/network/networkd-dhcp-server.c +++ b/src/network/networkd-dhcp-server.c @@ -58,12 +58,21 @@ void network_adjust_dhcp_server(Network *network) { ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) { if (section_is_invalid(address->section)) continue; - if (address->family == AF_INET && - !in4_addr_is_localhost(&address->in_addr.in) && - in4_addr_is_null(&address->in_addr_peer.in)) { - have = true; - break; - } + + if (address->family != AF_INET) + continue; + + if (in4_addr_is_localhost(&address->in_addr.in)) + continue; + + if (in4_addr_is_link_local(&address->in_addr.in)) + continue; + + if (in4_addr_is_set(&address->in_addr_peer.in)) + continue; + + have = true; + break; } if (!have) { log_warning("%s: DHCPServer= is enabled, but no static address configured. " @@ -130,6 +139,8 @@ static int link_find_dhcp_server_address(Link *link, Address **ret) { continue; if (in4_addr_is_localhost(&address->in_addr.in)) continue; + if (in4_addr_is_link_local(&address->in_addr.in)) + continue; if (in4_addr_is_set(&address->in_addr_peer.in)) continue; |