diff options
author | Thomas Haller <thaller@redhat.com> | 2017-09-28 14:45:17 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-09-28 14:45:17 +0200 |
commit | a47c48fd84e2561bad93f9e4f12fece7347ae5b5 (patch) | |
tree | 893a8afd85737eda10075cba88c69023efa55774 | |
parent | c9edd222c56cc2ecf55bba64012798c99252f64a (diff) | |
parent | 5778bc6a34f2291d68247695119f2170bc3bf8b3 (diff) | |
download | NetworkManager-a47c48fd84e2561bad93f9e4f12fece7347ae5b5.tar.gz |
core: merge branch 'th/device-manage-conf'
https://github.com/NetworkManager/NetworkManager/pull/29
-rw-r--r-- | man/NetworkManager.conf.xml | 15 | ||||
-rw-r--r-- | src/devices/nm-device.c | 50 | ||||
-rw-r--r-- | src/devices/nm-device.h | 6 | ||||
-rw-r--r-- | src/nm-config.h | 1 |
4 files changed, 66 insertions, 6 deletions
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 52267b95be..d9d5afcf96 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -821,7 +821,7 @@ ipv6.ip6-privacy=1 <programlisting> [device] match-device=interface-name:eth3 -unmanaged=1 +managed=1 </programlisting> </para> <refsect2> @@ -829,6 +829,19 @@ unmanaged=1 <para> The following properties can be configured per-device. <variablelist> + <varlistentry id="managed"> + <term><varname>managed</varname></term> + <listitem> + <para> + Whether the device is managed or not. A device can be + marked as managed via udev rules (ENV{NM_UNMANAGED}), + or via setting plugins (keyfile.unmanaged-devices). + This is yet another way. Note that this configuration + can be overruled at runtime via D-Bus. Also, it has + higher priority then udev rules. + </para> + </listitem> + </varlistentry> <varlistentry id="ignore-carrier"> <term><varname>ignore-carrier</varname></term> <listitem> diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 96e39bf768..5e0940c451 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -2671,6 +2671,7 @@ device_link_changed (NMDevice *self) NMDeviceStateReason reason; nm_device_set_unmanaged_by_user_udev (self); + nm_device_set_unmanaged_by_user_conf (self); reason = NM_DEVICE_STATE_REASON_NOW_MANAGED; @@ -3309,6 +3310,7 @@ realize_start_setup (NMDevice *self, nm_device_set_unmanaged_flags (self, NM_UNMANAGED_LOOPBACK, priv->ifindex == 1); nm_device_set_unmanaged_by_user_udev (self); + nm_device_set_unmanaged_by_user_conf (self); nm_device_set_unmanaged_flags (self, NM_UNMANAGED_PLATFORM_INIT, plink && !plink->initialized); @@ -11191,6 +11193,7 @@ NM_UTILS_FLAGS2STR_DEFINE (nm_unmanaged_flags2str, NMUnmanagedFlags, NM_UTILS_FLAGS2STR (NM_UNMANAGED_USER_EXPLICIT, "user-explicit"), NM_UTILS_FLAGS2STR (NM_UNMANAGED_BY_DEFAULT, "by-default"), NM_UTILS_FLAGS2STR (NM_UNMANAGED_USER_SETTINGS, "user-settings"), + NM_UTILS_FLAGS2STR (NM_UNMANAGED_USER_CONF, "user-conf"), NM_UTILS_FLAGS2STR (NM_UNMANAGED_USER_UDEV, "user-udev"), NM_UTILS_FLAGS2STR (NM_UNMANAGED_EXTERNAL_DOWN, "external-down"), NM_UTILS_FLAGS2STR (NM_UNMANAGED_IS_SLAVE, "is-slave"), @@ -11283,11 +11286,19 @@ _get_managed_by_flags(NMUnmanagedFlags flags, NMUnmanagedFlags mask, gboolean fo if (NM_FLAGS_ANY (mask, NM_UNMANAGED_USER_UDEV)) { /* configuration from udev or nm-config overwrites the by-default flag - * which is based on the device type. */ - flags &= ~NM_UNMANAGED_BY_DEFAULT; + * which is based on the device type. + * configuration from udev overwrites external-down */ + flags &= ~( NM_UNMANAGED_BY_DEFAULT + | NM_UNMANAGED_EXTERNAL_DOWN); + } - /* configuration from udev overwrites external-down */ - flags &= ~NM_UNMANAGED_EXTERNAL_DOWN; + if (NM_FLAGS_ANY (mask, NM_UNMANAGED_USER_CONF)) { + /* configuration from NetworkManager.conf overwrites the by-default flag + * which is based on the device type. + * It also overwrites the udev configuration and external-down */ + flags &= ~( NM_UNMANAGED_BY_DEFAULT + || NM_UNMANAGED_USER_UDEV + || NM_UNMANAGED_EXTERNAL_DOWN); } if ( NM_FLAGS_HAS (mask, NM_UNMANAGED_IS_SLAVE) @@ -11299,9 +11310,9 @@ _get_managed_by_flags(NMUnmanagedFlags flags, NMUnmanagedFlags mask, gboolean fo if (NM_FLAGS_HAS (mask, NM_UNMANAGED_USER_EXPLICIT)) { /* if the device is managed by user-decision, certain other flags * are ignored. */ - flags &= ~( NM_UNMANAGED_BY_DEFAULT | NM_UNMANAGED_USER_UDEV + | NM_UNMANAGED_USER_CONF | NM_UNMANAGED_EXTERNAL_DOWN); } @@ -11608,6 +11619,35 @@ nm_device_set_unmanaged_by_user_udev (NMDevice *self) } void +nm_device_set_unmanaged_by_user_conf (NMDevice *self) +{ + gboolean value; + NMUnmanFlagOp set_op; + + value = nm_config_data_get_device_config_boolean (NM_CONFIG_GET_DATA, + NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED, + self, + -1, + TRUE); + switch (value) { + case TRUE: + set_op = NM_UNMAN_FLAG_OP_SET_MANAGED; + break; + case FALSE: + set_op = NM_UNMAN_FLAG_OP_SET_UNMANAGED; + break; + default: + set_op = NM_UNMAN_FLAG_OP_FORGET; + break; + } + + nm_device_set_unmanaged_by_flags (self, + NM_UNMANAGED_USER_CONF, + set_op, + NM_DEVICE_STATE_REASON_USER_REQUESTED); +} + +void nm_device_set_unmanaged_by_quitting (NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h index ffd5b847de..5b34446949 100644 --- a/src/devices/nm-device.h +++ b/src/devices/nm-device.h @@ -580,6 +580,10 @@ void nm_device_copy_ip6_dns_config (NMDevice *self, NMDevice *from_device); * the settings plugins, such as NM_CONTROLLED=no in ifcfg-rh), it cannot * be overruled and is authorative. That is because users may depend on * dropping a ifcfg-rh file to ensure the device is unmanaged. + * @NM_UNMANAGED_USER_CONF: %TRUE when unmanaged by user decision via + * the NetworkManager.conf ("unmanaged" in the [device] section). + * Contray to @NM_UNMANAGED_USER_SETTINGS, this can be overwritten via + * D-Bus. * @NM_UNMANAGED_BY_DEFAULT: %TRUE for certain device types where we unmanage * them by default * @NM_UNMANAGED_USER_UDEV: %TRUE when unmanaged by user decision (via UDev rule) @@ -604,6 +608,7 @@ typedef enum { /*< skip >*/ /* These flags can be non-effective and be overwritten * by other flags. */ NM_UNMANAGED_BY_DEFAULT = (1LL << 8), + NM_UNMANAGED_USER_CONF = (1LL << 9), NM_UNMANAGED_USER_UDEV = (1LL << 10), NM_UNMANAGED_EXTERNAL_DOWN = (1LL << 11), NM_UNMANAGED_IS_SLAVE = (1LL << 12), @@ -634,6 +639,7 @@ void nm_device_set_unmanaged_by_flags_queue (NMDevice *self, NMDeviceStateReason reason); void nm_device_set_unmanaged_by_user_settings (NMDevice *self); void nm_device_set_unmanaged_by_user_udev (NMDevice *self); +void nm_device_set_unmanaged_by_user_conf (NMDevice *self); void nm_device_set_unmanaged_by_quitting (NMDevice *device); gboolean nm_device_is_nm_owned (NMDevice *device); diff --git a/src/nm-config.h b/src/nm-config.h index 1f9d4aba4c..47e929884c 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -75,6 +75,7 @@ #define NM_CONFIG_KEYFILE_KEY_IFUPDOWN_MANAGED "managed" #define NM_CONFIG_KEYFILE_KEY_AUDIT "audit" +#define NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED "managed" #define NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER "ignore-carrier" #define NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS "sriov-num-vfs" |