diff options
author | Dan Williams <dcbw@redhat.com> | 2013-05-31 14:28:16 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-05-06 14:15:50 -0500 |
commit | 5d8197a80bef620d0ce364e9b7b1fd2b85265982 (patch) | |
tree | 97a1a3b403276d8a6c14f0113cf93ed9e618d714 | |
parent | 876ec0c755f83d7fc79af7b7cf61d268a6984464 (diff) | |
download | NetworkManager-5d8197a80bef620d0ce364e9b7b1fd2b85265982.tar.gz |
core: ignore modem management service state in rfkill handling
rfkill handling should only pay attention to actual rfkill, since
rfkill is global but the modem management service state is per-device.
Thus calculating a global state from multiple devices is very
likely to get things wrong.
Remove all of the code that used to handle that sort of thing,
which means removing the 'enable-changed' signal from the Modem
device, since now nothing external to the modem device should
need to care whether it's enabled internally or not.
-rw-r--r-- | src/devices/wwan/nm-device-modem.c | 25 | ||||
-rw-r--r-- | src/devices/wwan/nm-device-modem.h | 2 | ||||
-rw-r--r-- | src/nm-manager.c | 64 |
3 files changed, 6 insertions, 85 deletions
diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c index 39cc06f3f7..5cadbf1014 100644 --- a/src/devices/wwan/nm-device-modem.c +++ b/src/devices/wwan/nm-device-modem.c @@ -53,13 +53,6 @@ enum { PROP_CURRENT_CAPABILITIES, }; -enum { - ENABLE_CHANGED, - - LAST_SIGNAL -}; -static guint signals[LAST_SIGNAL] = { 0 }; - static void set_enabled (NMDevice *device, gboolean enabled); /*****************************************************************************/ @@ -175,13 +168,8 @@ data_port_changed_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data) static void modem_enabled_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data) { - NMDeviceModem *self = NM_DEVICE_MODEM (user_data); - NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self); - - set_enabled (NM_DEVICE (self), nm_modem_get_mm_enabled (priv->modem)); - - g_signal_emit (G_OBJECT (self), signals[ENABLE_CHANGED], 0); - nm_device_emit_recheck_auto_activate (NM_DEVICE (self)); + set_enabled (NM_DEVICE (user_data), nm_modem_get_mm_enabled (modem)); + nm_device_emit_recheck_auto_activate (NM_DEVICE (user_data)); } static void @@ -530,15 +518,6 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass) 0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - /* Signals */ - signals[ENABLE_CHANGED] = - g_signal_new (NM_DEVICE_MODEM_ENABLE_CHANGED, - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - nm_dbus_manager_register_exported_type (nm_dbus_manager_get (), G_TYPE_FROM_CLASS (mclass), &dbus_glib_nm_device_modem_object_info); diff --git a/src/devices/wwan/nm-device-modem.h b/src/devices/wwan/nm-device-modem.h index 1147b57be3..7751ce6bbd 100644 --- a/src/devices/wwan/nm-device-modem.h +++ b/src/devices/wwan/nm-device-modem.h @@ -38,8 +38,6 @@ #define NM_DEVICE_MODEM_CAPABILITIES "modem-capabilities" #define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities" -#define NM_DEVICE_MODEM_ENABLE_CHANGED "enable-changed" - typedef struct { NMDevice parent; } NMDeviceModem; diff --git a/src/nm-manager.c b/src/nm-manager.c index d685dbe2c5..d41fe2a4d6 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -163,7 +163,6 @@ static void nm_manager_update_state (NMManager *manager); typedef struct { gboolean user_enabled; - gboolean daemon_enabled; gboolean sw_enabled; gboolean hw_enabled; RfKillType rtype; @@ -172,7 +171,6 @@ typedef struct { const char *prop; const char *hw_prop; RfKillState (*other_enabled_func) (NMManager *); - RfKillState (*daemon_enabled_func) (NMManager *); } RadioState; typedef struct { @@ -1282,11 +1280,8 @@ radio_enabled_for_rstate (RadioState *rstate, gboolean check_changeable) gboolean enabled; enabled = rstate->user_enabled && rstate->hw_enabled; - if (check_changeable) { + if (check_changeable) enabled &= rstate->sw_enabled; - if (rstate->daemon_enabled_func) - enabled &= rstate->daemon_enabled; - } return enabled; } @@ -1384,29 +1379,6 @@ nm_manager_get_ipw_rfkill_state (NMManager *self) return ipw_state; } -static RfKillState -nm_manager_get_modem_enabled_state (NMManager *self) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); - GSList *iter; - RfKillState wwan_state = RFKILL_UNBLOCKED; - - for (iter = priv->devices; iter; iter = g_slist_next (iter)) { - NMDevice *candidate = NM_DEVICE (iter->data); - RfKillState candidate_state = RFKILL_UNBLOCKED; - - if (nm_device_get_rfkill_type (candidate) == RFKILL_TYPE_WWAN) { - if (!nm_device_get_enabled (candidate)) - candidate_state = RFKILL_SOFT_BLOCKED; - - if (candidate_state > wwan_state) - wwan_state = candidate_state; - } - } - - return wwan_state; -} - static void update_rstate_from_rfkill (RadioState *rstate, RfKillState rfkill) { @@ -1431,8 +1403,7 @@ manager_rfkill_update_one_type (NMManager *self, RfKillState udev_state = RFKILL_UNBLOCKED; RfKillState other_state = RFKILL_UNBLOCKED; RfKillState composite; - gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled; - gboolean old_hwe, old_daemon_enabled = FALSE; + gboolean old_enabled, new_enabled, old_rfkilled, new_rfkilled, old_hwe; old_enabled = radio_enabled_for_rstate (rstate, TRUE); old_rfkilled = rstate->hw_enabled && rstate->sw_enabled; @@ -1453,26 +1424,10 @@ manager_rfkill_update_one_type (NMManager *self, update_rstate_from_rfkill (rstate, composite); - /* If the device has a management daemon that can affect enabled state, check that now */ - if (rstate->daemon_enabled_func) { - old_daemon_enabled = rstate->daemon_enabled; - rstate->daemon_enabled = (rstate->daemon_enabled_func (self) == RFKILL_UNBLOCKED); - if (old_daemon_enabled != rstate->daemon_enabled) { - nm_log_info (LOGD_RFKILL, "%s now %s by management service", - rstate->desc, - rstate->daemon_enabled ? "enabled" : "disabled"); - } - } - /* Print out all states affecting device enablement */ if (rstate->desc) { - if (rstate->daemon_enabled_func) { - nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d daemon-enabled %d", - rstate->desc, rstate->hw_enabled, rstate->sw_enabled, rstate->daemon_enabled); - } else { - nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d", - rstate->desc, rstate->hw_enabled, rstate->sw_enabled); - } + nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d sw-enabled %d", + rstate->desc, rstate->hw_enabled, rstate->sw_enabled); } /* Log new killswitch state */ @@ -1523,12 +1478,6 @@ manager_ipw_rfkill_state_changed (NMDeviceWifi *device, } static void -manager_modem_enabled_changed (NMDevice *device, gpointer user_data) -{ - nm_manager_rfkill_update (NM_MANAGER (user_data), RFKILL_TYPE_WWAN); -} - -static void device_auth_done_cb (NMAuthChain *chain, GError *auth_error, DBusGMethodInvocation *context, @@ -1807,10 +1756,6 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con) g_signal_connect (device, "notify::" NM_DEVICE_WIFI_IPW_RFKILL_STATE, G_CALLBACK (manager_ipw_rfkill_state_changed), self); - } else if (devtype == NM_DEVICE_TYPE_MODEM) { - g_signal_connect (device, "enable-changed", - G_CALLBACK (manager_modem_enabled_changed), - self); } /* Update global rfkill state for this device type with the device's @@ -4807,7 +4752,6 @@ nm_manager_init (NMManager *manager) priv->radio_states[RFKILL_TYPE_WWAN].prop = NM_MANAGER_WWAN_ENABLED; priv->radio_states[RFKILL_TYPE_WWAN].hw_prop = NM_MANAGER_WWAN_HARDWARE_ENABLED; priv->radio_states[RFKILL_TYPE_WWAN].desc = "WWAN"; - priv->radio_states[RFKILL_TYPE_WWAN].daemon_enabled_func = nm_manager_get_modem_enabled_state; priv->radio_states[RFKILL_TYPE_WWAN].rtype = RFKILL_TYPE_WWAN; priv->radio_states[RFKILL_TYPE_WIMAX].user_enabled = TRUE; |