]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Implemented `show route <...> stats'.
authorMartin Mares <mj@ucw.cz>
Sun, 7 May 2000 11:28:59 +0000 (11:28 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 7 May 2000 11:28:59 +0000 (11:28 +0000)
TODO
doc/reply_codes
nest/config.Y
nest/route.h
nest/rt-table.c

diff --git a/TODO b/TODO
index c8162b4de175854eeb7cac42101760dbf8cffe54..5a9e4c7eef65d271c9b483f83a0b060741a2853b 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,11 +9,12 @@ Core
 
 - Makefile: install target?
 
-- forgetting device routes???
-- filter-defined internal attributes
 - netlink: realms
 
 - filters: deletion of mandatory attributes?
+- filters: user defined attributes?
+
+- cli: show tables?
 
 Documentation
 ~~~~~~~~~~~~~
index def809e9274e19dc0c5d0fe7d6f6e954141a1b6c..1a547913f40ae59e972db45d225959302161572a 100644 (file)
@@ -22,6 +22,7 @@ Reply codes of BIRD command-line interface
 0011   Enabled
 0012   Restarted
 0013   Status report
+0014   Route count
 
 1000   BIRD version
 1001   Interface list
index 5ac9c213f536ec492caeddd5d14fdf63a9e4f937..65142f76b46360d2dd9d5b3b843899e72e464c6f 100644 (file)
@@ -22,7 +22,7 @@ CF_DECLS
 CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT)
 CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, TABLE, STATES, ROUTES, FILTERS)
 CF_KEYWORDS(PASSWORD, FROM, PASSIVE, TO, ID, EVENTS, PACKETS, PROTOCOLS, INTERFACES)
-CF_KEYWORDS(PRIMARY)
+CF_KEYWORDS(PRIMARY, STATS)
 
 CF_ENUM(T_ENUM_RTS, RTS_, DUMMY, STATIC, INHERIT, DEVICE, STATIC_DEVICE, REDIRECT,
        RIP, OSPF, OSPF_EXT, OSPF_IA, OSPF_BOUNDARY, BGP, PIPE)
@@ -240,7 +240,7 @@ CF_CLI(SHOW INTERFACES,,, [[Show network interfaces]])
 CF_CLI(SHOW INTERFACES SUMMARY,,, [[Show summary of network interfaces]])
 { if_show_summary(); } ;
 
-CF_CLI(SHOW ROUTE, r_args, [<prefix>] [table <t>] [filter <f>] [all] [primary] [(import|protocol) <p>], [[Show routing table]])
+CF_CLI(SHOW ROUTE, r_args, [<prefix>] [table <t>] [filter <f>] [all] [primary] [(import|protocol) <p>] [stats], [[Show routing table]])
 { rt_show($3); } ;
 
 r_args:
@@ -290,6 +290,10 @@ r_args:
      $$->import_protocol = c->proto;
      $$->running_on_config = c->proto->cf->global;
    }
+ | r_args STATS {
+     $$ = $1;
+     $$->stats = 1;
+   }
  ;
 
 import_or_proto:
index 1e6fd64b467878e38db80d24d8c7c9cf6721d465..c36cde6d430c21bf641ac5e44a002b8843117761 100644 (file)
@@ -209,6 +209,8 @@ struct rt_show_data {
   struct proto *import_protocol;
   int import_mode, primary_only;
   struct config *running_on_config;
+  int net_counter, rt_counter, show_counter;
+  int stats;
 };
 void rt_show(struct rt_show_data *);
 
index 1261aae1b21fe2d3af1c50c8bf982e1b5f62b2f9..38253038366e35d3e7309cfee61a5313a26ec95e 100644 (file)
@@ -720,11 +720,13 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
   int ok;
 
   bsprintf(ia, "%I/%d", n->n.prefix, n->n.pxlen);
+  d->net_counter++;
   for(e=n->routes; e; e=e->next)
     {
       struct ea_list *tmpa, *old_tmpa;
       struct proto *p0 = e->attrs->proto;
       struct proto *p1 = d->import_protocol;
+      d->rt_counter++;
       ee = e;
       rte_update_lock();               /* We use the update buffer for filtering */
       old_tmpa = tmpa = p0->make_tmp_attrs ? p0->make_tmp_attrs(e, rte_update_pool) : NULL;
@@ -743,6 +745,7 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
        }
       if (ok)
        {
+         d->show_counter++;
          rt_show_rte(c, ia, e, d, tmpa);
          ia[0] = 0;
        }
@@ -789,7 +792,10 @@ rt_show_cont(struct cli *c)
       rt_show_net(c, n, d);
     }
   FIB_ITERATE_END(f);
-  cli_printf(c, 0, "");
+  if (d->stats)
+    cli_printf(c, 14, "%d of %d routes for %d networks", d->show_counter, d->rt_counter, d->net_counter);
+  else
+    cli_printf(c, 0, "");
 done:
   c->cont = c->cleanup = NULL;
 }