Nest: Avoid unnecessary net_format() in 'show route' command
When output of 'show route' command was generated, the net_format() was called for each network prematurely, even if the result was not needed. Fix the code to call net_format() only when needed. This makes queries that process many networks but show only few (e.g. 'show route where ..', or 'show route count') much faster (like 5x - 10x faster).
This commit is contained in:
parent
9ac16df3d7
commit
61375bd0b3
1 changed files with 9 additions and 3 deletions
|
@ -111,10 +111,9 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
|
||||||
ASSUME(!d->export_mode || ec);
|
ASSUME(!d->export_mode || ec);
|
||||||
|
|
||||||
int first = 1;
|
int first = 1;
|
||||||
|
int first_show = 1;
|
||||||
int pass = 0;
|
int pass = 0;
|
||||||
|
|
||||||
bsnprintf(ia, sizeof(ia), "%N", n->n.addr);
|
|
||||||
|
|
||||||
for (e = n->routes; e; e = e->next)
|
for (e = n->routes; e; e = e->next)
|
||||||
{
|
{
|
||||||
if (rte_is_filtered(e) != d->filtered)
|
if (rte_is_filtered(e) != d->filtered)
|
||||||
|
@ -188,10 +187,17 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
|
||||||
goto skip;
|
goto skip;
|
||||||
|
|
||||||
if (d->stats < 2)
|
if (d->stats < 2)
|
||||||
|
{
|
||||||
|
if (first_show)
|
||||||
|
net_format(n->n.addr, ia, sizeof(ia));
|
||||||
|
else
|
||||||
|
ia[0] = 0;
|
||||||
|
|
||||||
rt_show_rte(c, ia, e, d, (e->net->routes == ee));
|
rt_show_rte(c, ia, e, d, (e->net->routes == ee));
|
||||||
|
first_show = 0;
|
||||||
|
}
|
||||||
|
|
||||||
d->show_counter++;
|
d->show_counter++;
|
||||||
ia[0] = 0;
|
|
||||||
|
|
||||||
skip:
|
skip:
|
||||||
if (e != ee)
|
if (e != ee)
|
||||||
|
|
Loading…
Reference in a new issue