diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2020-07-16 11:58:20 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-08-17 18:10:50 +0200 |
commit | 14ac9ba5c240348fbdc77c97198c9968a18251f1 (patch) | |
tree | 0a987024212781ee0ffbbc1e41c948ed75a916f9 | |
parent | 18f37ccac5434b93c51a54d683a6f4b207cab435 (diff) | |
download | NetworkManager-14ac9ba5c240348fbdc77c97198c9968a18251f1.tar.gz |
policy: block connection from autoconnect in case of failed dependency
A connection that fails due to dependency-failed is not able to
reconnect until the master connection activates again; when this
happens, the master clears the blocked reason for all its slaves in
activate_slave_connections() and tries to reconnect them. For this to
work, the slave should be marked as blocked when it fails with
dependency-failed.
(cherry picked from commit 725fed01cf7c8508cf426897340b2a4113406aab)
(cherry picked from commit e1755048e35aca682c7d0d233122d4ddaf3bb089)
(cherry picked from commit ecb134ac349a0bf6582833253b6d453d6bf997de)
(cherry picked from commit bb4781cc581a3c9fcefbfc1ea0be5e95aa3e287b)
(cherry picked from commit 70c642325f90f767954aa86079b1bc6a4946f15f)
-rw-r--r-- | src/nm-policy.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/nm-policy.c b/src/nm-policy.c index 1faba5c7be..5625986d1d 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -1807,7 +1807,7 @@ device_state_changed (NMDevice *device, if ( sett_conn && old_state >= NM_DEVICE_STATE_PREPARE && old_state <= NM_DEVICE_STATE_ACTIVATED) { - gboolean block_no_secrets = FALSE; + gboolean blocked = FALSE; int tries; guint64 con_v; @@ -1827,15 +1827,32 @@ device_state_changed (NMDevice *device, */ con_v = nm_settings_connection_get_last_secret_agent_version_id (sett_conn); if ( con_v == 0 - || con_v == nm_agent_manager_get_agent_version_id (priv->agent_mgr)) - block_no_secrets = TRUE; + || con_v == nm_agent_manager_get_agent_version_id (priv->agent_mgr)) { + _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to no secrets", + nm_settings_connection_get_id (sett_conn)); + nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, + NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NO_SECRETS, + TRUE); + blocked = TRUE; + } + } else if (nm_device_state_reason_check (reason) == NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED) { + /* A connection that fails due to dependency-failed is not + * able to reconnect until the master connection activates + * again; when this happens, the master clears the blocked + * reason for all its slaves in activate_slave_connections() + * and tries to reconnect them. For this to work, the slave + * should be marked as blocked when it fails with + * dependency-failed. + */ + _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to failed dependency", + nm_settings_connection_get_id (sett_conn)); + nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, + NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_FAILED, + TRUE); + blocked = TRUE; } - if (block_no_secrets) { - _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to no secrets", - nm_settings_connection_get_id (sett_conn)); - nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NO_SECRETS, TRUE); - } else { + if (!blocked) { tries = nm_settings_connection_autoconnect_retries_get (sett_conn); if (tries > 0) { _LOGD (LOGD_DEVICE, "connection '%s' failed to autoconnect; %d tries left", |