static struct _GSupplicantINSSettings ins_settings;
#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
-#if defined TIZEN_EXT
+#if defined TIZEN_EXT_INS
static unsigned char invalid_bssid[WIFI_BSSID_LEN_MAX] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
struct added_network_information network_info;
#if defined TIZEN_EXT
dbus_bool_t is_5_0_Ghz_supported;
+ dbus_bool_t is_6_0_Ghz_supported;
int disconnect_reason;
#endif
#if defined TIZEN_EXT
int assoc_count;
};
+#if defined TIZEN_EXT_INS
static unsigned int last_connected_bss_timeout = 0;
+#endif
static bool simplified_log = true;
#endif
dbus_message_iter_get_basic(iter, &is_5_0_Ghz_supported);
interface->is_5_0_Ghz_supported = is_5_0_Ghz_supported;
+ } else if (g_strcmp0(key, "Is6GhzSupported") == 0) {
+ dbus_bool_t is_6_0_Ghz_supported;
+
+ dbus_message_iter_get_basic(iter, &is_6_0_Ghz_supported);
+ interface->is_6_0_Ghz_supported = is_6_0_Ghz_supported;
#endif
} else
SUPPLICANT_DBG("key %s type %c",
bool g_supplicant_interface_get_is_5_0_ghz_supported(GSupplicantInterface *interface)
{
if (!interface)
- return NULL;
+ return false;
return interface->is_5_0_Ghz_supported;
}
+bool g_supplicant_interface_get_is_6_0_ghz_supported(GSupplicantInterface *interface)
+{
+ if (!interface)
+ return false;
+
+ return interface->is_6_0_Ghz_supported;
+}
+
unsigned char *g_supplicant_interface_get_add_network_bssid(GSupplicantInterface *interface)
{
if (!interface)
const char *g_supplicant_network_get_mode(GSupplicantNetwork *network)
{
if (!network)
- return G_SUPPLICANT_MODE_UNKNOWN;
+ return NULL;
return mode2string(network->mode);
}
const char *g_supplicant_network_get_security(GSupplicantNetwork *network)
{
if (!network)
- return G_SUPPLICANT_SECURITY_UNKNOWN;
+ return NULL;
return security2string(network->security);
}
return vsie_list;
}
+#if defined TIZEN_EXT_INS
static bool compare_bssid(unsigned char *bssid_a, unsigned char *bssid_b)
{
if (!memcmp(bssid_a, bssid_b, WIFI_BSSID_LEN_MAX))
return g_string_free(bssid_str, FALSE);
}
-#if defined TIZEN_EXT_INS
static void count_assoc_reject(gpointer data, gpointer user_data)
{
time_t assoc_reject_time = GPOINTER_TO_INT(data);
return score;
}
-#endif
+#endif /* defined TIZEN_EXT_INS */
static void update_bssid_list(gpointer key, gpointer value, gpointer user_data)
{
bssids->strength = 100;
bssids->frequency = bss->frequency;
+ bssids->est_throughput = bss->est_throughput;
bssids->score_snr = (int)bss->snr;
#if defined TIZEN_EXT_INS
if (!bssids || !network)
return;
- SUPPLICANT_DBG("ssid [%-20s] bssid[" MACSTR "] total[%2d] freq[%2d] "
- "last_conn[%2d] assoc_reject[%2d] strength[%2d] rssi[%2d]",
- network->ssid, MAC2STR(bssids->bssid), bssids->ins_score,
- bssids->score_frequency, bssids->score_last_connected_bssid,
- bssids->score_assoc_reject, bssids->score_strength, bssids->strength - 120);
+ if (!simplified_log)
+ SUPPLICANT_DBG("ssid [%-20s] bssid[" MACSTR "] total[%2d] freq[%2d] "
+ "last_conn[%2d] assoc_reject[%2d] strength[%2d] rssi[%2d]",
+ network->ssid, MAC2STR(bssids->bssid), bssids->ins_score,
+ bssids->score_frequency, bssids->score_last_connected_bssid,
+ bssids->score_assoc_reject, bssids->score_strength, bssids->strength - 120);
}
#endif
return bssid_data.bssid_list;
}
+#if defined TIZEN_EXT_INS
void g_supplicant_network_set_last_connected_bssid(GSupplicantNetwork *network, const unsigned char *bssid)
{
if (!bssid)
return network->assoc_reject_table;
}
-GSupplicantNetwork *g_supplicant_interface_get_network(GSupplicantInterface *interface,
- const char *group)
-{
- if (!interface)
- return NULL;
-
- return g_hash_table_lookup(interface->network_table, group);
-}
-
static void copy_assoc_reject(gpointer key, gpointer value, gpointer user_data)
{
struct assoc_reject_data *cloned_assoc_data;
return cloned_assoc_reject_table;
}
+#endif /* defined TIZEN_EXT_INS */
-#endif
+GSupplicantNetwork *g_supplicant_interface_get_network(GSupplicantInterface *interface,
+ const char *group)
+{
+ if (!interface)
+ return NULL;
+
+ return g_hash_table_lookup(interface->network_table, group);
+}
+#endif /* defined TIZEN_EXT */
static void merge_network(GSupplicantNetwork *network)
{
g_string_append_printf(str, "_mesh");
#endif
+#if defined TIZEN_EXT
if (g_strcmp0(key_mgmt, "WPA-PSK") == 0)
g_string_append_printf(str, "_psk");
+ else if (g_strcmp0(key_mgmt, "SAE") == 0)
+ g_string_append_printf(str, "_sae");
+#else
+ if ((g_strcmp0(key_mgmt, "WPA-PSK") == 0) ||
+ (g_strcmp0(key_mgmt, "SAE") == 0))
+ g_string_append_printf(str, "_psk");
+#endif
#if defined TIZEN_EXT
else if (g_strcmp0(key_mgmt, "WPA-EAP") == 0)
g_string_append_printf(str, "_ieee8021x");
network->signal = best_bss->signal;
network->frequency = best_bss->frequency;
+ network->phy_mode = best_bss->phy_mode;
network->best_bss = best_bss;
}
network->name = create_name(bss->ssid, bss->ssid_len);
network->mode = bss->mode;
network->security = bss->security;
+ network->keymgmt = bss->keymgmt;
network->ssid_len = bss->ssid_len;
memcpy(network->ssid, bss->ssid, bss->ssid_len);
network->signal = bss->signal;
#endif
#if defined TIZEN_EXT
- if (bss->keymgmt & G_SUPPLICANT_KEYMGMT_SAE |
- bss->keymgmt & G_SUPPLICANT_KEYMGMT_FT_SAE)
+ if (bss->keymgmt &
+ (G_SUPPLICANT_KEYMGMT_SAE |
+ G_SUPPLICANT_KEYMGMT_FT_SAE))
bss->sae = TRUE;
if (bss->keymgmt & G_SUPPLICANT_KEYMGMT_OWE)
bss->owe = TRUE;
if (!network->best_bss || (network->best_bss == bss)) {
if (bss->signal > network->signal) {
network->signal = bss->signal;
+ network->frequency = bss->frequency;
+ network->phy_mode = bss->phy_mode;
network->best_bss = bss;
}
return;
SUPPLICANT_DBG("New network signal %d", network->signal);
}
-#if defined TIZEN_EXT
+#if defined TIZEN_EXT_INS
static gboolean last_connected_timeout(gpointer data)
{
GSupplicantInterface *interface = data;
}
}
}
-#endif
+#endif /* defined TIZEN_EXT_INS */
static void interface_current_bss(GSupplicantInterface *interface,
DBusMessageIter *iter)
struct g_supplicant_bss *bss;
const char *path;
#if defined TIZEN_EXT
- char bssid_buff1[WIFI_BSSID_STR_LEN] = {0,};
- char bssid_buff2[WIFI_BSSID_STR_LEN] = {0,};
- char *bssid_str1 = bssid_buff1;
- char *bssid_str2 = bssid_buff2;
+ char curr_bssid_buff[WIFI_BSSID_STR_LEN] = {0,};
+ char best_bssid_buff[WIFI_BSSID_STR_LEN] = {0,};
+ char *curr_bssid_str = curr_bssid_buff;
+ char *best_bssid_str = best_bssid_buff;
gboolean update = FALSE;
#endif
interface->current_network = network;
#if defined TIZEN_EXT
- snprintf(bssid_str1, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bss->bssid));
- snprintf(bssid_str2, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(network->best_bss->bssid));
+ snprintf(curr_bssid_str, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bss->bssid));
+ snprintf(best_bssid_str, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(network->best_bss->bssid));
SUPPLICANT_DBG("current network [%p], Passed bss %s, best bss %s",
- interface->current_network, bssid_str1, bssid_str2);
+ interface->current_network, curr_bssid_str, best_bssid_str);
if (network->frequency != bss->frequency) {
network->frequency = bss->frequency;
+ network->phy_mode = bss->phy_mode;
update = TRUE;
}
#endif
case G_SUPPLICANT_STATE_GROUP_HANDSHAKE:
case G_SUPPLICANT_STATE_COMPLETED:
callback_network_associated(network);
-#if defined TIZEN_EXT
+#if defined TIZEN_EXT_INS
add_timer_for_last_connected(interface);
#endif
break;
interface->state = string2state(str);
callback_interface_state(interface);
}
-#if defined TIZEN_EXT
+#if defined TIZEN_EXT_INS
switch (interface->state) {
case G_SUPPLICANT_STATE_COMPLETED:
add_timer_for_last_connected(interface);
supplicant_dbus_property_foreach(iter, bss_property, bss);
#if defined TIZEN_EXT
- if (network->interface->state != G_SUPPLICANT_STATE_COMPLETED) {
+ if (network->interface->state != G_SUPPLICANT_STATE_COMPLETED &&
+ bss == network->best_bss) {
network->frequency = bss->frequency;
network->phy_mode = bss->phy_mode;
}
dbus_int32_t maxspeed = 0;
dbus_int32_t strength = 0;
dbus_int32_t snr = 0;
+ dbus_uint32_t est_throughput = 0;
DBusMessageIter sub_iter, dict;
if (error) {
if (g_strcmp0(key, "linkspeed") == 0) {
dbus_message_iter_get_basic(&value, &maxspeed);
SUPPLICANT_DBG("linkspeed = %d", maxspeed);
- break;
} else if (g_strcmp0(key, "rssi") == 0) {
dbus_message_iter_get_basic(&value, &strength);
SUPPLICANT_DBG("Strength = %d", strength);
- break;
} else if (g_strcmp0(key, "SNR") == 0) {
dbus_message_iter_get_basic(&value, &snr);
SUPPLICANT_DBG("SNR = %d", snr);
- break;
}
+ break;
+ case DBUS_TYPE_UINT32:
+ if (g_strcmp0(key, "est_throughput") == 0) {
+ dbus_message_iter_get_basic(&value, &est_throughput);
+ SUPPLICANT_DBG("est_throughput = %u", est_throughput);
+ }
+ break;
}
dbus_message_iter_next(&dict);
}
out:
if(data->callback)
- data->callback(err, maxspeed, strength, snr, data->user_data);
+ data->callback(err, maxspeed, strength, snr, data->user_data, est_throughput);
g_free(data->path);
dbus_free(data);
#if defined TIZEN_EXT
g_free(data->ssid->ssid);
- g_free((char *)data->ssid->passphrase);
- g_free((char *)data->ssid->connector);
- g_free((char *)data->ssid->c_sign_key);
- g_free((char *)data->ssid->net_access_key);
+ if (data->ssid->is_passphrase_alloc)
+ g_free((char *)data->ssid->passphrase);
+ if (data->ssid->is_connector_alloc)
+ g_free((char *)data->ssid->connector);
+ if (data->ssid->is_c_sign_key_alloc)
+ g_free((char *)data->ssid->c_sign_key);
+ if (data->ssid->is_net_access_key_alloc)
+ g_free((char *)data->ssid->net_access_key);
#endif
g_free(data->ssid);
dbus_free(data);
g_free(data->path);
#if defined TIZEN_EXT
g_free(data->ssid->ssid);
- g_free((char *)data->ssid->passphrase);
- g_free((char *)data->ssid->connector);
- g_free((char *)data->ssid->c_sign_key);
- g_free((char *)data->ssid->net_access_key);
+ if (data->ssid->is_passphrase_alloc)
+ g_free((char *)data->ssid->passphrase);
+ if (data->ssid->is_connector_alloc)
+ g_free((char *)data->ssid->connector);
+ if (data->ssid->is_c_sign_key_alloc)
+ g_free((char *)data->ssid->c_sign_key);
+ if (data->ssid->is_net_access_key_alloc)
+ g_free((char *)data->ssid->net_access_key);
#endif
g_free(data->ssid);
g_free(data);
}
#if defined TIZEN_EXT
-static void add_network_ieee80211w(DBusMessageIter *dict, GSupplicantSSID *ssid)
-{
- if (ssid->security != G_SUPPLICANT_SECURITY_SAE
- && ssid->security != G_SUPPLICANT_SECURITY_OWE
- && ssid->security != G_SUPPLICANT_SECURITY_PSK_SHA256
- && ssid->security != G_SUPPLICANT_SECURITY_DPP)
- return;
-
- supplicant_dbus_dict_append_basic(dict, "ieee80211w", DBUS_TYPE_UINT32,
- &ssid->ieee80211w);
-}
-
static void add_network_security_connector(DBusMessageIter *dict, GSupplicantSSID *ssid)
{
if (ssid->connector && strlen(ssid->connector) > 0) {
#endif
+static void add_network_ieee80211w(DBusMessageIter *dict, GSupplicantSSID *ssid,
+ GSupplicantMfpOptions ieee80211w)
+{
+ supplicant_dbus_dict_append_basic(dict, "ieee80211w", DBUS_TYPE_UINT32,
+ &ieee80211w);
+}
+
static void add_network_security(DBusMessageIter *dict, GSupplicantSSID *ssid)
{
+ GSupplicantMfpOptions ieee80211w;
char *key_mgmt;
switch (ssid->security) {
key_mgmt = "FT-SAE SAE";
else
key_mgmt = "FT-SAE";
- } else if (ssid->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_PSK)
+ } else {
+ if (ssid->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_PSK) {
key_mgmt = "SAE WPA-PSK";
- else
- key_mgmt = "SAE";
+ ieee80211w = G_SUPPLICANT_MFP_OPTIONAL;
+ } else {
+ key_mgmt = "SAE";
+ ieee80211w = G_SUPPLICANT_MFP_REQUIRED;
+ }
+ add_network_ieee80211w(dict, ssid, ieee80211w);
+ }
add_network_security_psk(dict, ssid);
+ add_network_security_ciphers(dict, ssid);
+ add_network_security_proto(dict, ssid);
break;
case G_SUPPLICANT_SECURITY_OWE:
key_mgmt = "OWE";
add_network_security(&dict, ssid);
-#if defined TIZEN_EXT
- add_network_ieee80211w(&dict, ssid);
-#endif
-
supplicant_dbus_dict_append_fixed_array(&dict, "ssid",
DBUS_TYPE_BYTE, &ssid->ssid,
ssid->ssid_len);
dbus_message_iter_get_basic(&args, &out_data);
data->ssid->passphrase = g_strdup((const gchar *)out_data);
+ data->ssid->is_passphrase_alloc = true;
ret = supplicant_dbus_method_call(data->interface->path,
SUPPLICANT_INTERFACE ".Interface", "AddNetwork",
callback_assoc_failed(decrypt_request_data.data->user_data);
g_free(data->path);
g_free(data->ssid->ssid);
- g_free((char *)data->ssid->passphrase);
- g_free((char *)data->ssid->connector);
- g_free((char *)data->ssid->c_sign_key);
- g_free((char *)data->ssid->net_access_key);
+ if (data->ssid->is_passphrase_alloc)
+ g_free((char *)data->ssid->passphrase);
+ if (data->ssid->is_connector_alloc)
+ g_free((char *)data->ssid->connector);
+ if (data->ssid->is_c_sign_key_alloc)
+ g_free((char *)data->ssid->c_sign_key);
+ if (data->ssid->is_net_access_key_alloc)
+ g_free((char *)data->ssid->net_access_key);
g_free(data->ssid);
dbus_free(data);
}
if (g_strcmp0(key, "connector") == 0) {
dbus_message_iter_get_basic(&value, &out_data);
data->ssid->connector = g_strdup((const gchar *)out_data);
+ data->ssid->is_connector_alloc = true;
SUPPLICANT_DBG("connector %s", data->ssid->connector);
} else if (g_strcmp0(key, "c_sign_key") == 0) {
dbus_message_iter_get_basic(&value, &out_data);
data->ssid->c_sign_key = g_strdup((const gchar *)out_data);
+ data->ssid->is_c_sign_key_alloc = true;
SUPPLICANT_DBG("c_sign_key %s", data->ssid->c_sign_key);
} else if (g_strcmp0(key, "net_access_key") == 0) {
dbus_message_iter_get_basic(&value, &out_data);
data->ssid->net_access_key = g_strdup((const gchar *)out_data);
+ data->ssid->is_net_access_key_alloc = true;
SUPPLICANT_DBG("net_access_key %s", data->ssid->net_access_key);
}
}
callback_assoc_failed(decrypt_request_data.data->user_data);
g_free(data->path);
g_free(data->ssid->ssid);
- g_free((char *)data->ssid->connector);
- g_free((char *)data->ssid->c_sign_key);
- g_free((char *)data->ssid->net_access_key);
+ if (data->ssid->is_connector_alloc)
+ g_free((char *)data->ssid->connector);
+ if (data->ssid->is_c_sign_key_alloc)
+ g_free((char *)data->ssid->c_sign_key);
+ if (data->ssid->is_net_access_key_alloc)
+ g_free((char *)data->ssid->net_access_key);
g_free(data->ssid);
dbus_free(data);
}