summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-06-13 17:08:36 +0200
committerThomas Haller <thaller@redhat.com>2023-06-14 11:15:52 +0200
commitbd3162ad891547188589fd3019b18a9e7f3a9c71 (patch)
tree829bffa64b295a5d97fd7ce0385b2a27148de87c
parent6d75b7f348e6fc62287e1f7f90650cbf094c05f3 (diff)
core: allow resetting blocked reason for a device in nm_manager_devcon_autoconnect_blocked_reason_set()
-rw-r--r--src/core/nm-manager.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c
index d724f84eff..3eee169cee 100644
--- a/src/core/nm-manager.c
+++ b/src/core/nm-manager.c
@@ -1523,10 +1523,31 @@ nm_manager_devcon_autoconnect_blocked_reason_set(NMManager
gboolean changed = FALSE;
char buf[100];
- nm_assert(NM_IS_SETTINGS_CONNECTION(sett_conn));
+ nm_assert(!sett_conn || NM_IS_SETTINGS_CONNECTION(sett_conn));
+ nm_assert(!device || NM_IS_DEVICE(device));
nm_assert(value != NM_SETTINGS_AUTOCONNECT_BLOCKED_REASON_NONE);
nm_assert(!NM_FLAGS_ANY(value, ~(NM_SETTINGS_AUTOCONNECT_BLOCKED_REASON_FAILED)));
+ if (!sett_conn) {
+ if (!device)
+ g_return_val_if_reached(FALSE);
+ c_list_for_each_entry (data, &device->devcon_dev_lst_head, dev_lst) {
+ v = data->autoconnect.blocked_reason;
+ v = NM_FLAGS_ASSIGN(v, value, set);
+
+ if (data->autoconnect.blocked_reason == v)
+ continue;
+
+ _LOGT(LOGD_SETTINGS,
+ "block-autoconnect: " DEV_CON_DATA_LOG_FMT ": set blocked reason %s",
+ DEV_CON_DATA_LOG_ARGS_DATA(data),
+ nm_settings_autoconnect_blocked_reason_to_string(v, buf, sizeof(buf)));
+ data->autoconnect.blocked_reason = v;
+ changed = TRUE;
+ }
+ return changed;
+ }
+
if (device) {
data = _devcon_lookup_data(self, device, sett_conn, TRUE, TRUE);
v = data->autoconnect.blocked_reason;