mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
RPKI: Use the route refresh mechanism also for the first load
This commit is contained in:
parent
1e8e3b7c12
commit
20ace7f2e6
@ -658,21 +658,7 @@ rpki_handle_cache_response_pdu(struct rpki_cache *cache, const struct pdu_cache_
|
|||||||
{
|
{
|
||||||
if (cache->request_session_id)
|
if (cache->request_session_id)
|
||||||
{
|
{
|
||||||
if (cache->last_update)
|
rpki_start_refresh(cache->p);
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This isn't the first sync and we already received records. This point
|
|
||||||
* is after Reset Query and before importing new records from cache
|
|
||||||
* server. We need to load new ones and kick out missing ones. So start
|
|
||||||
* a refresh cycle.
|
|
||||||
*/
|
|
||||||
if (cache->p->roa4_channel)
|
|
||||||
rt_refresh_begin(&cache->p->roa4_channel->in_req);
|
|
||||||
if (cache->p->roa6_channel)
|
|
||||||
rt_refresh_begin(&cache->p->roa6_channel->in_req);
|
|
||||||
|
|
||||||
cache->p->refresh_channels = 1;
|
|
||||||
}
|
|
||||||
cache->session_id = pdu->session_id;
|
cache->session_id = pdu->session_id;
|
||||||
cache->request_session_id = 0;
|
cache->request_session_id = 0;
|
||||||
}
|
}
|
||||||
@ -821,14 +807,7 @@ rpki_handle_end_of_data_pdu(struct rpki_cache *cache, const struct pdu_end_of_da
|
|||||||
(cf->keep_expire_interval ? "keeps " : ""), cache->expire_interval);
|
(cf->keep_expire_interval ? "keeps " : ""), cache->expire_interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cache->p->refresh_channels)
|
rpki_stop_refresh(cache->p);
|
||||||
{
|
|
||||||
cache->p->refresh_channels = 0;
|
|
||||||
if (cache->p->roa4_channel)
|
|
||||||
rt_refresh_end(&cache->p->roa4_channel->in_req);
|
|
||||||
if (cache->p->roa6_channel)
|
|
||||||
rt_refresh_end(&cache->p->roa6_channel->in_req);
|
|
||||||
}
|
|
||||||
|
|
||||||
cache->last_update = current_time();
|
cache->last_update = current_time();
|
||||||
cache->serial_num = pdu->serial_num;
|
cache->serial_num = pdu->serial_num;
|
||||||
|
@ -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);
|
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
|
* RPKI Protocol Logic
|
||||||
@ -626,6 +650,7 @@ rpki_close_connection(struct rpki_cache *cache)
|
|||||||
{
|
{
|
||||||
CACHE_TRACE(D_EVENTS, cache, "Closing a connection");
|
CACHE_TRACE(D_EVENTS, cache, "Closing a connection");
|
||||||
rpki_tr_close(cache->tr_sock);
|
rpki_tr_close(cache->tr_sock);
|
||||||
|
rpki_stop_refresh(cache->p);
|
||||||
proto_notify_state(&cache->p->p, PS_START);
|
proto_notify_state(&cache->p->p, PS_START);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +83,8 @@ const char *rpki_cache_state_to_str(enum rpki_cache_state state);
|
|||||||
void rpki_table_add_roa(struct rpki_cache *cache, struct channel *channel, const net_addr_union *pfxr);
|
void rpki_table_add_roa(struct rpki_cache *cache, struct channel *channel, const net_addr_union *pfxr);
|
||||||
void rpki_table_remove_roa(struct rpki_cache *cache, struct channel *channel, const net_addr_union *pfxr);
|
void rpki_table_remove_roa(struct rpki_cache *cache, struct channel *channel, const net_addr_union *pfxr);
|
||||||
|
|
||||||
|
void rpki_start_refresh(struct rpki_proto *p);
|
||||||
|
void rpki_stop_refresh(struct rpki_proto *p);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RPKI Protocol Logic
|
* RPKI Protocol Logic
|
||||||
|
Loading…
Reference in New Issue
Block a user