Commit 40b65f94 authored by Ondřej Zajíček's avatar Ondřej Zajíček

Fixes bug in pipe route filtering.

Routes comming through pipe from primary to secondary table were
filtered by both EXPORT and IMPORT filters, but they should be
only filtered by EXPORT filters.
parent 4d7d0cb1
......@@ -483,22 +483,30 @@ rte_update(rtable *table, net *net, struct proto *p, rte *new)
rte_update_lock();
if (new)
{
struct filter *filter = p->in_filter;
/* Do not filter routes going to the secondary side of the pipe,
that should only go through export filter.
FIXME Make a better check whether p is really a pipe. */
if (p->table != table)
filter = FILTER_ACCEPT;
if (!rte_validate(new))
{
rte_trace_in(D_FILTERS, p, new, "invalid");
goto drop;
}
if (p->in_filter == FILTER_REJECT)
if (filter == FILTER_REJECT)
{
rte_trace_in(D_FILTERS, p, new, "filtered out");
goto drop;
}
if (p->make_tmp_attrs)
tmpa = p->make_tmp_attrs(new, rte_update_pool);
if (p->in_filter)
if (filter)
{
ea_list *old_tmpa = tmpa;
int fr = f_run(p->in_filter, &new, &tmpa, rte_update_pool, 0);
int fr = f_run(filter, &new, &tmpa, rte_update_pool, 0);
if (fr > F_ACCEPT)
{
rte_trace_in(D_FILTERS, p, new, "filtered out");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment