diff options
author | Ariel D'Alessandro <ariel.dalessandro@collabora.com> | 2021-05-27 18:41:34 -0300 |
---|---|---|
committer | Daniel Wagner <wagi@monom.org> | 2021-06-14 08:59:42 +0200 |
commit | a08873088de149e6aea771d46946e96fd35ab319 (patch) | |
tree | 5168b8e95ccc0b85b4b4b19c0a5acfcb0de91b8b /plugins | |
parent | 25479cf866e60b0101cda0d80e825cd8128bb4eb (diff) | |
download | connman-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.c | 17 |
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); } |