diff options
author | Thomas Haller <thaller@redhat.com> | 2023-06-13 17:08:36 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-06-14 11:15:52 +0200 |
commit | bd3162ad891547188589fd3019b18a9e7f3a9c71 (patch) | |
tree | 829bffa64b295a5d97fd7ce0385b2a27148de87c | |
parent | 6d75b7f348e6fc62287e1f7f90650cbf094c05f3 (diff) |
core: allow resetting blocked reason for a device in nm_manager_devcon_autoconnect_blocked_reason_set()
-rw-r--r-- | src/core/nm-manager.c | 23 |
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; |