core: consolidate deactivation methods

deactivate_quickly is misnamed these days; it was originally used
for quickly tearing down a device for sleep and such.  But these
days it's used for the bulk of device deactivation.  Only the wifi
class used the actual deactivate method.  So combine the two and
make device implementations less complicated.
This commit is contained in:
Dan Williams 2011-02-24 11:27:42 -06:00
parent 07b9660263
commit 3b61adec74
11 changed files with 45 additions and 78 deletions

View file

@ -341,7 +341,7 @@ real_get_setting_name (NMModem *modem)
} }
static void static void
real_deactivate_quickly (NMModem *modem, NMDevice *device) real_deactivate (NMModem *modem, NMDevice *device)
{ {
NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (modem); NMModemCdmaPrivate *priv = NM_MODEM_CDMA_GET_PRIVATE (modem);
@ -353,7 +353,7 @@ real_deactivate_quickly (NMModem *modem, NMDevice *device)
priv->call = NULL; priv->call = NULL;
} }
NM_MODEM_CLASS (nm_modem_cdma_parent_class)->deactivate_quickly (modem, device); NM_MODEM_CLASS (nm_modem_cdma_parent_class)->deactivate (modem, device);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -391,7 +391,7 @@ nm_modem_cdma_class_init (NMModemCdmaClass *klass)
modem_class->check_connection_compatible = real_check_connection_compatible; modem_class->check_connection_compatible = real_check_connection_compatible;
modem_class->complete_connection = real_complete_connection; modem_class->complete_connection = real_complete_connection;
modem_class->act_stage1_prepare = real_act_stage1_prepare; modem_class->act_stage1_prepare = real_act_stage1_prepare;
modem_class->deactivate_quickly = real_deactivate_quickly; modem_class->deactivate = real_deactivate;
dbus_g_error_domain_register (NM_CDMA_ERROR, NULL, NM_TYPE_CDMA_ERROR); dbus_g_error_domain_register (NM_CDMA_ERROR, NULL, NM_TYPE_CDMA_ERROR);
} }

View file

@ -544,7 +544,7 @@ real_get_setting_name (NMModem *modem)
} }
static void static void
real_deactivate_quickly (NMModem *modem, NMDevice *device) real_deactivate (NMModem *modem, NMDevice *device)
{ {
NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (modem); NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (modem);
@ -558,7 +558,7 @@ real_deactivate_quickly (NMModem *modem, NMDevice *device)
priv->pin_tries = 0; priv->pin_tries = 0;
NM_MODEM_CLASS (nm_modem_gsm_parent_class)->deactivate_quickly (modem, device); NM_MODEM_CLASS (nm_modem_gsm_parent_class)->deactivate (modem, device);
} }
@ -597,7 +597,7 @@ nm_modem_gsm_class_init (NMModemGsmClass *klass)
modem_class->check_connection_compatible = real_check_connection_compatible; modem_class->check_connection_compatible = real_check_connection_compatible;
modem_class->complete_connection = real_complete_connection; modem_class->complete_connection = real_complete_connection;
modem_class->act_stage1_prepare = real_act_stage1_prepare; modem_class->act_stage1_prepare = real_act_stage1_prepare;
modem_class->deactivate_quickly = real_deactivate_quickly; modem_class->deactivate = real_deactivate;
dbus_g_error_domain_register (NM_GSM_ERROR, NULL, NM_TYPE_GSM_ERROR); dbus_g_error_domain_register (NM_GSM_ERROR, NULL, NM_TYPE_GSM_ERROR);
} }

View file

@ -636,7 +636,7 @@ nm_modem_complete_connection (NMModem *self,
} }
static void static void
real_deactivate_quickly (NMModem *self, NMDevice *device) real_deactivate (NMModem *self, NMDevice *device)
{ {
NMModemPrivate *priv; NMModemPrivate *priv;
const char *iface; const char *iface;
@ -690,9 +690,9 @@ real_deactivate_quickly (NMModem *self, NMDevice *device)
} }
void void
nm_modem_deactivate_quickly (NMModem *self, NMDevice *device) nm_modem_deactivate (NMModem *self, NMDevice *device)
{ {
NM_MODEM_GET_CLASS (self)->deactivate_quickly (self, device); NM_MODEM_GET_CLASS (self)->deactivate (self, device);
} }
static void static void
@ -1082,7 +1082,7 @@ nm_modem_class_init (NMModemClass *klass)
object_class->finalize = finalize; object_class->finalize = finalize;
klass->act_stage1_prepare = real_act_stage1_prepare; klass->act_stage1_prepare = real_act_stage1_prepare;
klass->deactivate_quickly = real_deactivate_quickly; klass->deactivate = real_deactivate;
/* Properties */ /* Properties */
g_object_class_install_property g_object_class_install_property

