diff options
author | Jaehyun Kim <jeik01.kim@samsung.com> | 2023-08-18 04:43:36 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@review> | 2023-08-18 04:43:36 +0000 |
commit | 0cf207f2d6afe27ea08a3615d0d9ce4f9b4ae6d8 (patch) | |
tree | b1ba8c02cad640c7c707cb8e5a9c9b0590c361bc | |
parent | ad140510f9a200580fad5f31132ad1b4c5502b8b (diff) | |
parent | 57e821f23954590bff9912e33ff0921d87ae7e2c (diff) | |
download | connman-0cf207f2d6afe27ea08a3615d0d9ce4f9b4ae6d8.tar.gz connman-0cf207f2d6afe27ea08a3615d0d9ce4f9b4ae6d8.tar.bz2 connman-0cf207f2d6afe27ea08a3615d0d9ce4f9b4ae6d8.zip |
Merge "Use estimated throughput for wifi roaming" into tizen
-rwxr-xr-x | gsupplicant/gsupplicant.h | 4 | ||||
-rwxr-xr-x | gsupplicant/supplicant.c | 18 | ||||
-rwxr-xr-x | include/network.h | 3 | ||||
-rwxr-xr-x | plugins/wifi.c | 165 | ||||
-rwxr-xr-x | src/main.c | 119 | ||||
-rwxr-xr-x | src/main.conf | 10 | ||||
-rwxr-xr-x | src/main_robot.conf | 9 | ||||
-rwxr-xr-x | src/main_tv.conf | 2 | ||||
-rwxr-xr-x | src/network.c | 15 | ||||
-rwxr-xr-x | src/service.c | 2 |
10 files changed, 272 insertions, 75 deletions
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index dfdfe5e1..7f8a7a48 100755 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -305,6 +305,7 @@ struct g_connman_bssids { uint16_t frequency; uint16_t assoc_reject_cnt; bool is_last_connected; + unsigned int est_throughput; int score_snr; #if defined TIZEN_EXT_INS int score_last_connected_bssid; @@ -342,7 +343,8 @@ typedef void (*GSupplicantInterfaceCallback) (int result, #if defined TIZEN_EXT typedef void (*GSupplicantMaxSpeedCallback) (int result, int maxspeed, - int strength, int snr, void *user_data); + int strength, int snr, void *user_data, + unsigned int est_throughput); #endif void g_supplicant_interface_cancel(GSupplicantInterface *interface); diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 99c616a2..fce4f7b3 100755 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -456,7 +456,9 @@ struct assoc_count_data { int assoc_count; }; +#if defined TIZEN_EXT_INS static unsigned int last_connected_bss_timeout = 0; +#endif static bool simplified_log = true; #endif @@ -2015,6 +2017,7 @@ void *g_supplicant_network_get_wifi_vsie(GSupplicantNetwork *network) 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)) @@ -2023,7 +2026,6 @@ static bool compare_bssid(unsigned char *bssid_a, unsigned char *bssid_b) return false; } -#if defined TIZEN_EXT_INS static gchar *convert_bssid_to_str(unsigned char *bssid) { GString *bssid_str; @@ -2203,6 +2205,7 @@ 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 @@ -6592,6 +6595,7 @@ static void interface_signalpoll_result(const char *error, 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) { @@ -6623,23 +6627,27 @@ static void interface_signalpoll_result(const char *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); diff --git a/include/network.h b/include/network.h index 46ccc816..9f1a6118 100755 --- a/include/network.h +++ b/include/network.h @@ -249,6 +249,9 @@ void connman_network_set_roam_scan_time(struct connman_network *network, __time_t roam_scan_time); int connman_network_get_snr(struct connman_network *network); void connman_network_set_snr(struct connman_network *network, int snr); +unsigned int connman_network_get_est_throughput(struct connman_network *network); +void connman_network_set_est_throughput(struct connman_network *network, + unsigned int est_throughput); int connman_network_set_phy_mode(struct connman_network *network, ieee80211_modes_e mode); ieee80211_modes_e connman_network_get_phy_mode(struct connman_network *network); diff --git a/plugins/wifi.c b/plugins/wifi.c index 086153cc..e9e4ae94 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -104,10 +104,14 @@ * No signal : -89 ~ */ #define RSSI_LEVEL_2_5G -77 -#define RSSI_LEVEL_2_24G -75 +#define RSSI_LEVEL_2_2_4G -75 #define RSSI_LEVEL_3_5G -68 -#define RSSI_LEVEL_3_24G -64 +#define RSSI_LEVEL_3_2_4G -64 #define ROAM_SCAN_INTERVAL 60 /* 60 seconds */ + +static int min_snr = 0; +static int min_rssi_2_4GHz = 0; +static int min_rssi_5GHz = 0; #endif static struct connman_technology *wifi_technology = NULL; @@ -2147,40 +2151,100 @@ static gboolean need_bss_transition(uint16_t freq, int snr, int strength) /* * If the currently connected AP matches the following conditions, * scan for BSS transition is started. - * - SNR is less than 20 or RSSI level is less than 3 + * - SNR is less than min_snr or RSSI is less than + * min_rssi_2_4GHz or min_rssi_5GHz. */ - if (snr < 20 && snr != 0) + if (min_snr != 0 && snr != 0 && snr < min_snr) return TRUE; - else if (freq > 4900 && signal <= RSSI_LEVEL_2_5G) + else if (freq > 4000 && signal <= min_rssi_5GHz) return TRUE; - else if (freq <= 4900 && signal <= RSSI_LEVEL_2_24G) + else if (freq < 4000 && signal <= min_rssi_2_4GHz) return TRUE; return FALSE; } -static gboolean check_bss_condition(uint16_t freq, int snr, uint16_t strength) +static gboolean check_bss_diff(int cur_level, int sel_level, int to_5ghz, + unsigned int cur_est, unsigned int sel_est) +{ + int min_diff; + int diff; + + /* This code is from wpa_supplicant. */ + if (cur_level < -85) /* ..-86 dBm */ + min_diff = 1; + else if (cur_level < -80) /* -85..-81 dBm */ + min_diff = 2; + else if (cur_level < -75) /* -80..-76 dBm */ + min_diff = 3; + else if (cur_level < -70) /* -75..-71 dBm */ + min_diff = 4; + else if (cur_level < 0) /* -70..-1 dBm */ + min_diff = 5; + else /* unspecified units (not in dBm) */ + min_diff = 2; + + if (cur_est > sel_est * 1.5) + min_diff += 10; + else if (cur_est > sel_est * 1.2) + min_diff += 5; + else if (cur_est > sel_est * 1.1) + min_diff += 2; + else if (cur_est > sel_est) + min_diff++; + else if (sel_est > cur_est * 1.5) + min_diff -= 10; + else if (sel_est > cur_est * 1.2) + min_diff -= 5; + else if (sel_est > cur_est * 1.1) + min_diff -= 2; + else if (sel_est > cur_est) + min_diff--; + + if (to_5ghz) + min_diff -= 2; + + diff = sel_level - cur_level; + + if (diff < min_diff) + return FALSE; + + return TRUE; +} + +static gboolean check_bss_condition(uint16_t freq, uint16_t strength, + unsigned int est_throughput, uint16_t cur_freq, uint16_t cur_strength, + unsigned int cur_est_throughput) { /* * Since bssid->strength is a positive value, * it need to be changed to its original value. */ int signal = strength - 120; + int cur_signal = cur_strength - 120; + int to_5ghz = freq > 4000 && cur_freq < 4000; + + DBG("cur_freq=%d cur_level=%d cur_est=%d sel_freq=%d sel_level=%d sel_est=%d", + cur_freq, cur_strength, cur_est_throughput, + freq, strength, est_throughput); /* * If the AP that matches the following conditions exists in the SCAN result, * BSS transition is started. - * - SNR is 25 or more and RSSI level is greater than 3 */ - if (snr < 25 && snr != 0) - return FALSE; - if (freq > 4900 && signal > RSSI_LEVEL_3_5G) - return TRUE; - else if (freq <= 4900 && signal > RSSI_LEVEL_3_24G) + if (est_throughput > cur_est_throughput + 5000) return TRUE; - return FALSE; + if (cur_signal > signal + to_5ghz * 2 && + est_throughput < cur_est_throughput * 1.2) + return FALSE; + + if (cur_est_throughput > est_throughput + 5000) + return FALSE; + + return check_bss_diff(cur_signal, signal, + to_5ghz, cur_est_throughput, est_throughput); } static void scan_callback_hidden(int result, @@ -2209,18 +2273,37 @@ static void start_roaming(struct wifi_data *wifi) if (connman_network_get_bool(network, "WiFi.Roaming")) return; + uint16_t cur_freq = connman_network_get_frequency(network); + uint8_t cur_strength = connman_network_get_strength(network); + unsigned int cur_est_throughput = connman_network_get_est_throughput(network); + if (!need_bss_transition( - connman_network_get_frequency(network), + cur_freq, connman_network_get_snr(network), - connman_network_get_strength(network))) + cur_strength)) return; + unsigned char *cur_bssid = connman_network_get_bssid(network); + for (; bssid_list; bssid_list = bssid_list->next) { struct g_connman_bssids *bssid = bssid_list->data; - if (check_bss_condition(bssid->frequency, - bssid->score_snr, bssid->strength)) + if (memcmp(cur_bssid, bssid->bssid, WIFI_BSSID_LEN_MAX) == 0) + continue; + + if (check_bss_condition( + bssid->frequency, bssid->strength, bssid->est_throughput, + cur_freq, cur_strength, cur_est_throughput)) { roaming_ap_found = true; + + char bssid_buff[WIFI_BSSID_STR_LEN] = {0,}; + char *bssid_str = bssid_buff; + + snprintf(bssid_str, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bssid->bssid)); + connman_network_set_string(network, + "WiFi.RoamingDstBSSID", bssid_str); + break; + } } if (roaming_ap_found) { @@ -3950,14 +4033,24 @@ static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network) } GSList *list; - char buff[MAC_ADDRESS_LENGTH]; + char buff[WIFI_BSSID_STR_LEN]; + const char *dst_bssid = connman_network_get_string(network, + "WiFi.RoamingDstBSSID"); for (list = bssid_list; list; list = list->next) { struct connman_bssids * bssids = (struct connman_bssids *)list->data; - g_snprintf(buff, MAC_ADDRESS_LENGTH, "%02x:%02x:%02x:%02x:%02x:%02x", - bssids->bssid[0], bssids->bssid[1], bssids->bssid[2], - bssids->bssid[3], bssids->bssid[4], bssids->bssid[5]); - buff[MAC_ADDRESS_LENGTH - 1] = '\0'; + g_snprintf(buff, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bssids->bssid)); + buff[WIFI_BSSID_STR_LEN - 1] = '\0'; + + if (dst_bssid) { + if (g_strcmp0(dst_bssid, (const gchar *)buff) == 0) { + memcpy(buff_bssid, bssids->bssid, WIFI_BSSID_LEN_MAX); + ssid->bssid = buff_bssid; + ssid->freq = (unsigned int)bssids->frequency; + break; + } + continue; + } gchar *curr_bssid = g_strdup((const gchar *)buff); @@ -3975,6 +4068,9 @@ static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network) } } + if (dst_bssid) + connman_network_set_string(network, "WiFi.RoamingDstBSSID", NULL); + if (!list) { ssid->bssid = connman_network_get_bssid(network); g_hash_table_remove_all(failed_bssids); @@ -4246,7 +4342,7 @@ static void set_connection_mode(struct connman_network *network, } static void signalpoll_callback(int result, int maxspeed, int strength, - int snr, void *user_data) + int snr, void *user_data, unsigned int est_throughput) { char bssid_buff[WIFI_BSSID_STR_LEN] = {0,}; char *bssid_str = bssid_buff; @@ -4286,11 +4382,12 @@ static void signalpoll_callback(int result, int maxspeed, int strength, bssid = connman_network_get_bssid(network); snprintf(bssid_str, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bssid)); - DBG("network %p, bssid %s, freq %u, maxspeed %d, strength %d, snr %d", - network, bssid_str, freq, maxspeed, strength, snr); + DBG("network %p, bssid %s, freq %u, maxspeed %d, strength %d, snr %d, est_throughput %u", + network, bssid_str, freq, maxspeed, strength, snr, est_throughput); connman_network_set_strength(network, (uint8_t)strength); connman_network_set_snr(network, snr); + connman_network_set_est_throughput(network, est_throughput); connman_network_set_maxspeed(network, maxspeed); set_connection_mode(network, maxspeed); @@ -6670,7 +6767,7 @@ static void supp_ins_init(void) connman_setting_get_uint("INSLastConnectedBSSIDScore"), connman_setting_get_uint("INSAssocRejectScore"), connman_setting_get_int("INSSignalLevel3_5GHz"), - connman_setting_get_int("INSSignalLevel3_24GHz") + connman_setting_get_int("INSSignalLevel3_2_4GHz") ); } #endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */ @@ -6707,6 +6804,20 @@ static int wifi_init(void) #if defined TIZEN_EXT failed_bssids = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + + min_snr = connman_setting_get_int("WifiRoamingMinSNR"); + + min_rssi_2_4GHz = connman_setting_get_int("WifiRoamingMinRSSI_2_4GHz"); + if (min_rssi_2_4GHz >= 0) + min_rssi_2_4GHz = RSSI_LEVEL_2_2_4G; + + min_rssi_5GHz = connman_setting_get_int("WifiRoamingMinRSSI_5GHz"); + if (min_rssi_5GHz >= 0) + min_rssi_5GHz = RSSI_LEVEL_2_5G; + + DBG("Min SNR: %d, Min RSSI: %d(2.4GHz), %d(5GHz)", + min_snr, min_rssi_2_4GHz, min_rssi_5GHz); + #endif #if defined TIZEN_EXT && defined TIZEN_EXT_INS @@ -126,6 +126,9 @@ static struct { bool simple_log; bool wifi_roam_scan; bool wifi_roam; + int wifi_roam_min_snr; + int wifi_roam_min_rssi_2_4GHz; + int wifi_roam_min_rssi_5GHz; #endif } connman_settings = { .bg_scan = true, @@ -166,6 +169,9 @@ static struct { .simple_log = true, .wifi_roam_scan = false, .wifi_roam = false, + .wifi_roam_min_snr = 0, + .wifi_roam_min_rssi_2_4GHz = 0, + .wifi_roam_min_rssi_5GHz = 0, #endif }; @@ -256,13 +262,16 @@ static struct { #define CONF_TIZEN_TV_EXT "TizenTVExtension" #define CONF_ENABLE_AUTO_IP "EnableAutoIp" #define CONF_GLOBAL_NAMESERVER "GlobalNameserver" -#define CONF_CONNMAN_SUPPLICANT_DEBUG "ConnmanSupplicantDebug" -#define CONF_CONNMAN_WIFI_DEF_IFNAME "DefaultWifiInterface" -#define CONF_CONNMAN_FILE_LOG "FileLogging" -#define CONF_CONNMAN_DLOG_LOG "DlogLogging" -#define CONF_CONNMAN_SIMPLIFIED_LOG "SimplifiedLog" -#define CONF_CONNMAN_WIFI_ROAM_SCAN "WifiRoamingScan" -#define CONF_CONNMAN_WIFI_ROAM "WifiRoaming" +#define CONF_SUPPLICANT_DEBUG "ConnmanSupplicantDebug" +#define CONF_WIFI_DEF_IFNAME "DefaultWifiInterface" +#define CONF_FILE_LOG "FileLogging" +#define CONF_DLOG_LOG "DlogLogging" +#define CONF_SIMPLIFIED_LOG "SimplifiedLog" +#define CONF_WIFI_ROAM_SCAN "WifiRoamingScan" +#define CONF_WIFI_ROAM "WifiRoaming" +#define CONF_WIFI_ROAM_MIN_SNR "WifiRoamingMinSNR" +#define CONF_WIFI_ROAM_MIN_RSSI_2_4 "WifiRoamingMinRSSI_2_4GHz" +#define CONF_WIFI_ROAM_MIN_RSSI_5 "WifiRoamingMinRSSI_5GHz" #endif #if defined TIZEN_EXT @@ -290,7 +299,7 @@ static struct { #define CONF_INS_INTERNET_SCORE "INSInternetScore" /* Common */ #define CONF_INS_SIGNAL_LEVEL3_5GHZ "INSSignalLevel3_5GHz" -#define CONF_INS_SIGNAL_LEVEL3_24GHZ "INSSignalLevel3_24GHz" +#define CONF_INS_SIGNAL_LEVEL3_2_4GHZ "INSSignalLevel3_2_4GHz" #endif static const char *supported_options[] = { @@ -325,13 +334,16 @@ static const char *supported_options[] = { CONF_TIZEN_TV_EXT, CONF_ENABLE_AUTO_IP, CONF_GLOBAL_NAMESERVER, - CONF_CONNMAN_SUPPLICANT_DEBUG, - CONF_CONNMAN_WIFI_DEF_IFNAME, - CONF_CONNMAN_FILE_LOG, - CONF_CONNMAN_DLOG_LOG, - CONF_CONNMAN_SIMPLIFIED_LOG, - CONF_CONNMAN_WIFI_ROAM_SCAN, - CONF_CONNMAN_WIFI_ROAM, + CONF_SUPPLICANT_DEBUG, + CONF_WIFI_DEF_IFNAME, + CONF_FILE_LOG, + CONF_DLOG_LOG, + CONF_SIMPLIFIED_LOG, + CONF_WIFI_ROAM_SCAN, + CONF_WIFI_ROAM, + CONF_WIFI_ROAM_MIN_SNR, + CONF_WIFI_ROAM_MIN_RSSI_2_4, + CONF_WIFI_ROAM_MIN_RSSI_5, #endif NULL }; @@ -362,7 +374,7 @@ static const char *supported_ins_options[] = { CONF_INS_INTERNET_SCORE, /* Common */ CONF_INS_SIGNAL_LEVEL3_5GHZ, - CONF_INS_SIGNAL_LEVEL3_24GHZ, + CONF_INS_SIGNAL_LEVEL3_2_4GHZ, NULL }; #endif @@ -506,7 +518,7 @@ static void check_config(GKeyFile *config) } #if defined TIZEN_EXT -static void check_Tizen_INS_configuration(GKeyFile *config) +static void check_tizen_ins_configuration(GKeyFile *config) { GError *error = NULL; char *ins_preferred_freq_bssid; @@ -660,20 +672,21 @@ static void check_Tizen_INS_configuration(GKeyFile *config) g_clear_error(&error); integer = g_key_file_get_integer(config, "INS", - CONF_INS_SIGNAL_LEVEL3_24GHZ, &error); + CONF_INS_SIGNAL_LEVEL3_2_4GHZ, &error); if (!error) connman_ins_settings.ins_signal_level3_24ghz = integer; g_clear_error(&error); } -static void check_Tizen_configuration(GKeyFile *config) +static void check_tizen_configuration(GKeyFile *config) { GError *error = NULL; char **cellular_interfaces; char *global_nameserver; char *default_wifi_ifname; bool boolean; + int integer; gsize len; cellular_interfaces = g_key_file_get_string_list(config, "General", @@ -706,51 +719,76 @@ static void check_Tizen_configuration(GKeyFile *config) g_clear_error(&error); boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_SUPPLICANT_DEBUG, &error); + CONF_SUPPLICANT_DEBUG, &error); if (!error) connman_settings.supplicant_debug = boolean; g_clear_error(&error); default_wifi_ifname = __connman_config_get_string(config, "General", - CONF_CONNMAN_WIFI_DEF_IFNAME, &error); + CONF_WIFI_DEF_IFNAME, &error); if (!error) connman_settings.def_wifi_ifname = default_wifi_ifname; g_clear_error(&error); boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_FILE_LOG, &error); + CONF_FILE_LOG, &error); if (!error) connman_settings.file_log = boolean; g_clear_error(&error); boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_DLOG_LOG, &error); + CONF_DLOG_LOG, &error); if (!error) connman_settings.dlog_log = boolean; g_clear_error(&error); boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_SIMPLIFIED_LOG, &error); + CONF_SIMPLIFIED_LOG, &error); if (!error) connman_settings.simple_log = boolean; + g_clear_error(&error); + boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_WIFI_ROAM_SCAN, &error); + CONF_WIFI_ROAM_SCAN, &error); if (!error) connman_settings.wifi_roam_scan = boolean; + g_clear_error(&error); + boolean = __connman_config_get_bool(config, "General", - CONF_CONNMAN_WIFI_ROAM, &error); + CONF_WIFI_ROAM, &error); if (!error) connman_settings.wifi_roam = boolean; g_clear_error(&error); - check_Tizen_INS_configuration(config); + integer = g_key_file_get_integer(config, "General", + CONF_WIFI_ROAM_MIN_SNR, &error); + if (!error && integer >= 0) + connman_settings.wifi_roam_min_snr = integer; + + g_clear_error(&error); + + integer = g_key_file_get_integer(config, "General", + CONF_WIFI_ROAM_MIN_RSSI_2_4, &error); + if (!error) + connman_settings.wifi_roam_min_rssi_2_4GHz = integer; + + g_clear_error(&error); + + integer = g_key_file_get_integer(config, "General", + CONF_WIFI_ROAM_MIN_RSSI_5, &error); + if (!error) + connman_settings.wifi_roam_min_rssi_5GHz = integer; + + g_clear_error(&error); + + check_tizen_ins_configuration(config); } static void set_nofile_inc(void) @@ -1032,7 +1070,7 @@ static void parse_config(GKeyFile *config) g_clear_error(&error); #if defined TIZEN_EXT - check_Tizen_configuration(config); + check_tizen_configuration(config); #endif } @@ -1242,7 +1280,7 @@ char *connman_setting_get_string(const char *key) if (g_str_equal(key, CONF_INS_PREFERRED_FREQ)) return connman_ins_settings.ins_preferred_freq; - if (g_str_equal(key, CONF_CONNMAN_WIFI_DEF_IFNAME)) + if (g_str_equal(key, CONF_WIFI_DEF_IFNAME)) return connman_settings.def_wifi_ifname; #endif return NULL; @@ -1287,22 +1325,22 @@ bool connman_setting_get_bool(const char *key) if (g_str_equal(key, CONF_ENABLE_AUTO_IP)) return connman_settings.auto_ip; - if (g_str_equal(key, CONF_CONNMAN_SUPPLICANT_DEBUG)) + if (g_str_equal(key, CONF_SUPPLICANT_DEBUG)) return connman_settings.supplicant_debug; - if (g_str_equal(key, CONF_CONNMAN_FILE_LOG)) + if (g_str_equal(key, CONF_FILE_LOG)) return connman_settings.file_log; - if (g_str_equal(key, CONF_CONNMAN_DLOG_LOG)) + if (g_str_equal(key, CONF_DLOG_LOG)) return connman_settings.dlog_log; - if (g_str_equal(key, CONF_CONNMAN_SIMPLIFIED_LOG)) + if (g_str_equal(key, CONF_SIMPLIFIED_LOG)) return connman_settings.simple_log; - if (g_str_equal(key, CONF_CONNMAN_WIFI_ROAM_SCAN)) + if (g_str_equal(key, CONF_WIFI_ROAM_SCAN)) return connman_settings.wifi_roam_scan; - if (g_str_equal(key, CONF_CONNMAN_WIFI_ROAM)) + if (g_str_equal(key, CONF_WIFI_ROAM)) return connman_settings.wifi_roam; if (g_str_equal(key, CONF_INS_LAST_CONNECTED_BSSID)) @@ -1378,9 +1416,18 @@ int connman_setting_get_int(const char *key) if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_5GHZ)) return connman_ins_settings.ins_signal_level3_5ghz; - if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_24GHZ)) + if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_2_4GHZ)) return connman_ins_settings.ins_signal_level3_24ghz; + if (g_str_equal(key, CONF_WIFI_ROAM_MIN_SNR)) + return connman_settings.wifi_roam_min_snr; + + if (g_str_equal(key, CONF_WIFI_ROAM_MIN_RSSI_2_4)) + return connman_settings.wifi_roam_min_rssi_2_4GHz; + + if (g_str_equal(key, CONF_WIFI_ROAM_MIN_RSSI_5)) + return connman_settings.wifi_roam_min_rssi_5GHz; + return 0; } #endif diff --git a/src/main.conf b/src/main.conf index f997c65c..53174253 100755 --- a/src/main.conf +++ b/src/main.conf @@ -219,6 +219,14 @@ DefaultWifiInterface = wlan0 # Default value is false. # WifiRoaming = true +# Determine if the SNR and signal have weakened +# based on the following conditions. +# - SNR is less than WifiRoamingMinSNR or RSSI is less than +# WifiRoamingMinRSSI_2_4GHz or WifiRoamingMinRSSI_5GHz. +# - If the WifiRoamingMinSNR value is 0, the SNR check will be skipped. +WifiRoamingMinSNR = 20 +WifiRoamingMinRSSI_2_4GHz = -75 +WifiRoamingMinRSSI_5GHz = -77 [INS] # INS(Intelligent Network Selection) configuration: BSSID Selection. @@ -249,4 +257,4 @@ INSInternetScore = 30 # INS(Intelligent Network Selection) configuration: Common. INSSignalLevel3_5GHz = -76 -INSSignalLevel3_24GHz = -74 +INSSignalLevel3_2_4GHz = -74 diff --git a/src/main_robot.conf b/src/main_robot.conf index f2b84b55..cc364d88 100755 --- a/src/main_robot.conf +++ b/src/main_robot.conf @@ -215,6 +215,13 @@ DefaultWifiInterface = wlan0 # Default value is false. # WifiRoaming = true +# Determine if the SNR and signal have weakened +# based on the following conditions. +# - SNR is less than WifiRoamingMinSNR or RSSI level is less than +# WifiRoamingMinRSSI_2_4GHz or WifiRoamingMinRSSI_5GHz. +WifiRoamingMinSNR = 20 +WifiRoamingMinRSSI_2_4GHz = -75 +WifiRoamingMinRSSI_5GHz = -77 [INS] # INS(Intelligent Network Selection) configuration: BSSID Selection. @@ -245,4 +252,4 @@ INSInternetScore = 30 # INS(Intelligent Network Selection) configuration: Common. INSSignalLevel3_5GHz = -76 -INSSignalLevel3_24GHz = -74 +INSSignalLevel3_2_4GHz = -74 diff --git a/src/main_tv.conf b/src/main_tv.conf index c7b8e112..ce9d711f 100755 --- a/src/main_tv.conf +++ b/src/main_tv.conf @@ -149,4 +149,4 @@ INSInternetScore = 30 # INS(Intelligent Network Selection) configuration: Common. INSSignalLevel3_5GHz = -76 -INSSignalLevel3_24GHz = -74 +INSSignalLevel3_2_4GHz = -74 diff --git a/src/network.c b/src/network.c index ce107cce..568bad5b 100755 --- a/src/network.c +++ b/src/network.c @@ -148,8 +148,7 @@ struct connman_network { char *connector; char *c_sign_key; char *net_access_key; -#endif -#if defined TIZEN_EXT + unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX]; GHashTable *assoc_reject_table; bool owe_transition_mode; @@ -163,6 +162,7 @@ struct connman_network { __time_t roam_scan_time; unsigned int max_bssid_count; int snr; + unsigned int est_throughput; #endif } wifi; @@ -2813,6 +2813,17 @@ void connman_network_set_snr(struct connman_network *network, int snr) { network->wifi.snr = snr; } + +unsigned int connman_network_get_est_throughput(struct connman_network *network) +{ + return network->wifi.est_throughput; +} + +void connman_network_set_est_throughput(struct connman_network *network, + unsigned int est_throughput) +{ + network->wifi.est_throughput = est_throughput; +} #endif int connman_network_set_nameservers(struct connman_network *network, diff --git a/src/service.c b/src/service.c index fb489bc0..f2096eb9 100755 --- a/src/service.c +++ b/src/service.c @@ -11570,7 +11570,7 @@ static void ins_setting_init(void) * So the value for comparison should also be converted to the same. */ ins_settings.signal_level3_5ghz = connman_setting_get_int("INSSignalLevel3_5GHz") + 120; - ins_settings.signal_level3_24ghz = connman_setting_get_int("INSSignalLevel3_24GHz") + 120; + ins_settings.signal_level3_24ghz = connman_setting_get_int("INSSignalLevel3_2_4GHz") + 120; DBG("last_user_selection [%s]", ins_settings.last_user_selection ? "true" : "false"); DBG("last_user_selection_time [%d]", ins_settings.last_user_selection_time); |