]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BIRD Client: `show route` iterates through all routing tables
authorPavel Tvrdik <pawel.tvrdik@gmail.com>
Wed, 11 May 2016 13:25:37 +0000 (15:25 +0200)
committerPavel Tvrdik <pawel.tvrdik@gmail.com>
Wed, 11 May 2016 13:25:37 +0000 (15:25 +0200)
nest/route.h
nest/rt-table.c

index 3947530945ab937020f68789974ac388611a66fa..c23dcc10584f4f59fd202b54e2daa4c5c3b9e589 100644 (file)
@@ -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;
index 9614d9ef28bfa29c2b469e35a34acf651462be3e..6bc0fa04b6c8ce35a94bb01a53648c6b70a44981 100644 (file)
@@ -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))