diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 217cc6c8d2..0f775f7a35 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -15017,6 +15017,15 @@ set_managed(NMDevice *self, NMDeviceManaged managed, NMDeviceManagedFlags flags, NM_DEVICE_STATE_REASON_UNMANAGED_USER_EXPLICIT); } else { g_object_set(self, NM_DEVICE_MANAGED, !!managed, NULL); + + /* If requested, set the administrative state of the device to UP if the + * new managed state is YES, and to DOWN if it's NO. */ + if (flags & NM_DEVICE_MANAGED_FLAGS_SET_ADMIN_STATE) { + nm_platform_link_change_flags(nm_device_get_platform(self), + nm_device_get_ifindex(self), + IFF_UP, + !!managed); + } } } diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index 1bcbc00410..325060a0f3 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -1271,6 +1271,10 @@ typedef enum { * @NM_DEVICE_MANAGED_FLAGS_PERMANENT: to set the device managed state to the permanent (on disk) value. * @NM_DEVICE_MANAGED_FLAGS_BY_MAC: to match the device by MAC address, not by name. * This option only makes sense together with %NM_DEVICE_MANAGED_FLAGS_PERMANENT. + * @NM_DEVICE_MANAGED_FLAGS_SET_ADMIN_STATE: to set the administrative state of the + * device to up if the managed state is %NM_DEVICE_MANAGED_YES, and down if the managed state + * is %NM_DEVICE_MANAGED_NO. If the flag is not set, the administrative state is not changed. + * The flag is ignored for %NM_DEVICE_MANAGED_RESET. * @NM_DEVICE_MANAGED_FLAGS_ALL: all flags. * * Flags for the SetManaged() D-Bus call of a device and nm_device_set_managed_async(). @@ -1278,12 +1282,13 @@ typedef enum { * Since: 1.58 */ typedef enum /*< flags >*/ { - NM_DEVICE_MANAGED_FLAGS_NONE = 0, - NM_DEVICE_MANAGED_FLAGS_RUNTIME = 0x1, - NM_DEVICE_MANAGED_FLAGS_PERMANENT = 0x2, - NM_DEVICE_MANAGED_FLAGS_BY_MAC = 0x4, + NM_DEVICE_MANAGED_FLAGS_NONE = 0, + NM_DEVICE_MANAGED_FLAGS_RUNTIME = 0x1, + NM_DEVICE_MANAGED_FLAGS_PERMANENT = 0x2, + NM_DEVICE_MANAGED_FLAGS_BY_MAC = 0x4, + NM_DEVICE_MANAGED_FLAGS_SET_ADMIN_STATE = 0x8, - NM_DEVICE_MANAGED_FLAGS_ALL = 0x7, /* */ + NM_DEVICE_MANAGED_FLAGS_ALL = 0xF, /* */ } NMDeviceManagedFlags; /**