0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2025-01-03 07:31:54 +00:00

RPKI has its own loop

This commit is contained in:
Maria Matejka 2021-11-17 21:34:54 +01:00
parent 20ace7f2e6
commit 3fd1f46184
5 changed files with 22 additions and 4 deletions

View File

@ -42,6 +42,7 @@ proto: rpki_proto ;
rpki_proto_start: proto_start RPKI { rpki_proto_start: proto_start RPKI {
this_proto = proto_config_new(&proto_rpki, $1); this_proto = proto_config_new(&proto_rpki, $1);
this_proto->loop_order = DOMAIN_ORDER(proto);
RPKI_CFG->retry_interval = RPKI_RETRY_INTERVAL; RPKI_CFG->retry_interval = RPKI_RETRY_INTERVAL;
RPKI_CFG->refresh_interval = RPKI_REFRESH_INTERVAL; RPKI_CFG->refresh_interval = RPKI_REFRESH_INTERVAL;
RPKI_CFG->expire_interval = RPKI_EXPIRE_INTERVAL; RPKI_CFG->expire_interval = RPKI_EXPIRE_INTERVAL;

View File

@ -109,6 +109,7 @@ static void rpki_schedule_next_expire_check(struct rpki_cache *cache);
static void rpki_stop_refresh_timer_event(struct rpki_cache *cache); static void rpki_stop_refresh_timer_event(struct rpki_cache *cache);
static void rpki_stop_retry_timer_event(struct rpki_cache *cache); static void rpki_stop_retry_timer_event(struct rpki_cache *cache);
static void rpki_stop_expire_timer_event(struct rpki_cache *cache); static void rpki_stop_expire_timer_event(struct rpki_cache *cache);
static void rpki_stop_all_timers(struct rpki_cache *cache);
/* /*
@ -219,6 +220,8 @@ rpki_force_restart_proto(struct rpki_proto *p)
{ {
if (p->cache) if (p->cache)
{ {
rpki_tr_close(p->cache->tr_sock);
rpki_stop_all_timers(p->cache);
CACHE_DBG(p->cache, "Connection object destroying"); CACHE_DBG(p->cache, "Connection object destroying");
} }
@ -342,7 +345,7 @@ rpki_schedule_next_refresh(struct rpki_cache *cache)
btime t = cache->refresh_interval S; btime t = cache->refresh_interval S;
CACHE_DBG(cache, "after %t s", t); CACHE_DBG(cache, "after %t s", t);
tm_start(cache->refresh_timer, t); tm_start_in(cache->refresh_timer, t, cache->p->p.loop);
} }
static void static void
@ -351,7 +354,7 @@ rpki_schedule_next_retry(struct rpki_cache *cache)
btime t = cache->retry_interval S; btime t = cache->retry_interval S;
CACHE_DBG(cache, "after %t s", t); CACHE_DBG(cache, "after %t s", t);
tm_start(cache->retry_timer, t); tm_start_in(cache->retry_timer, t, cache->p->p.loop);
} }
static void static void
@ -362,7 +365,7 @@ rpki_schedule_next_expire_check(struct rpki_cache *cache)
t = MAX(t, 1 S); t = MAX(t, 1 S);
CACHE_DBG(cache, "after %t s", t); CACHE_DBG(cache, "after %t s", t);
tm_start(cache->expire_timer, t); tm_start_in(cache->expire_timer, t, cache->p->p.loop);
} }
static void static void
@ -379,13 +382,21 @@ rpki_stop_retry_timer_event(struct rpki_cache *cache)
tm_stop(cache->retry_timer); tm_stop(cache->retry_timer);
} }
static void UNUSED static void
rpki_stop_expire_timer_event(struct rpki_cache *cache) rpki_stop_expire_timer_event(struct rpki_cache *cache)
{ {
CACHE_DBG(cache, "Stop"); CACHE_DBG(cache, "Stop");
tm_stop(cache->expire_timer); tm_stop(cache->expire_timer);
} }
static void
rpki_stop_all_timers(struct rpki_cache *cache)
{
rpki_stop_refresh_timer_event(cache);
rpki_stop_retry_timer_event(cache);
rpki_stop_expire_timer_event(cache);
}
static int static int
rpki_do_we_recv_prefix_pdu_in_last_seconds(struct rpki_cache *cache) rpki_do_we_recv_prefix_pdu_in_last_seconds(struct rpki_cache *cache)
{ {

View File

@ -38,6 +38,8 @@ rpki_tr_ssh_open(struct rpki_tr_sock *tr)
if (sk_open(sk) != 0) if (sk_open(sk) != 0)
return RPKI_TR_ERROR; return RPKI_TR_ERROR;
sk_start(sk);
return RPKI_TR_SUCCESS; return RPKI_TR_SUCCESS;
} }

View File

@ -31,6 +31,8 @@ rpki_tr_tcp_open(struct rpki_tr_sock *tr)
if (sk_open(sk) != 0) if (sk_open(sk) != 0)
return RPKI_TR_ERROR; return RPKI_TR_ERROR;
sk_start(sk);
return RPKI_TR_SUCCESS; return RPKI_TR_SUCCESS;
} }

View File

@ -85,6 +85,7 @@ rpki_tr_open(struct rpki_tr_sock *tr)
sk->rbsize = RPKI_RX_BUFFER_SIZE; sk->rbsize = RPKI_RX_BUFFER_SIZE;
sk->tbsize = RPKI_TX_BUFFER_SIZE; sk->tbsize = RPKI_TX_BUFFER_SIZE;
sk->tos = IP_PREC_INTERNET_CONTROL; sk->tos = IP_PREC_INTERNET_CONTROL;
sk->flags |= SKF_THREAD;
if (ipa_zero(sk->daddr) && sk->host) if (ipa_zero(sk->daddr) && sk->host)
{ {
@ -119,6 +120,7 @@ rpki_tr_close(struct rpki_tr_sock *tr)
if (tr->sk) if (tr->sk)
{ {
sk_stop(tr->sk);
rfree(tr->sk); rfree(tr->sk);
tr->sk = NULL; tr->sk = NULL;
} }