From: Ondrej Zajicek (work) Date: Thu, 2 Dec 2021 03:05:17 +0000 (+0100) Subject: Nest: Avoid unnecessary net_format() in 'show route' command X-Git-Tag: v2.0.9~7^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61375bd0b3803fada0d7bb5b81b5824bab16b7c1;p=thirdparty%2Fbird.git 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). --- diff --git a/nest/rt-show.c b/nest/rt-show.c index d8abab5f1..ea1f918c4 100644 --- a/nest/rt-show.c +++ b/nest/rt-show.c @@ -111,10 +111,9 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d) ASSUME(!d->export_mode || ec); int first = 1; + int first_show = 1; int pass = 0; - bsnprintf(ia, sizeof(ia), "%N", n->n.addr); - for (e = n->routes; e; e = e->next) { 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; 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)); + first_show = 0; + } d->show_counter++; - ia[0] = 0; skip: if (e != ee)