Commit 20ace7f2 authored by Maria Matejka's avatar Maria Matejka Committed by Maria Matejka
Browse files

RPKI: Use the route refresh mechanism also for the first load

parent 1e8e3b7c
Loading
Loading
Loading
Loading
+2 −23
Original line number Diff line number Diff line
@@ -658,21 +658,7 @@ rpki_handle_cache_response_pdu(struct rpki_cache *cache, const struct pdu_cache_
{
  if (cache->request_session_id)
  {
    if (cache->last_update)
    {
      /*
       * 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;
    }
    rpki_start_refresh(cache->p);
    cache->session_id = pdu->session_id;
    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);
  }

  if (cache->p->refresh_channels)
  {
    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);
  }
  rpki_stop_refresh(cache->p);

  cache->last_update = current_time();
  cache->serial_num = pdu->serial_num;
+25 −0
Original line number Diff line number Diff line
@@ -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);
}

+2 −0
Original line number Diff line number Diff line
@@ -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_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