summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorAriel D'Alessandro <ariel.dalessandro@collabora.com>2021-05-27 18:41:34 -0300
committerDaniel Wagner <wagi@monom.org>2021-06-14 08:59:42 +0200
commita08873088de149e6aea771d46946e96fd35ab319 (patch)
tree5168b8e95ccc0b85b4b4b19c0a5acfcb0de91b8b /plugins
parent25479cf866e60b0101cda0d80e825cd8128bb4eb (diff)
downloadconnman-a08873088de149e6aea771d46946e96fd35ab319.tar.gz
wifi: Add wpa_supplicant WPA3-SAE support
Implement WPA3-SAE authentication on connman side using wpa_supplicant backend. Initially based on Tizen project: https://review.tizen.org/git/?p=platform/upstream/connman.git
Diffstat (limited to 'plugins')
-rw-r--r--plugins/wifi.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c
index e7014510..578b4be7 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -166,6 +166,10 @@ struct wifi_data {
int assoc_code;
};
+struct wifi_network {
+ unsigned int keymgmt;
+};
+
struct disconnect_data {
struct wifi_data *wifi;
struct connman_network *network;
@@ -816,6 +820,7 @@ static void remove_networks(struct connman_device *device,
for (list = wifi->networks; list; list = list->next) {
struct connman_network *network = list->data;
+ g_free(connman_network_get_data(network));
connman_device_remove_network(device, network);
connman_network_unref(network);
}
@@ -2158,6 +2163,7 @@ static GSupplicantSecurity network_security(const char *security)
static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network)
{
+ struct wifi_network *network_data = connman_network_get_data(network);
const char *security;
memset(ssid, 0, sizeof(*ssid));
@@ -2167,6 +2173,8 @@ static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network)
ssid->scan_ssid = 1;
security = connman_network_get_string(network, "WiFi.Security");
ssid->security = network_security(security);
+ ssid->keymgmt = network_data->keymgmt;
+ ssid->ieee80211w = G_SUPPLICANT_MFP_OPTIONAL;
ssid->passphrase = connman_network_get_string(network,
"WiFi.Passphrase");
@@ -2813,6 +2821,7 @@ static void network_added(GSupplicantNetwork *supplicant_network)
struct connman_network *network;
GSupplicantInterface *interface;
struct wifi_data *wifi;
+ struct wifi_network *network_data;
const char *name, *identifier, *security, *group, *mode;
const unsigned char *ssid;
unsigned int ssid_len;
@@ -2861,8 +2870,15 @@ static void network_added(GSupplicantNetwork *supplicant_network)
}
wifi->networks = g_slist_prepend(wifi->networks, network);
+
+ network_data = g_new0(struct wifi_network, 1);
+ connman_network_set_data(network, network_data);
}
+ network_data = connman_network_get_data(network);
+ network_data->keymgmt =
+ g_supplicant_network_get_keymgmt(supplicant_network);
+
if (name && name[0] != '\0')
connman_network_set_name(network, name);
@@ -2930,6 +2946,7 @@ static void network_removed(GSupplicantNetwork *network)
wifi->networks = g_slist_remove(wifi->networks, connman_network);
+ g_free(connman_network_get_data(connman_network));
connman_device_remove_network(wifi->device, connman_network);
connman_network_unref(connman_network);
}