summaryrefslogtreecommitdiff
path: root/plugins/wifi.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/wifi.c')
-rwxr-xr-xplugins/wifi.c25
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)