summaryrefslogtreecommitdiffstats
path: root/src/fastd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fastd.c')
-rw-r--r--src/fastd.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/fastd.c b/src/fastd.c
index 59a99ab..3c3d130 100644
--- a/src/fastd.c
+++ b/src/fastd.c
@@ -615,23 +615,31 @@ static void delete_peer_groups(fastd_context_t *ctx) {
static void init_peers(fastd_context_t *ctx) {
fastd_peer_config_t *peer_conf;
- for (peer_conf = ctx->conf->peers; peer_conf; peer_conf = peer_conf->next) {
- bool was_enabled = peer_conf->enabled;
-
- peer_conf->enabled = true;
+ for (peer_conf = ctx->conf->peers; peer_conf; peer_conf = peer_conf->next)
ctx->conf->protocol->peer_configure(ctx, peer_conf);
- if (peer_conf->enabled && !was_enabled)
+ for (peer_conf = ctx->conf->peers; peer_conf; peer_conf = peer_conf->next) {
+ bool enable = ctx->conf->protocol->peer_check(ctx, peer_conf);
+
+ if (enable && !peer_conf->enabled)
fastd_peer_add(ctx, peer_conf);
+
+ peer_conf->enabled = enable;
}
fastd_peer_t *peer, *next;
for (peer = ctx->peers; peer; peer = next) {
next = peer->next;
- if (!peer->config->enabled) {
- pr_info(ctx, "previously enabled peer %P disabled, deleting.", peer);
- fastd_peer_delete(ctx, peer);
+ if (peer->config) {
+ if (!peer->config->enabled) {
+ pr_info(ctx, "previously enabled peer %P disabled, deleting.", peer);
+ fastd_peer_delete(ctx, peer);
+ }
+ }
+ else {
+ if (!ctx->conf->protocol->peer_check_temporary(ctx, peer))
+ fastd_peer_delete(ctx, peer);
}
}
}