mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-06 03:30:31 +01:00
device/wifi: various cleanup in act_stage1_prepare()
The only change in behavior is in act_stage1_prepare(). That changes compared to before that we also set the specific object path if it was already set (and we looked up the AP by specific object to start with). Also, for existing APs that we found with nm_wifi_aps_find_first_compatible(), it changes the order of calling set_current_ap() before nm_active_connection_set_specific_object(). That should not make a different though. I anyway wonder why we even bother to set the specific object on the AC. Maybe that should be revisited.
This commit is contained in:
parent
1f7e0f1d1f
commit
81816ebffa
1 changed files with 37 additions and 38 deletions
|
|
@ -411,7 +411,9 @@ set_current_ap (NMDeviceWifi *self, NMWifiAP *new_ap, gboolean recheck_available
|
|||
NM80211Mode mode = nm_wifi_ap_get_mode (old_ap);
|
||||
|
||||
/* Remove any AP from the internal list if it was created by NM or isn't known to the supplicant */
|
||||
if (mode == NM_802_11_MODE_ADHOC || mode == NM_802_11_MODE_AP || nm_wifi_ap_get_fake (old_ap))
|
||||
if ( NM_IN_SET (mode, NM_802_11_MODE_ADHOC,
|
||||
NM_802_11_MODE_AP)
|
||||
|| nm_wifi_ap_get_fake (old_ap))
|
||||
ap_add_remove (self, FALSE, old_ap, recheck_available_connections);
|
||||
g_object_unref (old_ap);
|
||||
}
|
||||
|
|
@ -1229,7 +1231,8 @@ scanning_prohibited (NMDeviceWifi *self, gboolean periodic)
|
|||
/* Don't scan when a an AP or Ad-Hoc connection is active as it will
|
||||
* disrupt connected clients or peers.
|
||||
*/
|
||||
if (priv->mode == NM_802_11_MODE_ADHOC || priv->mode == NM_802_11_MODE_AP)
|
||||
if (NM_IN_SET (priv->mode, NM_802_11_MODE_ADHOC,
|
||||
NM_802_11_MODE_AP))
|
||||
return TRUE;
|
||||
|
||||
switch (nm_device_get_state (NM_DEVICE (self))) {
|
||||
|
|
@ -2409,9 +2412,9 @@ supplicant_connection_timeout_cb (gpointer user_data)
|
|||
connection = nm_act_request_get_applied_connection (req);
|
||||
g_assert (connection);
|
||||
|
||||
if ( priv->mode == NM_802_11_MODE_ADHOC
|
||||
|| priv->mode == NM_802_11_MODE_MESH
|
||||
|| priv->mode == NM_802_11_MODE_AP) {
|
||||
if (NM_IN_SET (priv->mode, NM_802_11_MODE_ADHOC,
|
||||
NM_802_11_MODE_MESH,
|
||||
NM_802_11_MODE_AP)) {
|
||||
/* In Ad-Hoc and AP modes there's nothing to check the encryption key
|
||||
* (if any), so supplicant timeouts here are almost certainly the wifi
|
||||
* driver being really stupid.
|
||||
|
|
@ -2619,6 +2622,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
|||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
||||
NMActStageReturn ret;
|
||||
NMWifiAP *ap = NULL;
|
||||
gs_unref_object NMWifiAP *ap_fake = NULL;
|
||||
NMActRequest *req;
|
||||
NMConnection *connection;
|
||||
NMSettingWireless *s_wireless;
|
||||
|
|
@ -2662,44 +2666,39 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
|||
return NM_ACT_STAGE_RETURN_FAILURE;
|
||||
|
||||
/* AP and Mesh modes never use a specific object or existing scanned AP */
|
||||
if (priv->mode != NM_802_11_MODE_AP && priv->mode != NM_802_11_MODE_MESH) {
|
||||
if (!NM_IN_SET (priv->mode, NM_802_11_MODE_AP,
|
||||
NM_802_11_MODE_MESH)) {
|
||||
ap_path = nm_active_connection_get_specific_object (NM_ACTIVE_CONNECTION (req));
|
||||
ap = ap_path ? nm_wifi_ap_lookup_for_device (NM_DEVICE (self), ap_path) : NULL;
|
||||
if (ap)
|
||||
goto done;
|
||||
|
||||
ap = ap_path
|
||||
? nm_wifi_ap_lookup_for_device (NM_DEVICE (self), ap_path)
|
||||
: NULL;
|
||||
}
|
||||
if (!ap)
|
||||
ap = nm_wifi_aps_find_first_compatible (&priv->aps_lst_head, connection);
|
||||
|
||||
if (!ap) {
|
||||
/* If the user is trying to connect to an AP that NM doesn't yet know about
|
||||
* (hidden network or something), starting a Hotspot or joining a Mesh,
|
||||
* create a fake APfrom the security settings in the connection. This "fake"
|
||||
* AP gets used until the real one is found in the scan list (Ad-Hoc or Hidden),
|
||||
* or until the device is deactivated (Hotspot).
|
||||
*/
|
||||
ap_fake = nm_wifi_ap_new_fake_from_connection (connection);
|
||||
if (!ap_fake)
|
||||
g_return_val_if_reached (NM_ACT_STAGE_RETURN_FAILURE);
|
||||
|
||||
if (nm_wifi_ap_is_hotspot (ap_fake))
|
||||
nm_wifi_ap_set_address (ap_fake, nm_device_get_hw_address (device));
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (self));
|
||||
ap_add_remove (self, TRUE, ap_fake, TRUE);
|
||||
g_object_thaw_notify (G_OBJECT (self));
|
||||
ap = ap_fake;
|
||||
}
|
||||
|
||||
if (ap) {
|
||||
nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req),
|
||||
nm_dbus_object_get_path (NM_DBUS_OBJECT (ap)));
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* If the user is trying to connect to an AP that NM doesn't yet know about
|
||||
* (hidden network or something), starting a Hotspot or joining a Mesh,
|
||||
* create a fake APfrom the security settings in the connection. This "fake"
|
||||
* AP gets used until the real one is found in the scan list (Ad-Hoc or Hidden),
|
||||
* or until the device is deactivated (Hotspot).
|
||||
*/
|
||||
ap = nm_wifi_ap_new_fake_from_connection (connection);
|
||||
g_return_val_if_fail (ap != NULL, NM_ACT_STAGE_RETURN_FAILURE);
|
||||
|
||||
if (nm_wifi_ap_is_hotspot (ap))
|
||||
nm_wifi_ap_set_address (ap, nm_device_get_hw_address (device));
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (self));
|
||||
ap_add_remove (self, TRUE, ap, TRUE);
|
||||
g_object_thaw_notify (G_OBJECT (self));
|
||||
set_current_ap (self, ap, FALSE);
|
||||
nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req),
|
||||
nm_dbus_object_get_path (NM_DBUS_OBJECT (ap)));
|
||||
g_object_unref (ap);
|
||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||
|
||||
done:
|
||||
set_current_ap (self, ap, TRUE);
|
||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -2834,8 +2833,8 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
|||
* if the user didn't specify one and we didn't find an AP that matched
|
||||
* the connection, just pick a frequency the device supports.
|
||||
*/
|
||||
if ( ap_mode == NM_802_11_MODE_ADHOC
|
||||
|| ap_mode == NM_802_11_MODE_MESH
|
||||
if ( NM_IN_SET (ap_mode, NM_802_11_MODE_ADHOC,
|
||||
NM_802_11_MODE_MESH)
|
||||
|| nm_wifi_ap_is_hotspot (ap))
|
||||
ensure_hotspot_frequency (self, s_wireless, ap);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue