summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-04-07 14:24:12 +0200
committerLubomir Rintel <lkundrak@v3.sk>2015-04-13 13:51:27 +0200
commitbcc79cc0eb1172a51a25741cf61be6ae493672fb (patch)
treeb8f8c0d40c835dcecf7da3fa0f48907400686b7a
parentadb6e9afb196ffa9498e7c2708ba11fba9273377 (diff)
downloadNetworkManager-lr/veth-no-external-up.tar.gz
device: turn off "unmanaged unless IFF_UP externally" for vethlr/veth-no-external-up
We currently don't manage a veth inside a container despite we should because it's an externally configured software interface and thus waits for IFF_UP. Given veths are prevented from being managed outside of a container by an udev rule anyway it's safe to lift the external IFF_UP requirement for them.
-rw-r--r--src/devices/nm-device-veth.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/devices/nm-device-veth.c b/src/devices/nm-device-veth.c
index 6a05cc3214..30994971ec 100644
--- a/src/devices/nm-device-veth.c
+++ b/src/devices/nm-device-veth.c
@@ -96,6 +96,15 @@ get_peer (NMDeviceVeth *self)
return priv->peer;
}
+static gboolean
+can_unmanaged_external_down (NMDevice *self)
+{
+ /* Unless running in a container, an udev rule causes these to be
+ * unmanaged. If there's no udev then we're probably in a container
+ * and should IFF_UP and configure the veth ourselves even if we
+ * didn't create it. */
+ return FALSE;
+}
/**************************************************************/
@@ -140,12 +149,15 @@ static void
nm_device_veth_class_init (NMDeviceVethClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (klass, sizeof (NMDeviceVethPrivate));
object_class->get_property = get_property;
object_class->dispose = dispose;
+ device_class->can_unmanaged_external_down = can_unmanaged_external_down;
+
/* properties */
g_object_class_install_property
(object_class, PROP_PEER,