Implemented `show route <...> stats'.
This commit is contained in:
parent
6998bb9ee3
commit
23693958aa
5 changed files with 19 additions and 5 deletions
5
TODO
5
TODO
|
@ -9,11 +9,12 @@ Core
|
||||||
|
|
||||||
- Makefile: install target?
|
- Makefile: install target?
|
||||||
|
|
||||||
- forgetting device routes???
|
|
||||||
- filter-defined internal attributes
|
|
||||||
- netlink: realms
|
- netlink: realms
|
||||||
|
|
||||||
- filters: deletion of mandatory attributes?
|
- filters: deletion of mandatory attributes?
|
||||||
|
- filters: user defined attributes?
|
||||||
|
|
||||||
|
- cli: show tables?
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
|
@ -22,6 +22,7 @@ Reply codes of BIRD command-line interface
|
||||||
0011 Enabled
|
0011 Enabled
|
||||||
0012 Restarted
|
0012 Restarted
|
||||||
0013 Status report
|
0013 Status report
|
||||||
|
0014 Route count
|
||||||
|
|
||||||
1000 BIRD version
|
1000 BIRD version
|
||||||
1001 Interface list
|
1001 Interface list
|
||||||
|
|
|
@ -22,7 +22,7 @@ CF_DECLS
|
||||||
CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT)
|
CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT)
|
||||||
CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, TABLE, STATES, ROUTES, FILTERS)
|
CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, TABLE, STATES, ROUTES, FILTERS)
|
||||||
CF_KEYWORDS(PASSWORD, FROM, PASSIVE, TO, ID, EVENTS, PACKETS, PROTOCOLS, INTERFACES)
|
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,
|
CF_ENUM(T_ENUM_RTS, RTS_, DUMMY, STATIC, INHERIT, DEVICE, STATIC_DEVICE, REDIRECT,
|
||||||
RIP, OSPF, OSPF_EXT, OSPF_IA, OSPF_BOUNDARY, BGP, PIPE)
|
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]])
|
CF_CLI(SHOW INTERFACES SUMMARY,,, [[Show summary of network interfaces]])
|
||||||
{ if_show_summary(); } ;
|
{ 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); } ;
|
{ rt_show($3); } ;
|
||||||
|
|
||||||
r_args:
|
r_args:
|
||||||
|
@ -290,6 +290,10 @@ r_args:
|
||||||
$$->import_protocol = c->proto;
|
$$->import_protocol = c->proto;
|
||||||
$$->running_on_config = c->proto->cf->global;
|
$$->running_on_config = c->proto->cf->global;
|
||||||
}
|
}
|
||||||
|
| r_args STATS {
|
||||||
|
$$ = $1;
|
||||||
|
$$->stats = 1;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
import_or_proto:
|
import_or_proto:
|
||||||
|
|
|
@ -209,6 +209,8 @@ struct rt_show_data {
|
||||||
struct proto *import_protocol;
|
struct proto *import_protocol;
|
||||||
int import_mode, primary_only;
|
int import_mode, primary_only;
|
||||||
struct config *running_on_config;
|
struct config *running_on_config;
|
||||||
|
int net_counter, rt_counter, show_counter;
|
||||||
|
int stats;
|
||||||
};
|
};
|
||||||
void rt_show(struct rt_show_data *);
|
void rt_show(struct rt_show_data *);
|
||||||
|
|
||||||
|
|
|
@ -720,11 +720,13 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
|
||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
bsprintf(ia, "%I/%d", n->n.prefix, n->n.pxlen);
|
bsprintf(ia, "%I/%d", n->n.prefix, n->n.pxlen);
|
||||||
|
d->net_counter++;
|
||||||
for(e=n->routes; e; e=e->next)
|
for(e=n->routes; e; e=e->next)
|
||||||
{
|
{
|
||||||
struct ea_list *tmpa, *old_tmpa;
|
struct ea_list *tmpa, *old_tmpa;
|
||||||
struct proto *p0 = e->attrs->proto;
|
struct proto *p0 = e->attrs->proto;
|
||||||
struct proto *p1 = d->import_protocol;
|
struct proto *p1 = d->import_protocol;
|
||||||
|
d->rt_counter++;
|
||||||
ee = e;
|
ee = e;
|
||||||
rte_update_lock(); /* We use the update buffer for filtering */
|
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;
|
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)
|
if (ok)
|
||||||
{
|
{
|
||||||
|
d->show_counter++;
|
||||||
rt_show_rte(c, ia, e, d, tmpa);
|
rt_show_rte(c, ia, e, d, tmpa);
|
||||||
ia[0] = 0;
|
ia[0] = 0;
|
||||||
}
|
}
|
||||||
|
@ -789,6 +792,9 @@ rt_show_cont(struct cli *c)
|
||||||
rt_show_net(c, n, d);
|
rt_show_net(c, n, d);
|
||||||
}
|
}
|
||||||
FIB_ITERATE_END(f);
|
FIB_ITERATE_END(f);
|
||||||
|
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, "");
|
cli_printf(c, 0, "");
|
||||||
done:
|
done:
|
||||||
c->cont = c->cleanup = NULL;
|
c->cont = c->cleanup = NULL;
|
||||||
|
|
Loading…
Reference in a new issue