From 4dd0b69a8807cfb550fab3dea4ed168dc7688cc3 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 29 Jun 2015 18:06:12 +0200 Subject: [PATCH] device: add debug log for setting unmanged flags Only set priv->unmanaged_flags in one place and log any changes. It is not trivial to understand from the logfile why a device is unmanged. --- src/devices/nm-device-generic.c | 18 ++++++++++++- src/devices/nm-device.c | 48 +++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/devices/nm-device-generic.c b/src/devices/nm-device-generic.c index 029a706475..168301ba02 100644 --- a/src/devices/nm-device-generic.c +++ b/src/devices/nm-device-generic.c @@ -125,7 +125,22 @@ nm_device_generic_new (NMPlatformLink *plink) static void nm_device_generic_init (NMDeviceGeneric *self) { - nm_device_set_initial_unmanaged_flag (NM_DEVICE (self), NM_UNMANAGED_DEFAULT, TRUE); +} + +static GObject * +constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + GObject *object; + + object = G_OBJECT_CLASS (nm_device_generic_parent_class)->constructor (type, + n_construct_params, + construct_params); + + nm_device_set_initial_unmanaged_flag (NM_DEVICE (object), NM_UNMANAGED_DEFAULT, TRUE); + + return object; } static void @@ -183,6 +198,7 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass) parent_class->connection_type = NM_SETTING_GENERIC_SETTING_NAME; + object_class->constructor = constructor; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 3d678108f5..d4aa2ae06f 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -384,6 +384,10 @@ static void nm_device_update_hw_address (NMDevice *self); static gboolean queued_ip4_config_change (gpointer user_data); static gboolean queued_ip6_config_change (gpointer user_data); +static void _set_unmanaged_flags (NMDevice *self, + NMUnmanagedFlags flags, + gboolean unmanaged); + /***********************************************************/ #define QUEUED_PREFIX "queued state change to " @@ -1448,7 +1452,7 @@ device_link_changed (NMDevice *self) * state higher than UNAVAILABLE, it is already IFF_UP * or an explicit activation request was received. */ - priv->unmanaged_flags &= ~NM_UNMANAGED_EXTERNAL_DOWN; + _set_unmanaged_flags (self, NM_UNMANAGED_EXTERNAL_DOWN, FALSE); } } else if (!external_down && !NM_FLAGS_HAS (info.flags, IFF_UP) && nm_device_get_state (self) <= NM_DEVICE_STATE_DISCONNECTED) { /* If the device is already disconnected and is set !IFF_UP, @@ -7668,8 +7672,8 @@ nm_device_get_managed (NMDevice *self) * default-unmanaged flag (eg, only NM_UNMANAGED_DEFAULT is set) then * the device is managed whenever it's not in the UNMANAGED state. */ - managed = !(priv->unmanaged_flags & ~NM_UNMANAGED_DEFAULT); - if (managed && (priv->unmanaged_flags & NM_UNMANAGED_DEFAULT)) + managed = !NM_FLAGS_ANY (priv->unmanaged_flags, ~NM_UNMANAGED_DEFAULT); + if (managed && NM_FLAGS_HAS (priv->unmanaged_flags, NM_UNMANAGED_DEFAULT)) managed = (priv->state > NM_DEVICE_STATE_UNMANAGED); return managed; @@ -7699,6 +7703,34 @@ nm_device_get_default_unmanaged (NMDevice *self) return nm_device_get_unmanaged_flag (self, NM_UNMANAGED_DEFAULT); } +static void +_set_unmanaged_flags (NMDevice *self, + NMUnmanagedFlags flags, + gboolean unmanaged) +{ + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); + + if (unmanaged) { + if (!NM_FLAGS_ALL (priv->unmanaged_flags, flags)) { + _LOGD (LOGD_DEVICE, "unmanaged: flags set to 0x%0llx (was 0x%0llx, %s 0x%0llx)", + (long long unsigned) (priv->unmanaged_flags | flags), + (long long unsigned) priv->unmanaged_flags, + "set", + (long long unsigned) (~priv->unmanaged_flags & flags)); + priv->unmanaged_flags |= flags; + } + } else { + if (NM_FLAGS_ANY (priv->unmanaged_flags, flags)) { + _LOGD (LOGD_DEVICE, "unmanaged: flags set to 0x%0llx (was 0x%0llx, %s 0x%0llx)", + (long long unsigned) (priv->unmanaged_flags & (~flags)), + (long long unsigned) priv->unmanaged_flags, + "clear", + (long long unsigned) (priv->unmanaged_flags & flags)); + priv->unmanaged_flags &= ~flags; + } + } +} + void nm_device_set_unmanaged (NMDevice *self, NMUnmanagedFlags flag, @@ -7714,10 +7746,7 @@ nm_device_set_unmanaged (NMDevice *self, priv = NM_DEVICE_GET_PRIVATE (self); was_managed = nm_device_get_managed (self); - if (unmanaged) - priv->unmanaged_flags |= flag; - else - priv->unmanaged_flags &= ~flag; + _set_unmanaged_flags (self, flag, unmanaged); now_managed = nm_device_get_managed (self); if (was_managed != now_managed) { @@ -7770,10 +7799,7 @@ nm_device_set_initial_unmanaged_flag (NMDevice *self, priv = NM_DEVICE_GET_PRIVATE (self); g_return_if_fail (priv->initialized == FALSE); - if (unmanaged) - priv->unmanaged_flags |= flag; - else - priv->unmanaged_flags &= ~flag; + _set_unmanaged_flags (self, flag, unmanaged); } void