diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-05-04 16:52:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-04 16:52:07 +0200 |
commit | c26f3b1c86d7bd6cacbb219a2092aa113f217b36 (patch) | |
tree | bdc676ccba0a05221b3191c781d8dd454a14f3e2 /src/network/networkd-dhcp4.c | |
parent | 6450ee3f8c841dce72d8d5b986813bf2cf7dbdf8 (diff) | |
parent | 63c598ede3a6e78417cdc5d13100ca08b4bfb809 (diff) | |
download | systemd-c26f3b1c86d7bd6cacbb219a2092aa113f217b36.tar.gz |
Merge pull request #12429 from ssahani/link-local-fallback
networkd: Option to use LinkLocalAddressing only when DHCP fails
Diffstat (limited to 'src/network/networkd-dhcp4.c')
-rw-r--r-- | src/network/networkd-dhcp4.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 301d9c67b9..c630359027 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -511,6 +511,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { return 0; } + static void dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { Link *link = userdata; int r = 0; @@ -523,9 +524,24 @@ static void dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { return; switch (event) { - case SD_DHCP_CLIENT_EVENT_EXPIRED: case SD_DHCP_CLIENT_EVENT_STOP: + + if (link_ipv4ll_fallback_enabled(link)) { + assert(link->ipv4ll); + + log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address"); + + r = sd_ipv4ll_start(link->ipv4ll); + if (r < 0) { + log_link_warning(link, "Could not acquire IPv4 link-local address: %m"); + return; + } + } + + _fallthrough_; + case SD_DHCP_CLIENT_EVENT_EXPIRED: case SD_DHCP_CLIENT_EVENT_IP_CHANGE: + if (link->network->dhcp_critical) { log_link_error(link, "DHCPv4 connection considered system critical, ignoring request to reconfigure it."); return; |