--- nest/route.h | 1 + nest/rt-show.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/nest/route.h b/nest/route.h index eaaa5c3f..74cb55f4 100644 --- a/nest/route.h +++ b/nest/route.h @@ -344,6 +344,7 @@ struct rt_show_data { struct fib_iterator fit; /* Iterator over networks in table */ int verbose, tables_defined_by; const struct filter *filter; + const struct filter *filters[NET_MAX]; struct proto *show_protocol; struct proto *export_protocol; struct channel *export_channel; diff --git a/nest/rt-show.c b/nest/rt-show.c index 3431293a..f36bfe6f 100644 --- a/nest/rt-show.c +++ b/nest/rt-show.c @@ -107,6 +107,8 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d) int first = 1; int pass = 0; + const struct filter *f = d->filters[d->tab->table->addr_type]; + bsnprintf(ia, sizeof(ia), "%N", n->n.addr); for (e = n->routes; e; e = e->next) @@ -178,7 +180,7 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d) if (d->show_protocol && (d->show_protocol != e->attrs->src->proto)) goto skip; - if (f_run(d->filter, &e, c->show_pool, 0) > F_ACCEPT) + if (f_run(f, &e, c->show_pool, 0) > F_ACCEPT) goto skip; if (d->stats < 2) @@ -342,6 +344,7 @@ static inline void rt_show_prepare_tables(struct rt_show_data *d) { struct rt_show_data_rtable *tab, *tabx; + u32 net_type_mask = 0; /* Add implicit tables if no table is specified */ if (EMPTY_LIST(d->tables)) @@ -378,8 +381,12 @@ rt_show_prepare_tables(struct rt_show_data *d) rem_node(&(tab->n)); continue; } + + net_type_mask |= 1 << tab->table->addr_type; } + filters_adapt(&d->filters, d->filter, net_type_mask, d->running_on_config); + /* Ensure there is at least one table */ if (EMPTY_LIST(d->tables)) cf_error("No valid tables"); -- 2.24.0