summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-09-28 14:45:17 +0200
committerThomas Haller <thaller@redhat.com>2017-09-28 14:45:17 +0200
commita47c48fd84e2561bad93f9e4f12fece7347ae5b5 (patch)
tree893a8afd85737eda10075cba88c69023efa55774
parentc9edd222c56cc2ecf55bba64012798c99252f64a (diff)
parent5778bc6a34f2291d68247695119f2170bc3bf8b3 (diff)
downloadNetworkManager-a47c48fd84e2561bad93f9e4f12fece7347ae5b5.tar.gz
core: merge branch 'th/device-manage-conf'
https://github.com/NetworkManager/NetworkManager/pull/29
-rw-r--r--man/NetworkManager.conf.xml15
-rw-r--r--src/devices/nm-device.c50
-rw-r--r--src/devices/nm-device.h6
-rw-r--r--src/nm-config.h1
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"