View file

@ -82,7 +82,7 @@ typedef struct {
const char **out_setting_name, const char **out_setting_name,
NMDeviceStateReason *reason); NMDeviceStateReason *reason);
void (*deactivate_quickly) (NMModem *self, NMDevice *device); void (*deactivate) (NMModem *self, NMDevice *device);
/* Signals */ /* Signals */
void (*ppp_stats) (NMModem *self, guint32 in_bytes, guint32 out_bytes); void (*ppp_stats) (NMModem *self, guint32 in_bytes, guint32 out_bytes);
@ -141,7 +141,7 @@ gboolean nm_modem_get_secrets (NMModem *modem,
gboolean request_new, gboolean request_new,
const char *hint); const char *hint);
void nm_modem_deactivate_quickly (NMModem *modem, NMDevice *device); void nm_modem_deactivate (NMModem *modem, NMDevice *device);
void nm_modem_device_state_changed (NMModem *modem, void nm_modem_device_state_changed (NMModem *modem,
NMDeviceState new_state, NMDeviceState new_state,

View file

@ -962,7 +962,7 @@ real_act_stage4_get_ip4_config (NMDevice *device,
} }
static void static void
real_deactivate_quickly (NMDevice *device) real_deactivate (NMDevice *device)
{ {
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device); NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
@ -972,7 +972,7 @@ real_deactivate_quickly (NMDevice *device)
if (priv->bt_type == NM_BT_CAPABILITY_DUN) { if (priv->bt_type == NM_BT_CAPABILITY_DUN) {
if (priv->modem) { if (priv->modem) {
nm_modem_deactivate_quickly (priv->modem, device); nm_modem_deactivate (priv->modem, device);
/* Since we're killing the Modem object before it'll get the /* Since we're killing the Modem object before it'll get the
* state change signal, simulate the state change here. * state change signal, simulate the state change here.
@ -1021,8 +1021,8 @@ real_deactivate_quickly (NMDevice *device)
g_free (priv->rfcomm_iface); g_free (priv->rfcomm_iface);
priv->rfcomm_iface = NULL; priv->rfcomm_iface = NULL;
if (NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate_quickly) if (NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate)
NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate_quickly (device); NM_DEVICE_CLASS (nm_device_bt_parent_class)->deactivate (device);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1150,7 +1150,7 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
device_class->get_best_auto_connection = real_get_best_auto_connection; device_class->get_best_auto_connection = real_get_best_auto_connection;
device_class->get_generic_capabilities = real_get_generic_capabilities; device_class->get_generic_capabilities = real_get_generic_capabilities;
device_class->deactivate_quickly = real_deactivate_quickly; device_class->deactivate = real_deactivate;
device_class->act_stage2_config = real_act_stage2_config; device_class->act_stage2_config = real_act_stage2_config;
device_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start; device_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start;
device_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config; device_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config;

View file

@ -1571,7 +1571,7 @@ real_act_stage4_get_ip4_config (NMDevice *device,
} }
static void static void
real_deactivate_quickly (NMDevice *device) real_deactivate (NMDevice *device)
{ {
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device); NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
@ -2031,7 +2031,7 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
parent_class->act_stage2_config = real_act_stage2_config; parent_class->act_stage2_config = real_act_stage2_config;
parent_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start; parent_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start;
parent_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config; parent_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config;
parent_class->deactivate_quickly = real_deactivate_quickly; parent_class->deactivate = real_deactivate;
parent_class->spec_match_list = spec_match_list; parent_class->spec_match_list = spec_match_list;
parent_class->connection_match_config = connection_match_config; parent_class->connection_match_config = connection_match_config;

View file

@ -245,9 +245,9 @@ real_hw_bring_up (NMDevice *device, gboolean *no_firmware)
} }
static void static void
real_deactivate_quickly (NMDevice *device) real_deactivate (NMDevice *device)
{ {
nm_modem_deactivate_quickly (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, device); nm_modem_deactivate (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem, device);
} }
static NMActStageReturn static NMActStageReturn
@ -416,7 +416,7 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
device_class->complete_connection = real_complete_connection; device_class->complete_connection = real_complete_connection;
device_class->hw_is_up = real_hw_is_up; device_class->hw_is_up = real_hw_is_up;
device_class->hw_bring_up = real_hw_bring_up; device_class->hw_bring_up = real_hw_bring_up;
device_class->deactivate_quickly = real_deactivate_quickly; device_class->deactivate = real_deactivate;
device_class->act_stage1_prepare = real_act_stage1_prepare; device_class->act_stage1_prepare = real_act_stage1_prepare;
device_class->act_stage2_config = real_act_stage2_config; device_class->act_stage2_config = real_act_stage2_config;
device_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start; device_class->act_stage3_ip4_config_start = real_act_stage3_ip4_config_start;

View file

@ -1250,7 +1250,7 @@ real_take_down (NMDevice *dev)
} }
static void static void
real_deactivate_quickly (NMDevice *dev) real_deactivate (NMDevice *dev)
{ {
NMDeviceWifi *self = NM_DEVICE_WIFI (dev); NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
@ -1286,16 +1286,11 @@ real_deactivate_quickly (NMDevice *dev)
/* Reset MAC address back to initial address */ /* Reset MAC address back to initial address */
_set_hw_addr (self, priv->initial_hw_addr, "reset"); _set_hw_addr (self, priv->initial_hw_addr, "reset");
}
static void
real_deactivate (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
/* Ensure we're in infrastructure mode after deactivation; some devices
* (usually older ones) don't scan well in adhoc mode.
*/
nm_device_wifi_set_mode (self, NM_802_11_MODE_INFRA); nm_device_wifi_set_mode (self, NM_802_11_MODE_INFRA);
/* FIXME: Should we reset the scan interval here? */
/* nm_device_wifi_set_scan_interval (app_data, self, NM_WIRELESS_SCAN_INTERVAL_ACTIVE); */
} }
static gboolean static gboolean
@ -3828,7 +3823,6 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
parent_class->act_stage4_ip4_config_timeout = real_act_stage4_ip4_config_timeout; parent_class->act_stage4_ip4_config_timeout = real_act_stage4_ip4_config_timeout;
parent_class->act_stage4_ip6_config_timeout = real_act_stage4_ip6_config_timeout; parent_class->act_stage4_ip6_config_timeout = real_act_stage4_ip6_config_timeout;
parent_class->deactivate = real_deactivate; parent_class->deactivate = real_deactivate;
parent_class->deactivate_quickly = real_deactivate_quickly;
parent_class->can_interrupt_activation = real_can_interrupt_activation; parent_class->can_interrupt_activation = real_can_interrupt_activation;
parent_class->spec_match_list = spec_match_list; parent_class->spec_match_list = spec_match_list;

View file

@ -2813,21 +2813,27 @@ dnsmasq_cleanup (NMDevice *self)
} }
/* /*
* nm_device_deactivate_quickly * nm_device_deactivate
* *
* Quickly deactivate a device, for things like sleep, etc. Doesn't * Remove a device's routing table entries and IP address.
* clean much stuff up, and nm_device_deactivate() should be called
* on the device eventually.
* *
*/ */
gboolean static void
nm_device_deactivate_quickly (NMDevice *self) nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason)
{ {
NMDevicePrivate *priv; NMDevice *self = NM_DEVICE (device);
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
gboolean tried_ipv6 = FALSE;
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); g_return_if_fail (self != NULL);
priv = NM_DEVICE_GET_PRIVATE (self); nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason: %d).",
nm_device_get_iface (self), reason);
/* Save whether or not we tried IPv6 for later */
if (NM_DEVICE_GET_PRIVATE (self)->ip6_manager)
tried_ipv6 = TRUE;
/* Break the activation chain */ /* Break the activation chain */
activation_source_clear (self, TRUE, AF_INET); activation_source_clear (self, TRUE, AF_INET);
@ -2849,39 +2855,12 @@ nm_device_deactivate_quickly (NMDevice *self)
nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0\n"); nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0\n");
/* Call device type-specific deactivation */ /* Call device type-specific deactivation */
if (NM_DEVICE_GET_CLASS (self)->deactivate_quickly) if (NM_DEVICE_GET_CLASS (self)->deactivate)
NM_DEVICE_GET_CLASS (self)->deactivate_quickly (self); NM_DEVICE_GET_CLASS (self)->deactivate (self);
/* Tear down an existing activation request */ /* Tear down an existing activation request */
clear_act_request (self); clear_act_request (self);
return TRUE;
}
/*
* nm_device_deactivate
*
* Remove a device's routing table entries and IP address.
*
*/
static void
nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason)
{
NMDevice *self = NM_DEVICE (device);
NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
gboolean tried_ipv6 = FALSE;
g_return_if_fail (self != NULL);
nm_log_info (LOGD_DEVICE, "(%s): deactivating device (reason: %d).",
nm_device_get_iface (self), reason);
/* Check this before deactivate_quickly is run */
if (NM_DEVICE_GET_PRIVATE (self)->ip6_manager)
tried_ipv6 = TRUE;
nm_device_deactivate_quickly (self);
/* Take out any entries in the routing table and any IP address the device had. */ /* Take out any entries in the routing table and any IP address the device had. */
nm_system_device_flush_routes (self, tried_ipv6 ? AF_UNSPEC : AF_INET); nm_system_device_flush_routes (self, tried_ipv6 ? AF_UNSPEC : AF_INET);
nm_system_device_flush_addresses (self, tried_ipv6 ? AF_UNSPEC : AF_INET); nm_system_device_flush_addresses (self, tried_ipv6 ? AF_UNSPEC : AF_INET);
@ -2890,10 +2869,6 @@ nm_device_deactivate (NMDeviceInterface *device, NMDeviceStateReason reason)
/* Clean up nameservers and addresses */ /* Clean up nameservers and addresses */
nm_device_set_ip4_config (self, NULL, FALSE, &ignored); nm_device_set_ip4_config (self, NULL, FALSE, &ignored);
nm_device_set_ip6_config (self, NULL, FALSE, &ignored); nm_device_set_ip6_config (self, NULL, FALSE, &ignored);
/* Call device type-specific deactivation */
if (NM_DEVICE_GET_CLASS (self)->deactivate)
NM_DEVICE_GET_CLASS (self)->deactivate (self);
} }
static gboolean static gboolean

