summaryrefslogtreecommitdiff
path: root/src/nm-policy.c
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-09-28 16:43:06 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2017-09-29 15:32:19 +0200
commit32efb87d4dab81fe294d2a286e290f328d1662a1 (patch)
tree13119febe43d7a739712946db12d2f507a761f17 /src/nm-policy.c
parentb80ee4a72c84ff51549a2d0b7278746681965d5b (diff)
downloadNetworkManager-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.c41
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);
+ }
}
}