Commit b7c26c10 authored by Maria Matejka's avatar Maria Matejka Committed by Maria Matejka
Browse files

Route export: Packed all the export code before export table update to one function

parent d24a6ad4
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -707,8 +707,8 @@ rt_notify_merged(struct channel *c, struct rte_export_internal *e)
  return RTE_EXPORT_IS_OK(ep);
}

static void
rte_export(struct channel *c, struct rte_export_internal *e)
static struct rte_export *
rte_export_obtain(struct channel *c, struct rte_export_internal *e)
{
  uint ra_mode = c->ra_mode;
  _Bool accepted = 0;
@@ -741,12 +741,11 @@ rte_export(struct channel *c, struct rte_export_internal *e)
  if (!accepted)
  {
    DBG("Idempotent export.\n");
    goto cleanup;
    return NULL;
  }

  struct rte_export *ep = &(e->pub);

  struct proto *p = c->proto;
  struct proto_stats *stats = &c->stats;

  if (e->refeed && ep->new.attrs)
@@ -763,10 +762,21 @@ rte_export(struct channel *c, struct rte_export_internal *e)
    {
      stats->exp_updates_rejected++;
      rte_trace_out(D_FILTERS, c, &ep->new, "rejected [limit]");
      goto cleanup;
      return NULL;
    }
  }

  return ep;
}

static void
rte_export(struct channel *c, struct rte_export_internal *e)
{
  struct rte_export *ep = rte_export_obtain(c, e);

  if (!ep)
    goto cleanup;

  struct rte_storage *old_stored = NULL;
  /* Apply export table */
  if (c->out_table)
@@ -778,6 +788,9 @@ rte_export(struct channel *c, struct rte_export_internal *e)
    /* We aren't sure about the old route attributes */
    ep->old.attrs = NULL;

  struct proto_stats *stats = &c->stats;
  struct proto *p = c->proto;

  if (ep->new.attrs)
    stats->exp_updates_accepted++;
  else