diff options
Diffstat (limited to 'libnm-core/nm-connection.c')
-rw-r--r-- | libnm-core/nm-connection.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index b2c4d4eea0..04385aae99 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -724,7 +724,7 @@ _normalize_ip_config (NMConnection *self, GHashTable *parameters) const char *default_ip6_method = NULL; NMSettingIPConfig *s_ip4, *s_ip6; NMSetting *setting; - gboolean gateway_removed = FALSE; + gboolean changed = FALSE; if (parameters) default_ip6_method = g_hash_table_lookup (parameters, NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD); @@ -761,7 +761,14 @@ _normalize_ip_config (NMConnection *self, GHashTable *parameters) if ( nm_setting_ip_config_get_gateway (s_ip4) && nm_setting_ip_config_get_never_default (s_ip4)) { g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, NULL, NULL); - gateway_removed = TRUE; + changed = TRUE; + } + + if ( nm_streq0 (nm_setting_ip_config_get_method (s_ip4), + NM_SETTING_IP4_CONFIG_METHOD_DISABLED) + && !nm_setting_ip_config_get_may_fail (s_ip4)) { + g_object_set (s_ip4, NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE, NULL); + changed = TRUE; } } if (!s_ip6) { @@ -776,10 +783,17 @@ _normalize_ip_config (NMConnection *self, GHashTable *parameters) if ( nm_setting_ip_config_get_gateway (s_ip6) && nm_setting_ip_config_get_never_default (s_ip6)) { g_object_set (s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, NULL, NULL); - gateway_removed = TRUE; + changed = TRUE; + } + + if ( nm_streq0 (nm_setting_ip_config_get_method (s_ip6), + NM_SETTING_IP6_CONFIG_METHOD_IGNORE) + && !nm_setting_ip_config_get_may_fail (s_ip6)) { + g_object_set (s_ip6, NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE, NULL); + changed = TRUE; } } - return !s_ip4 || !s_ip6 || gateway_removed; + return !s_ip4 || !s_ip6 || changed; } } |