@@ -517,8 +517,23 @@ struct network_info *known_networks_find(const char *ssid,
return l_queue_find(known_networks, network_info_match, &query);
}
+static void known_network_append_frequencies(const struct network_info *info,
+ struct scan_freq_set *set,
+ uint8_t max)
+{
+ const struct l_queue_entry *entry;
+
+ for (entry = l_queue_get_entries(info->known_frequencies); entry && max;
+ entry = entry->next, max--) {
+ const struct known_frequency *known_freq = entry->data;
+
+ scan_freq_set_add(set, known_freq->frequency);
+ }
+}
+
struct scan_freq_set *known_networks_get_recent_frequencies(
- uint8_t num_networks_tosearch)
+ uint8_t num_networks_tosearch,
+ uint8_t freqs_per_network)
{
/*
* This search function assumes that the known networks are always
@@ -527,10 +542,9 @@ struct scan_freq_set *known_networks_get_recent_frequencies(
* list.
*/
const struct l_queue_entry *network_entry;
- const struct l_queue_entry *freq_entry;
struct scan_freq_set *set;
- if (!num_networks_tosearch)
+ if (!num_networks_tosearch || !freqs_per_network)
return NULL;
set = scan_freq_set_new();
@@ -541,14 +555,8 @@ struct scan_freq_set *known_networks_get_recent_frequencies(
num_networks_tosearch--) {
const struct network_info *network = network_entry->data;
- for (freq_entry = l_queue_get_entries(
- network->known_frequencies);
- freq_entry; freq_entry = freq_entry->next) {
- const struct known_frequency *known_freq =
- freq_entry->data;
-
- scan_freq_set_add(set, known_freq->frequency);
- }
+ known_network_append_frequencies(network, set,
+ freqs_per_network);
}
return set;
@@ -113,8 +113,10 @@ struct network_info *known_networks_find(const char *ssid,
enum security security);
struct scan_freq_set *known_networks_get_recent_frequencies(
- uint8_t num_networks_tosearch);
-int known_network_add_frequency(struct network_info *info, uint32_t frequency);
+ uint8_t num_networks_tosearch,
+ uint8_t freqs_per_network);
+int known_network_add_frequency(struct network_info *info,
+ uint32_t frequency);
void known_network_frequency_sync(struct network_info *info);
uint32_t known_networks_watch_add(known_networks_watch_func_t func,
@@ -64,6 +64,9 @@
#include "src/eap-tls-common.h"
#include "src/storage.h"
+#define STATION_RECENT_NETWORK_LIMIT 5
+#define STATION_RECENT_FREQS_LIMIT 5
+
static struct l_queue *station_list;
static uint32_t netdev_watch;
static uint32_t mfp_setting;
@@ -1438,7 +1441,9 @@ static int station_quick_scan_trigger(struct station *station)
return -EAGAIN;
}
- known_freq_set = known_networks_get_recent_frequencies(5);
+ known_freq_set = known_networks_get_recent_frequencies(
+ STATION_RECENT_NETWORK_LIMIT,
+ STATION_RECENT_FREQS_LIMIT);
if (!known_freq_set)
return -ENODATA;
@@ -2761,7 +2766,8 @@ static int station_roam_scan_known_freqs(struct station *station)
const struct network_info *info = network_get_info(
station->connected_network);
struct scan_freq_set *freqs = network_info_get_roam_frequencies(info,
- station->connected_bss->frequency, 5);
+ station->connected_bss->frequency,
+ STATION_RECENT_FREQS_LIMIT);
int r = -ENODATA;
if (!freqs)