summaryrefslogtreecommitdiff
path: root/src/devices
diff options
context:
space:
mode:
authorAndrew Zaborowski <andrew.zaborowski@intel.com>2018-06-11 16:06:47 +0200
committerThomas Haller <thaller@redhat.com>2018-09-05 15:24:04 +0200
commit43ea446a50d62539c58fd30106a369b9386a24ab (patch)
tree83ebafd2c6ca4944a4f09e370d88a9f3fe5e7249 /src/devices
parent142d83b01973b843ea2eba38d0c19eee2c8dfbb6 (diff)
downloadNetworkManager-43ea446a50d62539c58fd30106a369b9386a24ab.tar.gz
wifi: Move get_connection_iwd_security to nm-wifi-utils.c
Make this function public. I'm not sure if at this point it makes much sense to add a new file for iwd-specific utilities. While there add a way for the function to return error if security type can't be mapped to an IWD-supported security type.
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/wifi/nm-device-iwd.c41
-rw-r--r--src/devices/wifi/nm-iwd-manager.h8
-rw-r--r--src/devices/wifi/nm-wifi-utils.c36
-rw-r--r--src/devices/wifi/nm-wifi-utils.h10
4 files changed, 59 insertions, 36 deletions
diff --git a/src/devices/wifi/nm-device-iwd.c b/src/devices/wifi/nm-device-iwd.c
index bf1f3d8769..5781bf9a0c 100644
--- a/src/devices/wifi/nm-device-iwd.c
+++ b/src/devices/wifi/nm-device-iwd.c
@@ -448,33 +448,12 @@ deactivate_async (NMDevice *device,
G_DBUS_CALL_FLAGS_NONE, -1, cancellable, disconnect_cb, ctx);
}
-static NMIwdNetworkSecurity
-get_connection_iwd_security (NMConnection *connection)
-{
- NMSettingWirelessSecurity *s_wireless_sec;
- const char *key_mgmt = NULL;
-
- s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
- if (!s_wireless_sec)
- return NM_IWD_NETWORK_SECURITY_NONE;
-
- key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
- nm_assert (key_mgmt);
-
- if (!strcmp (key_mgmt, "none") || !strcmp (key_mgmt, "ieee8021x"))
- return NM_IWD_NETWORK_SECURITY_WEP;
-
- if (!strcmp (key_mgmt, "wpa-psk"))
- return NM_IWD_NETWORK_SECURITY_PSK;
-
- nm_assert (!strcmp (key_mgmt, "wpa-eap"));
- return NM_IWD_NETWORK_SECURITY_8021X;
-}
-
static gboolean
is_connection_known_network (NMConnection *connection)
{
NMSettingWireless *s_wireless;
+ NMIwdNetworkSecurity security;
+ gboolean security_ok;
GBytes *ssid;
gs_free char *ssid_utf8 = NULL;
@@ -487,9 +466,13 @@ is_connection_known_network (NMConnection *connection)
return FALSE;
ssid_utf8 = _nm_utils_ssid_to_utf8 (ssid);
+
+ security = nm_wifi_connection_get_iwd_security (connection, &security_ok);
+ if (!security_ok)
+ return FALSE;
+
return nm_iwd_manager_is_known_network (nm_iwd_manager_get (),
- ssid_utf8,
- get_connection_iwd_security (connection));
+ ssid_utf8, security);
}
static gboolean
@@ -543,7 +526,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection, GError
/* 8021x networks can only be used if they've been provisioned on the IWD side and
* thus are Known Networks.
*/
- if (get_connection_iwd_security (connection) == NM_IWD_NETWORK_SECURITY_8021X) {
+ if (nm_wifi_connection_get_iwd_security (connection, NULL) == NM_IWD_NETWORK_SECURITY_8021X) {
if (!is_connection_known_network (connection)) {
nm_utils_error_set_literal (error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
"802.1x profile is not a known network");
@@ -587,7 +570,7 @@ check_connection_available (NMDevice *device,
/* 8021x networks can only be used if they've been provisioned on the IWD side and
* thus are Known Networks.
*/
- if (get_connection_iwd_security (connection) == NM_IWD_NETWORK_SECURITY_8021X) {
+ if (nm_wifi_connection_get_iwd_security (connection, NULL) == NM_IWD_NETWORK_SECURITY_8021X) {
if (!is_connection_known_network (connection)) {
nm_utils_error_set_literal (error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
"network is not known to iwd");
@@ -731,7 +714,7 @@ complete_connection (NMDevice *device,
/* 8021x networks can only be used if they've been provisioned on the IWD side and
* thus are Known Networks.
*/
- if (get_connection_iwd_security (connection) == NM_IWD_NETWORK_SECURITY_8021X) {
+ if (nm_wifi_connection_get_iwd_security (connection, NULL) == NM_IWD_NETWORK_SECURITY_8021X) {
if (!is_connection_known_network (connection)) {
g_set_error_literal (error,
NM_CONNECTION_ERROR,
@@ -861,7 +844,7 @@ can_auto_connect (NMDevice *device,
/* 8021x networks can only be used if they've been provisioned on the IWD side and
* thus are Known Networks.
*/
- if (get_connection_iwd_security (connection) == NM_IWD_NETWORK_SECURITY_8021X) {
+ if (nm_wifi_connection_get_iwd_security (connection, NULL) == NM_IWD_NETWORK_SECURITY_8021X) {
if (!is_connection_known_network (connection))
return FALSE;
}
diff --git a/src/devices/wifi/nm-iwd-manager.h b/src/devices/wifi/nm-iwd-manager.h
index 13622919c9..59b70f6e36 100644
--- a/src/devices/wifi/nm-iwd-manager.h
+++ b/src/devices/wifi/nm-iwd-manager.h
@@ -22,6 +22,7 @@
#define __NETWORKMANAGER_IWD_MANAGER_H__
#include "devices/nm-device.h"
+#include "nm-wifi-utils.h"
#define NM_IWD_BUS_TYPE G_BUS_TYPE_SYSTEM
#define NM_IWD_SERVICE "net.connman.iwd"
@@ -36,13 +37,6 @@
#define NM_IWD_KNOWN_NETWORK_INTERFACE "net.connman.iwd.KnownNetwork"
#define NM_IWD_SIGNAL_AGENT_INTERFACE "net.connman.iwd.SignalLevelAgent"
-typedef enum {
- NM_IWD_NETWORK_SECURITY_NONE,
- NM_IWD_NETWORK_SECURITY_WEP,
- NM_IWD_NETWORK_SECURITY_PSK,
- NM_IWD_NETWORK_SECURITY_8021X,
-} NMIwdNetworkSecurity;
-
#define NM_TYPE_IWD_MANAGER (nm_iwd_manager_get_type ())
#define NM_IWD_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IWD_MANAGER, NMIwdManager))
#define NM_IWD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IWD_MANAGER, NMIwdManagerClass))
diff --git a/src/devices/wifi/nm-wifi-utils.c b/src/devices/wifi/nm-wifi-utils.c
index c9806a53cb..db8f637058 100644
--- a/src/devices/wifi/nm-wifi-utils.c
+++ b/src/devices/wifi/nm-wifi-utils.c
@@ -815,3 +815,39 @@ nm_wifi_utils_is_manf_default_ssid (GBytes *ssid)
}
return FALSE;
}
+
+NMIwdNetworkSecurity
+nm_wifi_connection_get_iwd_security (NMConnection *connection,
+ gboolean *mapped)
+{
+ NMSettingWirelessSecurity *s_wireless_sec;
+ const char *key_mgmt = NULL;
+
+ if (!nm_connection_get_setting_wireless (connection))
+ goto error;
+
+ if (mapped)
+ *mapped = TRUE;
+
+ s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
+ if (!s_wireless_sec)
+ return NM_IWD_NETWORK_SECURITY_NONE;
+
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
+ nm_assert (key_mgmt);
+
+ if (NM_IN_STRSET (key_mgmt, "none", "ieee8021x"))
+ return NM_IWD_NETWORK_SECURITY_WEP;
+
+ if (nm_streq (key_mgmt, "wpa-psk"))
+ return NM_IWD_NETWORK_SECURITY_PSK;
+
+ if (nm_streq (key_mgmt, "wpa-eap"))
+ return NM_IWD_NETWORK_SECURITY_8021X;
+
+error:
+ if (mapped)
+ *mapped = FALSE;
+
+ return NM_IWD_NETWORK_SECURITY_NONE;
+}
diff --git a/src/devices/wifi/nm-wifi-utils.h b/src/devices/wifi/nm-wifi-utils.h
index 88dc37911f..03238c2464 100644
--- a/src/devices/wifi/nm-wifi-utils.h
+++ b/src/devices/wifi/nm-wifi-utils.h
@@ -27,6 +27,13 @@
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
+typedef enum {
+ NM_IWD_NETWORK_SECURITY_NONE,
+ NM_IWD_NETWORK_SECURITY_WEP,
+ NM_IWD_NETWORK_SECURITY_PSK,
+ NM_IWD_NETWORK_SECURITY_8021X,
+} NMIwdNetworkSecurity;
+
gboolean nm_wifi_utils_complete_connection (GBytes *ssid,
const char *bssid,
NM80211Mode mode,
@@ -41,4 +48,7 @@ guint32 nm_wifi_utils_level_to_quality (int val);
gboolean nm_wifi_utils_is_manf_default_ssid (GBytes *ssid);
+NMIwdNetworkSecurity nm_wifi_connection_get_iwd_security (NMConnection *connection,
+ gboolean *mapped);
+
#endif /* __NM_WIFI_UTILS_H__ */