mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Route export: Packed all the export code before export table update to one function
This commit is contained in:
parent
d24a6ad4c7
commit
b7c26c1030
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user