From 66a593fd5a48172b0a309fa943833000512ebb14 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sat, 15 Mar 2014 12:11:09 +0100 Subject: [PATCH] core: don't reject activating devices with incomplete IP config An activating device may have an IP config that is unrelated to the current activation (for example if it comes from capturing the existing config when NM is started), and that config might not have a gateway, which would have NM ignore that the device is activating until after DHCP. https://bugzilla.gnome.org/show_bug.cgi?id=726400 [thaller@redhat.com: move variables inside if-block] Signed-off-by: Thomas Haller (cherry picked from commit 86ca7dce0ca3e08b8a3ea41799d2c4c103559c53) --- src/nm-policy.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/nm-policy.c b/src/nm-policy.c index b54b94928e..d46aca04eb 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -105,7 +105,6 @@ get_best_ip4_device (NMPolicy *self, gboolean fully_activated) NMDeviceState state = nm_device_get_state (dev); NMActRequest *req; NMConnection *connection; - NMIP4Config *ip4_config; NMSettingIP4Config *s_ip4; int prio; const char *method = NULL; @@ -117,8 +116,13 @@ get_best_ip4_device (NMPolicy *self, gboolean fully_activated) if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES) continue; - ip4_config = nm_device_get_ip4_config (dev); - if (ip4_config) { + if (fully_activated) { + NMIP4Config *ip4_config; + + ip4_config = nm_device_get_ip4_config (dev); + if (!ip4_config) + continue; + /* Make sure the device has a gateway */ if (!nm_ip4_config_get_gateway (ip4_config) && (devtype != NM_DEVICE_TYPE_MODEM)) continue; @@ -126,8 +130,7 @@ get_best_ip4_device (NMPolicy *self, gboolean fully_activated) /* 'never-default' devices can't ever be the default */ if (nm_ip4_config_get_never_default (ip4_config)) continue; - } else if (fully_activated) - continue; + } req = nm_device_get_act_request (dev); g_assert (req); @@ -186,7 +189,6 @@ get_best_ip6_device (NMPolicy *self, gboolean fully_activated) NMDeviceState state = nm_device_get_state (dev); NMActRequest *req; NMConnection *connection; - NMIP6Config *ip6_config; NMSettingIP6Config *s_ip6; int prio; const char *method = NULL; @@ -198,15 +200,19 @@ get_best_ip6_device (NMPolicy *self, gboolean fully_activated) if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES) continue; - ip6_config = nm_device_get_ip6_config (dev); - if (ip6_config) { + if (fully_activated) { + NMIP6Config *ip6_config; + + ip6_config = nm_device_get_ip6_config (dev); + if (!ip6_config) + continue; + if (!nm_ip6_config_get_gateway (ip6_config) && (devtype != NM_DEVICE_TYPE_MODEM)) continue; if (nm_ip6_config_get_never_default (ip6_config)) continue; - } else if (fully_activated) - continue; + } req = nm_device_get_act_request (dev); g_assert (req);