diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c index a040a5a9a9..3462defcbc 100644 --- a/src/nm-device-interface.c +++ b/src/nm-device-interface.c @@ -315,35 +315,6 @@ nm_device_interface_activate (NMDeviceInterface *device, return success; } -gboolean -nm_device_interface_disconnect (NMDeviceInterface *device, - GError **error) -{ - NMDeviceState state; - gboolean success = FALSE; - - g_return_val_if_fail (NM_IS_DEVICE_INTERFACE (device), FALSE); - - g_object_get (G_OBJECT (device), "state", &state, NULL); - - switch (state) { - case NM_DEVICE_STATE_UNKNOWN: - case NM_DEVICE_STATE_UNMANAGED: - case NM_DEVICE_STATE_UNAVAILABLE: - case NM_DEVICE_STATE_DISCONNECTED: - g_set_error_literal (error, - NM_DEVICE_INTERFACE_ERROR, - NM_DEVICE_INTERFACE_ERROR_NOT_ACTIVE, - "Cannot disconnect an inactive device."); - break; - default: - success = NM_DEVICE_INTERFACE_GET_INTERFACE (device)->disconnect (device, error); - break; - } - - return success; -} - static void impl_device_disconnect (NMDeviceInterface *device, DBusGMethodInvocation *context) diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h index 299b9f86ee..c6a65121bf 100644 --- a/src/nm-device-interface.h +++ b/src/nm-device-interface.h @@ -98,7 +98,6 @@ struct _NMDeviceInterface { GError **error); void (*deactivate) (NMDeviceInterface *device, NMDeviceStateReason reason); - gboolean (*disconnect) (NMDeviceInterface *device, GError **error); /* Signals */ void (*state_changed) (NMDeviceInterface *device, @@ -110,8 +109,6 @@ struct _NMDeviceInterface { GQuark nm_device_interface_error_quark (void); GType nm_device_interface_error_get_type (void); -gboolean nm_device_interface_disconnect (NMDeviceInterface *device, GError **error); - GType nm_device_interface_get_type (void); gboolean nm_device_interface_activate (NMDeviceInterface *device, diff --git a/src/nm-device.c b/src/nm-device.c index 215a370279..a8a7f258c1 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -172,7 +172,6 @@ static gboolean nm_device_activate (NMDeviceInterface *device, NMActRequest *req, GError **error); static void nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason); -static gboolean device_disconnect (NMDeviceInterface *device, GError **error); static void nm_device_take_down (NMDevice *dev, gboolean wait, NMDeviceStateReason reason); @@ -201,7 +200,6 @@ device_interface_init (NMDeviceInterface *device_interface_class) /* interface implementation */ device_interface_class->activate = nm_device_activate; device_interface_class->deactivate = nm_device_deactivate; - device_interface_class->disconnect = device_disconnect; } @@ -2982,14 +2980,27 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason) nm_device_set_ip6_config (self, NULL, FALSE, &ignored); } -static gboolean -device_disconnect (NMDeviceInterface *device, - GError **error) +gboolean +nm_device_disconnect (NMDevice *device, GError **error) { - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (NM_DEVICE (device)); + NMDevicePrivate *priv; + + g_return_val_if_fail (device != NULL, FALSE); + g_return_val_if_fail (NM_IS_DEVICE (device), FALSE); + + priv = NM_DEVICE_GET_PRIVATE (device); + if (priv->state <= NM_DEVICE_STATE_DISCONNECTED) { + g_set_error_literal (error, + NM_DEVICE_INTERFACE_ERROR, + NM_DEVICE_INTERFACE_ERROR_NOT_ACTIVE, + "Cannot disconnect an inactive device."); + return FALSE; + } priv->autoconnect_inhibit = TRUE; - nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_USER_REQUESTED); + nm_device_state_changed (device, + NM_DEVICE_STATE_DISCONNECTED, + NM_DEVICE_STATE_REASON_USER_REQUESTED); return TRUE; } diff --git a/src/nm-device.h b/src/nm-device.h index 146d20201a..f8260d866e 100644 --- a/src/nm-device.h +++ b/src/nm-device.h @@ -188,7 +188,6 @@ void nm_device_set_managed (NMDevice *device, void nm_device_clear_autoconnect_inhibit (NMDevice *device); - void nm_device_handle_autoip4_event (NMDevice *self, const char *event, const char *address); @@ -199,6 +198,8 @@ void nm_device_state_changed (NMDevice *device, gboolean nm_device_get_firmware_missing (NMDevice *self); +gboolean nm_device_disconnect (NMDevice *device, GError **error); + G_END_DECLS #endif /* NM_DEVICE_H */ diff --git a/src/nm-manager.c b/src/nm-manager.c index b8e5188e9c..f30ac3f47c 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1409,7 +1409,7 @@ disconnect_net_auth_done_cb (NMAuthChain *chain, error = deactivate_disconnect_check_error (auth_error, result, "Disconnect"); if (!error) { device = nm_auth_chain_get_data (chain, "device"); - if (!nm_device_interface_disconnect (NM_DEVICE_INTERFACE (device), &error)) + if (!nm_device_disconnect (device, &error)) g_assert (error); } @@ -1461,7 +1461,7 @@ manager_device_disconnect_request (NMDevice *device, /* Yay for root */ if (0 == sender_uid) { - if (!nm_device_interface_disconnect (NM_DEVICE_INTERFACE (device), &error)) { + if (!nm_device_disconnect (device, &error)) { dbus_g_method_return_error (context, error); g_clear_error (&error); } else