>From 9ec0f07d14937e199c977a3c9782f8d79cc456d9 Mon Sep 17 00:00:00 2001 From: Dan Williams <d...@redhat.com> Date: Fri, 4 Apr 2014 15:09:45 -0500 Subject: [PATCH] core: log when removing devices
Nothing logs when and why devices get removed, if they never change from the UNMANAGED state. --- src/devices/adsl/nm-atm-manager.c | 3 ++- src/devices/bluetooth/nm-device-bt.c | 2 +- src/devices/nm-device-private.h | 2 ++ src/devices/nm-device.c | 9 ++++++++- src/devices/wwan/nm-device-modem.c | 2 +- src/nm-manager.c | 35 ++++++++++++++++++++++++++--------- 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/devices/adsl/nm-atm-manager.c b/src/devices/adsl/nm-atm-manager.c index 908e961..14bc2bd 100644 --- a/src/devices/adsl/nm-atm-manager.c +++ b/src/devices/adsl/nm-atm-manager.c @@ -24,14 +24,15 @@ #include <gudev/gudev.h> #include <gmodule.h> #include "nm-atm-manager.h" #include "nm-device-adsl.h" #include "nm-device-factory.h" #include "nm-logging.h" +#include "nm-device-private.h" typedef struct { GUdevClient *client; GSList *devices; guint start_id; } NMAtmManagerPrivate; @@ -160,15 +161,15 @@ adsl_remove (NMAtmManager *self, GUdevDevice *udev_device) * NAS bridge interface or PPPoE interface. */ if (g_strcmp0 (nm_device_get_iface (device), iface) != 0) continue; g_object_weak_unref (G_OBJECT (iter->data), device_destroyed, self); priv->devices = g_slist_remove (priv->devices, device); - g_signal_emit_by_name (device, NM_DEVICE_REMOVED); + nm_device_emit_removed (device, "kernel device removed"); break; } } static gboolean query_devices (NMAtmManager *self) { diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c index 6998bb1..589fffb 100644 --- a/src/devices/bluetooth/nm-device-bt.c +++ b/src/devices/bluetooth/nm-device-bt.c @@ -925,15 +925,15 @@ deactivate (NMDevice *device) if (NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate) NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate (device); } static void bluez_device_removed (NMBluezDevice *bdev, gpointer user_data) { - g_signal_emit_by_name (NM_DEVICE_BT (user_data), NM_DEVICE_REMOVED); + nm_device_emit_removed (NM_DEVICE (user_data), "bluez device removed"); } /*****************************************************************************/ static gboolean is_available (NMDevice *dev) { diff --git a/src/devices/nm-device-private.h b/src/devices/nm-device-private.h index 8dae02e..40e2486 100644 --- a/src/devices/nm-device-private.h +++ b/src/devices/nm-device-private.h @@ -94,8 +94,10 @@ NMDevice *nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex); void nm_device_master_check_slave_physical_port (NMDevice *dev, NMDevice *slave, guint64 log_domain); void nm_device_set_carrier (NMDevice *device, gboolean carrier); void nm_device_emit_recheck_auto_activate (NMDevice *device); +void nm_device_emit_removed (NMDevice *device, const char *reason); + #endif /* NM_DEVICE_PRIVATE_H */ diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 817b924..bc290ff 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -2018,14 +2018,20 @@ nm_device_can_assume_connections (NMDevice *device) void nm_device_emit_recheck_auto_activate (NMDevice *self) { g_signal_emit (self, signals[RECHECK_AUTO_ACTIVATE], 0); } +void +nm_device_emit_removed (NMDevice *device, const char *reason) +{ + g_signal_emit (device, signals[REMOVED], 0, reason); +} + static void dnsmasq_state_changed_cb (NMDnsMasqManager *manager, guint32 status, gpointer user_data) { NMDevice *self = NM_DEVICE (user_data); switch (status) { case NM_DNSMASQ_STATUS_DEAD: @@ -6360,15 +6366,16 @@ nm_device_class_init (NMDeviceClass *klass) G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT); signals[REMOVED] = g_signal_new (NM_DEVICE_REMOVED, G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, - G_TYPE_NONE, 0); + G_TYPE_NONE, 1, + G_TYPE_STRING); /* reason */ signals[RECHECK_AUTO_ACTIVATE] = g_signal_new (NM_DEVICE_RECHECK_AUTO_ACTIVATE, G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c index 39cc06f..b899380 100644 --- a/src/devices/wwan/nm-device-modem.c +++ b/src/devices/wwan/nm-device-modem.c @@ -196,15 +196,15 @@ modem_connected_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data) nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER); } } static void modem_removed_cb (NMModem *modem, gpointer user_data) { - g_signal_emit_by_name (NM_DEVICE (user_data), NM_DEVICE_REMOVED); + nm_device_emit_removed (NM_DEVICE (user_data), "modem removed"); } /*****************************************************************************/ NMModem * nm_device_modem_get_modem (NMDeviceModem *self) { diff --git a/src/nm-manager.c b/src/nm-manager.c index ea0663f..903357d 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -127,15 +127,18 @@ static void impl_manager_get_logging (NMManager *manager, static void impl_manager_check_connectivity (NMManager *manager, DBusGMethodInvocation *context); #include "nm-manager-glue.h" static void add_device (NMManager *self, NMDevice *device, gboolean generate_con); -static void remove_device (NMManager *self, NMDevice *device, gboolean quitting); +static void remove_device (NMManager *self, + NMDevice *device, + gboolean quitting, + const char *reason); static void hostname_provider_init (NMHostnameProvider *provider_class); static NMActiveConnection *_new_active_connection (NMManager *self, NMConnection *connection, const char *specific_object, NMDevice *device, @@ -737,18 +740,26 @@ device_has_pending_action_changed (NMDevice *device, GParamSpec *pspec, NMManager *self) { check_if_startup_complete (self); } static void -remove_device (NMManager *manager, NMDevice *device, gboolean quitting) +remove_device (NMManager *manager, + NMDevice *device, + gboolean quitting, + const char *reason) { NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); + nm_log_info (LOGD_DEVICE, + "(%s): removing device (%s)", + nm_device_get_iface (device), + reason); + if (nm_device_get_managed (device)) { /* Leave configured interfaces up when quitting so they can be * taken over again if NM starts up, and to ensure connectivity while * NM is gone. Assumed connections don't get taken down even if they * haven't been fully activated. */ @@ -772,17 +783,17 @@ remove_device (NMManager *manager, NMDevice *device, gboolean quitting) g_object_unref (device); if (priv->startup) check_if_startup_complete (manager); } static void -device_removed_cb (NMDevice *device, gpointer user_data) +device_removed_cb (NMDevice *device, const char *reason, gpointer user_data) { - remove_device (NM_MANAGER (user_data), device, FALSE); + remove_device (NM_MANAGER (user_data), device, FALSE, reason); } static void aipd_handle_event (DBusGProxy *proxy, const char *event, const char *iface, const char *address, @@ -1773,17 +1784,23 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con) * the child NMDevice entirely */ for (iter = priv->devices; iter; iter = iter->next) { iface = nm_device_get_ip_iface (iter->data); if (nm_device_owns_iface (device, iface)) remove = g_slist_prepend (remove, iter->data); } - for (iter = remove; iter; iter = iter->next) - remove_device (self, NM_DEVICE (iter->data), FALSE); - g_slist_free (remove); + if (remove) { + char *reason = g_strdup_printf ("child of %s", nm_device_get_iface (device)); + + for (iter = remove; iter; iter = iter->next) + remove_device (self, NM_DEVICE (iter->data), FALSE, reason); + + g_free (reason); + g_slist_free (remove); + } priv->devices = g_slist_append (priv->devices, g_object_ref (device)); g_signal_connect (device, "state-changed", G_CALLBACK (manager_device_state_changed), self); @@ -2212,15 +2229,15 @@ platform_link_removed_cb (NMPlatform *platform, gpointer user_data) { NMManager *self = NM_MANAGER (user_data); NMDevice *device; device = find_device_by_ifindex (self, ifindex); if (device) - remove_device (self, device, FALSE); + remove_device (self, device, FALSE, "link removed"); } static void rfkill_manager_rfkill_changed_cb (NMRfkillManager *rfkill_mgr, RfKillType rtype, RfKillState udev_state, gpointer user_data) @@ -4972,15 +4989,15 @@ dispose (GObject *object) g_slist_free_full (priv->auth_chains, (GDestroyNotify) nm_auth_chain_unref); priv->auth_chains = NULL; nm_auth_changed_func_unregister (authority_changed_cb, manager); /* Remove all devices */ while (priv->devices) - remove_device (manager, NM_DEVICE (priv->devices->data), TRUE); + remove_device (manager, NM_DEVICE (priv->devices->data), TRUE, "quitting"); if (priv->ac_cleanup_id) { g_source_remove (priv->ac_cleanup_id); priv->ac_cleanup_id = 0; } while (priv->active_connections) -- 1.9.0 _______________________________________________ networkmanager-list mailing list networkmanager-list@gnome.org https://mail.gnome.org/mailman/listinfo/networkmanager-list