diff options
| author | Beniamino Galvani <bgalvani@redhat.com> | 2017-09-28 16:43:06 +0200 |
|---|---|---|
| committer | Beniamino Galvani <bgalvani@redhat.com> | 2017-09-29 15:32:19 +0200 |
| commit | 32efb87d4dab81fe294d2a286e290f328d1662a1 (patch) | |
| tree | 13119febe43d7a739712946db12d2f507a761f17 /src/nm-policy.c | |
| parent | b80ee4a72c84ff51549a2d0b7278746681965d5b (diff) | |
| download | NetworkManager-32efb87d4dab81fe294d2a286e290f328d1662a1.tar.gz | |
core: unblock failed connections when the master is available
In case the connection is blocked because it failed, the availability
of a master is a good reason to unblock it so that it can be tried
again.
Fixes: a1ea422aadffa808dda780e005969ecadb8c260e
Diffstat (limited to 'src/nm-policy.c')
| -rw-r--r-- | src/nm-policy.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/nm-policy.c b/src/nm-policy.c index 81fce466ba..4e079d7b50 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -1586,6 +1586,7 @@ activate_slave_connections (NMPolicy *self, NMDevice *device) guint i; NMActRequest *req; gboolean internal_activation = FALSE; + gs_free NMSettingsConnection **connections = NULL; master_device = nm_device_get_iface (device); g_assert (master_device); @@ -1609,28 +1610,34 @@ activate_slave_connections (NMPolicy *self, NMDevice *device) internal_activation = subject && nm_auth_subject_is_internal (subject); } - if (!internal_activation) { - gs_free NMSettingsConnection **connections = NULL; + connections = nm_settings_get_connections_sorted (priv->settings, NULL); + for (i = 0; connections[i]; i++) { + NMConnection *slave; + NMSettingConnection *s_slave_con; + const char *slave_master; - connections = nm_settings_get_connections_sorted (priv->settings, NULL); + slave = NM_CONNECTION (connections[i]); - for (i = 0; connections[i]; i++) { - NMConnection *slave; - NMSettingConnection *s_slave_con; - const char *slave_master; + s_slave_con = nm_connection_get_setting_connection (slave); + g_assert (s_slave_con); + slave_master = nm_setting_connection_get_master (s_slave_con); + if (!slave_master) + continue; - slave = NM_CONNECTION (connections[i]); + if ( nm_streq0 (slave_master, master_device) + || nm_streq0 (slave_master, master_uuid_applied) + || nm_streq0 (slave_master, master_uuid_settings)) { + NMSettingsConnection *settings = NM_SETTINGS_CONNECTION (slave); + NMSettingsAutoconnectBlockedReason reason; - s_slave_con = nm_connection_get_setting_connection (slave); - g_assert (s_slave_con); - slave_master = nm_setting_connection_get_master (s_slave_con); - if (!slave_master) - continue; + if (!internal_activation) + nm_settings_connection_reset_autoconnect_retries (settings); - if ( !g_strcmp0 (slave_master, master_device) - || !g_strcmp0 (slave_master, master_uuid_applied) - || !g_strcmp0 (slave_master, master_uuid_settings)) - nm_settings_connection_reset_autoconnect_retries (NM_SETTINGS_CONNECTION (slave)); + reason = nm_settings_connection_get_autoconnect_blocked_reason (settings); + if (reason == NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_FAILED) { + reason = NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_UNBLOCKED; + nm_settings_connection_set_autoconnect_blocked_reason (settings, reason); + } } } |
