summaryrefslogtreecommitdiff
path: root/proto/rpki/rpki.c
diff options
context:
space:
mode:
authorMaria Matejka <mq@jmq.cz>2021-11-16 21:14:24 +0000
committerMaria Matejka <mq@ucw.cz>2021-11-22 19:05:44 +0100
commit20ace7f2e61bc6881e4ea22c63f0d0eb9a1dd1a2 (patch)
treed9896d70a90e9a5ffdf18165935ea207be2ba8d1 /proto/rpki/rpki.c
parent1e8e3b7c1214393844c35fe3fbba9865b56ec95f (diff)
RPKI: Use the route refresh mechanism also for the first load
Diffstat (limited to 'proto/rpki/rpki.c')
-rw-r--r--proto/rpki/rpki.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/proto/rpki/rpki.c b/proto/rpki/rpki.c
index 95066499..e3fccb48 100644
--- a/proto/rpki/rpki.c
+++ b/proto/rpki/rpki.c
@@ -139,6 +139,30 @@ rpki_table_remove_roa(struct rpki_cache *cache, struct channel *channel, const n
rte_update(channel, &pfxr->n, NULL, p->p.main_source);
}
+void
+rpki_start_refresh(struct rpki_proto *p)
+{
+ if (p->roa4_channel)
+ rt_refresh_begin(&p->roa4_channel->in_req);
+ if (p->roa6_channel)
+ rt_refresh_begin(&p->roa6_channel->in_req);
+
+ p->refresh_channels = 1;
+}
+
+void
+rpki_stop_refresh(struct rpki_proto *p)
+{
+ if (!p->refresh_channels)
+ return;
+
+ p->refresh_channels = 0;
+
+ if (p->roa4_channel)
+ rt_refresh_end(&p->roa4_channel->in_req);
+ if (p->roa6_channel)
+ rt_refresh_end(&p->roa6_channel->in_req);
+}
/*
* RPKI Protocol Logic
@@ -626,6 +650,7 @@ rpki_close_connection(struct rpki_cache *cache)
{
CACHE_TRACE(D_EVENTS, cache, "Closing a connection");
rpki_tr_close(cache->tr_sock);
+ rpki_stop_refresh(cache->p);
proto_notify_state(&cache->p->p, PS_START);
}