summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Kling <andreas.kling@peiker-cee.de>2019-02-20 12:15:59 +0100
committerLubomir Rintel <lkundrak@v3.sk>2019-07-29 11:00:24 +0200
commit90fb359b8860fb5d0d52b83f82e2be0039a6c964 (patch)
tree8fd1a9bd88b3164001b48a68388bec5f1c4a0ae9
parent77b13c68def015898c207c41d11f20f600a62bf6 (diff)
downloadNetworkManager-90fb359b8860fb5d0d52b83f82e2be0039a6c964.tar.gz
wifi: auto connect mesh networks
mesh connections can be started at any time but prevent a connection using ip auto configuration to start, if no mesh point providing the network is in range.
-rw-r--r--src/devices/wifi/nm-device-wifi.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
index ef4d443cbb..2ffba47a29 100644
--- a/src/devices/wifi/nm-device-wifi.c
+++ b/src/devices/wifi/nm-device-wifi.c
@@ -806,12 +806,13 @@ check_connection_available (NMDevice *device,
return TRUE;
}
- /* Ad-Hoc and AP connections are always available because they may be
+ /* Ad-Hoc, AP and Mesh connections are always available because they may be
* started at any time.
*/
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 (mode, NM_SETTING_WIRELESS_MODE_AP) == 0
+ || g_strcmp0 (mode, NM_SETTING_WIRELESS_MODE_MESH) == 0)
return TRUE;
/* Hidden SSIDs obviously don't always appear in the scan list either.
@@ -1022,7 +1023,8 @@ can_auto_connect (NMDevice *device,
NMConnection *connection;
NMSettingWireless *s_wifi;
NMWifiAP *ap;
- const char *method, *mode;
+ const char *method6, *mode;
+ gboolean auto4, auto6;
guint64 timestamp = 0;
nm_assert (!specific_object || !*specific_object);
@@ -1035,13 +1037,20 @@ can_auto_connect (NMDevice *device,
s_wifi = nm_connection_get_setting_wireless (connection);
g_return_val_if_fail (s_wifi, FALSE);
- /* Always allow autoconnect for AP and non-autoconf Ad-Hoc */
- method = nm_utils_get_ip_config_method (connection, AF_INET);
+ /* Always allow autoconnect for AP and non-autoconf Ad-Hoc or Mesh */
+ auto4 = nm_streq0 (nm_utils_get_ip_config_method (connection, AF_INET),
+ NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+ method6 = nm_utils_get_ip_config_method (connection, AF_INET6);
+ auto6 = nm_streq0 (method6, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
+ || nm_streq0 (method6, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
+
mode = nm_setting_wireless_get_mode (s_wifi);
+
if (nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_AP))
return TRUE;
- else if ( nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC)
- && !nm_streq0 (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO))
+ else if (!auto4 && nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_ADHOC))
+ return TRUE;
+ else if (!auto4 && !auto6 && nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_MESH))
return TRUE;
/* Don't autoconnect to networks that have been tried at least once