View file

@ -115,7 +115,6 @@ typedef struct {
NMIP6Config **config, NMIP6Config **config,
NMDeviceStateReason *reason); NMDeviceStateReason *reason);
void (* deactivate) (NMDevice *self); void (* deactivate) (NMDevice *self);
void (* deactivate_quickly) (NMDevice *self);
gboolean (* can_interrupt_activation) (NMDevice *self); gboolean (* can_interrupt_activation) (NMDevice *self);
@ -175,7 +174,6 @@ void nm_device_activate_schedule_stage4_ip4_config_get (NMDevice *device);
void nm_device_activate_schedule_stage4_ip4_config_timeout (NMDevice *device); void nm_device_activate_schedule_stage4_ip4_config_timeout (NMDevice *device);
void nm_device_activate_schedule_stage4_ip6_config_get (NMDevice *device); void nm_device_activate_schedule_stage4_ip6_config_get (NMDevice *device);
void nm_device_activate_schedule_stage4_ip6_config_timeout (NMDevice *device); void nm_device_activate_schedule_stage4_ip6_config_timeout (NMDevice *device);
gboolean nm_device_deactivate_quickly (NMDevice *dev);
gboolean nm_device_is_activating (NMDevice *dev); gboolean nm_device_is_activating (NMDevice *dev);
gboolean nm_device_can_interrupt_activation (NMDevice *self); gboolean nm_device_can_interrupt_activation (NMDevice *self);
gboolean nm_device_autoconnect_allowed (NMDevice *self); gboolean nm_device_autoconnect_allowed (NMDevice *self);

View file

@ -804,7 +804,7 @@ force_disconnect (NMDeviceWimax *self, struct wmxsdk *sdk)
} }
static void static void
real_deactivate_quickly (NMDevice *device) real_deactivate (NMDevice *device)
{ {
NMDeviceWimax *self = NM_DEVICE_WIMAX (device); NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
@ -1469,7 +1469,7 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
device_class->is_available = real_is_available; device_class->is_available = real_is_available;
device_class->act_stage1_prepare = real_act_stage1_prepare; device_class->act_stage1_prepare = real_act_stage1_prepare;
device_class->act_stage2_config = real_act_stage2_config; device_class->act_stage2_config = real_act_stage2_config;
device_class->deactivate_quickly = real_deactivate_quickly; device_class->deactivate = real_deactivate;
/* Properties */ /* Properties */
g_object_class_install_property g_object_class_install_property