From c845c4895f9ed6df4a2ecce67b61d93f5b5e79f9 Mon Sep 17 00:00:00 2001 From: Pavel Tvrdik Date: Wed, 11 May 2016 15:25:37 +0200 Subject: [PATCH] BIRD Client: `show route` iterates through all routing tables --- nest/route.h | 1 + nest/rt-table.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/nest/route.h b/nest/route.h index 39475309..c23dcc10 100644 --- a/nest/route.h +++ b/nest/route.h @@ -299,6 +299,7 @@ struct rtable_config *rt_new_table(struct symbol *s, uint addr_type); struct rt_show_data { net_addr *addr; rtable *table; + u8 all_tables; /* Iterate through all routing tables */ struct filter *filter; int verbose; struct fib_iterator fit; diff --git a/nest/rt-table.c b/nest/rt-table.c index 9614d9ef..6bc0fa04 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -2593,6 +2593,15 @@ rt_show_cont(struct cli *c) rt_show_net(c, n, d); } FIB_ITERATE_END; + + /* If we iterate through all routing tables then jump on next routing table */ + if (d->all_tables && NODE_VALID(NODE_NEXT(d->table))) + { + d->table = NODE_NEXT(d->table); + FIB_ITERATE_INIT(&d->fit, &d->table->fib); + return; + } + if (d->stats) cli_printf(c, 14, "%d of %d routes for %d networks", d->show_counter, d->rt_counter, d->net_counter); else @@ -2629,10 +2638,18 @@ rt_show(struct rt_show_data *d) { net *n; + if (EMPTY_LIST(routing_tables)) { + cli_msg(0, ""); + return; + } + /* Default is either a master table or a table related to a respective protocol */ if (!d->table && d->export_protocol) d->table = rt_show_get_table(d->export_protocol); if (!d->table && d->show_protocol) d->table = rt_show_get_table(d->show_protocol); - if (!d->table) d->table = config->def_tables[NET_IP4]->table; /* FIXME: iterate through all tables ? */ + if (!d->table) { + d->all_tables = 1; + d->table = HEAD(routing_tables); + } /* Filtered routes are neither exported nor have sensible ordering */ if (d->filtered && (d->export_mode || d->primary_only))