From e2637760f160f8d790438f3ca26df1b888de7909 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 8 Feb 2016 17:00:03 -0600 Subject: [PATCH] wifi: allow autoconnect on AP/AdHoc mode connections with manual IP configuration The existing checks assumed that all AP/AdHoc connections would use the shared IP method. But what we really want to check for here is whether the connection is AP/AdHoc. Leave the existing 'shared' check for backwards compatibility. Also move the check above the timestamp check, since the user shouldn't need to manually set a timestamp just to get an AP-mode connection to autoconnect. --- src/devices/wifi/nm-device-wifi.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index 2df0937725..63aa6d22bd 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -920,13 +920,25 @@ can_auto_connect (NMDevice *device, char **specific_object) { NMDeviceWifi *self = NM_DEVICE_WIFI (device); + NMSettingWireless *s_wifi; NMAccessPoint *ap; - const char *method = NULL; + const char *method, *mode; guint64 timestamp = 0; if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->can_auto_connect (device, connection, specific_object)) return FALSE; + s_wifi = nm_connection_get_setting_wireless (connection); + g_return_val_if_fail (s_wifi, FALSE); + + /* Always allow autoconnect for shared/Ad-Hoc/AP */ + method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG); + mode = nm_setting_wireless_get_mode (s_wifi); + if ( g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC) == 0 + || g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_AP) == 0 + || g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) == 0) + return TRUE; + /* Don't autoconnect to networks that have been tried at least once * but haven't been successful, since these are often accidental choices * from the menu and the user may not know the password. @@ -936,11 +948,6 @@ can_auto_connect (NMDevice *device, return FALSE; } - /* Use the connection if it's a shared connection */ - method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG); - if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)) - return TRUE; - ap = find_first_compatible_ap (self, connection, FALSE); if (ap) { /* All good; connection is usable */