mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-29 11:30:12 +01:00
checkpoint: better restore device managed state on rollback
Manage a device again if it was managed before the checkpoint. https://bugzilla.redhat.com/show_bug.cgi?id=1464904
This commit is contained in:
parent
1fbd8c079c
commit
67bfdbfc91
1 changed files with 18 additions and 6 deletions
|
|
@ -46,7 +46,7 @@ typedef struct {
|
|||
guint64 ac_version_id;
|
||||
NMDeviceState state;
|
||||
bool realized:1;
|
||||
bool unmanaged_explicit:1;
|
||||
NMUnmanFlagOp unmanaged_explicit;
|
||||
} DeviceCheckpoint;
|
||||
|
||||
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
|
||||
|
|
@ -224,9 +224,19 @@ nm_checkpoint_rollback (NMCheckpoint *self)
|
|||
}
|
||||
|
||||
activate:
|
||||
/* Manage the device again if needed */
|
||||
if ( nm_device_get_unmanaged_flags (device, NM_UNMANAGED_USER_EXPLICIT)
|
||||
&& dev_checkpoint->unmanaged_explicit != NM_UNMAN_FLAG_OP_SET_UNMANAGED) {
|
||||
_LOGD ("rollback: restore unmanaged user-explicit");
|
||||
nm_device_set_unmanaged_by_flags_queue (device,
|
||||
NM_UNMANAGED_USER_EXPLICIT,
|
||||
dev_checkpoint->unmanaged_explicit,
|
||||
NM_DEVICE_STATE_REASON_NOW_MANAGED);
|
||||
}
|
||||
|
||||
if (dev_checkpoint->state == NM_DEVICE_STATE_UNMANAGED) {
|
||||
if ( nm_device_get_state (device) != NM_DEVICE_STATE_UNMANAGED
|
||||
|| dev_checkpoint->unmanaged_explicit) {
|
||||
|| dev_checkpoint->unmanaged_explicit == NM_UNMAN_FLAG_OP_SET_UNMANAGED) {
|
||||
_LOGD ("rollback: explicitly unmanage device");
|
||||
nm_device_set_unmanaged_by_flags_queue (device,
|
||||
NM_UNMANAGED_USER_EXPLICIT,
|
||||
|
|
@ -370,19 +380,21 @@ device_checkpoint_create (NMDevice *device,
|
|||
NMConnection *applied_connection;
|
||||
NMSettingsConnection *settings_connection;
|
||||
const char *path;
|
||||
gboolean unmanaged_explicit;
|
||||
NMActRequest *act_request;
|
||||
|
||||
path = nm_exported_object_get_path (NM_EXPORTED_OBJECT (device));
|
||||
unmanaged_explicit = !!nm_device_get_unmanaged_flags (device,
|
||||
NM_UNMANAGED_USER_EXPLICIT);
|
||||
|
||||
dev_checkpoint = g_slice_new0 (DeviceCheckpoint);
|
||||
dev_checkpoint->device = g_object_ref (device);
|
||||
dev_checkpoint->original_dev_path = g_strdup (path);
|
||||
dev_checkpoint->state = nm_device_get_state (device);
|
||||
dev_checkpoint->realized = nm_device_is_real (device);
|
||||
dev_checkpoint->unmanaged_explicit = unmanaged_explicit;
|
||||
|
||||
if (nm_device_get_unmanaged_mask (device, NM_UNMANAGED_USER_EXPLICIT)) {
|
||||
dev_checkpoint->unmanaged_explicit =
|
||||
!!nm_device_get_unmanaged_flags (device, NM_UNMANAGED_USER_EXPLICIT);
|
||||
} else
|
||||
dev_checkpoint->unmanaged_explicit = NM_UNMAN_FLAG_OP_FORGET;
|
||||
|
||||
applied_connection = nm_device_get_applied_connection (device);
|
||||
if (applied_connection) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue