From c271d78d6b1e6cc7e585cdcae797da3bbd48f681 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 30 Apr 2017 17:30:44 +0200 Subject: [PATCH] device: don't await for IPv6 DAD to finish if we are ignoring that there's no carrier It's not the correct thing to do, but is the same behavior we've done previously. DAD is not even going to start until there's carrier and the client would just wait indefinitely. Ideally, the client would choose not to waiat, but it currently there's no way the client would discover what is going on. https://bugzilla.redhat.com/show_bug.cgi?id=1446367 (cherry picked from commit bd9988f9845313b9c281fab7a6d7488d7911a1a0) --- src/devices/nm-device.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index aa7f13f9e8..da581a0d4e 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -8499,11 +8499,14 @@ activate_stage5_ip6_config_commit (NMDevice *self) /* Check if we have to wait for DAD */ if (priv->ip6_state == IP_CONF && !priv->dad6_ip6_config) { - priv->dad6_ip6_config = dad6_get_pending_addresses (self); + if (!priv->carrier && priv->ignore_carrier && get_ip_config_may_fail (self, AF_INET6)) + _LOGI (LOGD_DEVICE | LOGD_IP6, "IPv6 DAD: carrier missing and ignored, not delaying activation"); + else + priv->dad6_ip6_config = dad6_get_pending_addresses (self); + if (priv->dad6_ip6_config) { - _LOGD (LOGD_DEVICE | LOGD_IP6, "IPv6 DAD: waiting termination"); + _LOGD (LOGD_DEVICE | LOGD_IP6, "IPv6 DAD: awaiting termination"); } else { - /* No tentative addresses, proceed right away */ _set_ip_state (self, AF_INET6, IP_DONE); check_ip_state (self, FALSE); }