diff options
author | Jaehyun Kim <jeik01.kim@samsung.com> | 2021-12-28 22:41:31 +0900 |
---|---|---|
committer | Jaehyun Kim <jeik01.kim@samsung.com> | 2021-12-28 22:41:31 +0900 |
commit | 8bc9bcbb7e2faca54d135deb199b8844a4319c53 (patch) | |
tree | daf6825c5cbe73479b8483cebab506df6d0a5b58 /plugins/wifi.c | |
parent | a0f49e57059d59d8b3124554a16238c968f158c7 (diff) | |
download | connman-8bc9bcbb7e2faca54d135deb199b8844a4319c53.tar.gz connman-8bc9bcbb7e2faca54d135deb199b8844a4319c53.tar.bz2 connman-8bc9bcbb7e2faca54d135deb199b8844a4319c53.zip |
Change the roaming scan intervalsubmit/tizen/20211230.063452
If no AP is found to roam, change the scan interval
to minimize performance degradation due to frequent scans.
Change-Id: I1d655fa0d2215358531f772b6d697e537ed3a2d5
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
Diffstat (limited to 'plugins/wifi.c')
-rwxr-xr-x | plugins/wifi.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c index ba35f5f6..7c159963 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -105,6 +105,7 @@ #define WIFI_BSSID_STR_LEN 18 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" +#define ROAM_SCAN_INTERVAL 60 /* 60 seconds */ #endif static struct connman_technology *wifi_technology = NULL; @@ -4124,6 +4125,8 @@ static void signalpoll_callback(int result, int maxspeed, int strength, char bssid_buff[WIFI_BSSID_STR_LEN] = {0,}; char *bssid_str = bssid_buff; unsigned char *bssid; + struct timespec curr_time = {0}; + __time_t roam_scan_time; const char *interface = NULL; struct connman_device *device; struct connman_network *network = user_data; @@ -4146,23 +4149,29 @@ static void signalpoll_callback(int result, int maxspeed, int strength, connman_network_set_maxspeed(network, maxspeed); set_connection_mode(network, maxspeed); - bssid = connman_network_get_bssid(network); - device = connman_network_get_device(network); - - if (device) - interface = connman_device_get_string(device, "Interface"); - - connman_network_unref(network); + clock_gettime(CLOCK_MONOTONIC, &curr_time); + roam_scan_time = connman_network_get_roam_scan_time(network); + if (curr_time.tv_sec <= roam_scan_time + ROAM_SCAN_INTERVAL) + goto done; if (need_bss_transition(freq, snr, strength)) { + device = connman_network_get_device(network); + if (device) + interface = connman_device_get_string(device, "Interface"); + + bssid = connman_network_get_bssid(network); snprintf(bssid_str, WIFI_BSSID_STR_LEN, MACSTR, MAC2STR(bssid)); __connman_technology_notify_roaming_state(interface, "required", bssid_str, NULL); if (connman_setting_get_bool("WifiRoamingScan") == false) - return; + goto done; throw_wifi_scan(device, scan_callback); + connman_network_set_roam_scan_time(network, curr_time.tv_sec); } + +done: + connman_network_unref(network); } static int network_signalpoll(struct wifi_data *wifi) |