summaryrefslogtreecommitdiffstats
path: root/src/libsystemd-network
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-10-08 16:51:25 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-11-30 04:37:36 +0100
commitfb536bc5daf4a57b3bdd277480d599cbf785b37d (patch)
tree7a3b8c02ecde0299d42bfa75c241571c87c76589 /src/libsystemd-network
parentnetworkd: merge ll addressing fallback modes into normal "boolean" values (diff)
downloadsystemd-fb536bc5daf4a57b3bdd277480d599cbf785b37d.tar.xz
systemd-fb536bc5daf4a57b3bdd277480d599cbf785b37d.zip
sd-dhcp-client: report transient DHCP failure to the caller
So far we only reported major state transitions like failure to acquire the message. Let's report the initial failure after a few timeouts in a new event type. The number of timeouts is hardcoded as 3, since Windows seems to be using that. I don't think we need to make this configurable out of the box. A reasonable default may be enough.
Diffstat (limited to 'src/libsystemd-network')
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 76f762cf96..f47a542483 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -38,6 +38,9 @@
#define RESTART_AFTER_NAK_MIN_USEC (1 * USEC_PER_SEC)
#define RESTART_AFTER_NAK_MAX_USEC (30 * USEC_PER_MINUTE)
+#define TRANSIENT_FAILURE_ATTEMPTS 3 /* Arbitrary limit: how many attempts are considered enough to report
+ * transient failure. */
+
typedef struct sd_dhcp_client_id {
uint8_t type;
union {
@@ -1299,6 +1302,9 @@ static int client_timeout_resend(
goto error;
}
+ if (client->attempt >= TRANSIENT_FAILURE_ATTEMPTS)
+ client_notify(client, SD_DHCP_CLIENT_EVENT_TRANSIENT_FAILURE);
+
return 0;
error: