mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-05 16:58:02 +02:00
wifi: fix disabled wifi devices on resume (rh #578141)
RFKILL_TYPE_WLAN is 0, and we while we had allocated the structure for WIMAX rfkill in the manager's priv->radio_states, we hadn't filled it in. That meant that priv->radio_states[RFKILL_TYPE_WIMAX].rtype was 0, and thus various operations thought that wifi devices were wimax devices, and since WiMAX rfkill is never updated because it's not yet used, wifi would never be enabled after resume.
This commit is contained in:
parent
c57c40a621
commit
38ef723df3
1 changed files with 25 additions and 1 deletions
|
|
@ -1407,13 +1407,19 @@ manager_rfkill_update_one_type (NMManager *self,
|
|||
break;
|
||||
}
|
||||
|
||||
if (rstate->desc) {
|
||||
nm_log_dbg (LOGD_RFKILL, "%s hw-enabled %d enabled %d",
|
||||
rstate->desc, new_he, new_e);
|
||||
}
|
||||
|
||||
if (new_he != rstate->hw_enabled) {
|
||||
nm_log_info (LOGD_RFKILL, "%s now %s by radio killswitch",
|
||||
rstate->desc,
|
||||
(new_e && new_he) ? "enabled" : "disabled");
|
||||
|
||||
rstate->hw_enabled = new_he;
|
||||
g_object_notify (G_OBJECT (self), rstate->hw_prop);
|
||||
if (rstate->hw_prop)
|
||||
g_object_notify (G_OBJECT (self), rstate->hw_prop);
|
||||
}
|
||||
manager_set_radio_enabled (self, rstate, new_e);
|
||||
}
|
||||
|
|
@ -2715,6 +2721,12 @@ impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
|
|||
gboolean enabled = (rstate->hw_enabled && rstate->enabled);
|
||||
RfKillType devtype = RFKILL_TYPE_UNKNOWN;
|
||||
|
||||
if (rstate->desc) {
|
||||
nm_log_dbg (LOGD_RFKILL, "%s %s devices (hw_enabled %d, enabled %d)",
|
||||
enabled ? "enabling" : "disabling",
|
||||
rstate->desc, rstate->hw_enabled, rstate->enabled);
|
||||
}
|
||||
|
||||
g_object_get (G_OBJECT (device), NM_DEVICE_INTERFACE_RFKILL_TYPE, &devtype, NULL);
|
||||
if (devtype == rstate->rtype)
|
||||
nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled);
|
||||
|
|
@ -2899,6 +2911,10 @@ nm_manager_start (NMManager *self)
|
|||
manager_set_radio_enabled (self, rstate, rstate->enabled && enabled);
|
||||
}
|
||||
|
||||
/* Log overall networking status - asleep/running */
|
||||
nm_log_info (LOGD_CORE, "Networking is %s by state file",
|
||||
priv->sleeping ? "disabled" : "enabled");
|
||||
|
||||
system_unmanaged_devices_changed_cb (priv->sys_settings, NULL, self);
|
||||
system_hostname_changed_cb (priv->sys_settings, NULL, self);
|
||||
system_query_connections (self);
|
||||
|
|
@ -3154,6 +3170,14 @@ nm_manager_init (NMManager *manager)
|
|||
priv->radio_states[RFKILL_TYPE_WWAN].other_enabled_func = nm_manager_get_modem_enabled_state;
|
||||
priv->radio_states[RFKILL_TYPE_WWAN].rtype = RFKILL_TYPE_WWAN;
|
||||
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].enabled = TRUE;
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].key = "WiMAXEnabled";
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].prop = NULL;
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].hw_prop = NULL;
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].desc = "WiMAX";
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].other_enabled_func = NULL;
|
||||
priv->radio_states[RFKILL_TYPE_WIMAX].rtype = RFKILL_TYPE_WIMAX;
|
||||
|
||||
for (i = 0; i < RFKILL_TYPE_MAX; i++)
|
||||
priv->radio_states[i].hw_enabled = TRUE;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue