mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-04-28 15:50:47 +02:00
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.
This commit is contained in:
parent
876ec0c755
commit
5d8197a80b
3 changed files with 6 additions and 85 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
@ -1522,12 +1477,6 @@ manager_ipw_rfkill_state_changed (NMDeviceWifi *device,
|
|||
nm_manager_rfkill_update (NM_MANAGER (user_data), RFKILL_TYPE_WLAN);
|
||||
}
|
||||
|
||||
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,
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue