From f5db4bfea8f18856ecdcd4618d30b2e10a05b650 Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Thu, 12 Sep 2019 09:53:35 -0700 Subject: [PATCH] network: sync frequencies per-network The existing frequency syncing was done when IWD closes. Instead we can sync as networks are connected to or promoted to known which will keep the FS more up to date. This also allows hotspot networks to use the known frequency file. --- src/network.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/network.c b/src/network.c index 57254cde..4cd32274 100644 --- a/src/network.c +++ b/src/network.c @@ -150,6 +150,9 @@ void network_connected(struct network *network) err = network_info_touch(network->info); if (err < 0) l_error("Error %i touching network config", err); + + /* Syncs frequencies of already known network*/ + known_network_frequency_sync(network->info); } l_queue_foreach_remove(network->secrets, @@ -435,11 +438,21 @@ const struct network_info *network_get_info(const struct network *network) return network->info; } +static void add_known_frequency(void *data, void *user_data) +{ + struct scan_bss *bss = data; + struct network_info *info = user_data; + + known_network_add_frequency(info, bss->frequency); +} + void network_set_info(struct network *network, struct network_info *info) { if (info) { network->info = info; network->info->seen_count++; + + l_queue_foreach(network->bss_list, add_known_frequency, info); } else { network->info->seen_count--; network->info = NULL; @@ -1412,6 +1425,9 @@ static void known_networks_changed(enum known_networks_event event, switch (event) { case KNOWN_NETWORKS_EVENT_ADDED: station_foreach(match_known_network, (void *) info); + + /* Syncs frequencies of newly known network */ + known_network_frequency_sync(info); break; case KNOWN_NETWORKS_EVENT_REMOVED: station_foreach(disconnect_no_longer_known, (void *) info);