Commit 3e389e67 authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work)
Browse files

Nest: Show mergable routes in 'show route' output

Routes mergable with the best route are marked by '+'.
parent b08ca3d9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -533,6 +533,7 @@ r_args:
     $$ = cfg_allocz(sizeof(struct rt_show_data));
     init_list(&($$->tables));
     $$->filter = FILTER_ACCEPT;
     $$->show_mergable = 1;
   }
 | r_args net_any {
     $$ = $1;
+2 −1
Original line number Diff line number Diff line
@@ -320,6 +320,7 @@ void rte_free(rte *);
rte *rte_do_cow(rte *);
static inline rte * rte_cow(rte *r) { return (r->flags & REF_COW) ? rte_do_cow(r) : r; }
rte *rte_cow_rta(rte *r, linpool *lp);
int rte_mergable(rte *pri, rte *sec);
void rt_dump(rtable *);
void rt_dump_all(void);
int rt_feed_channel(struct channel *c);
@@ -353,7 +354,7 @@ struct rt_show_data {
  struct proto *export_protocol;
  struct channel *export_channel;
  struct config *running_on_config;
  int export_mode, primary_only, filtered, stats, show_for;
  int export_mode, primary_only, filtered, stats, show_for, show_mergable;

  int table_open;			/* Iteration (fit) is open */
  int net_counter, rt_counter, show_counter, table_counter;
+5 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ rt_show_rte(struct cli *c, byte *ia, rte *e, struct rt_show_data *d, ea_list *tm
  byte tm[TM_DATETIME_BUFFER_SIZE], info[256];
  rta *a = e->attrs;
  int primary = (e->net->routes == e) && rte_is_valid(e);
  int mergable = d->show_mergable && !primary && rte_mergable(e->net->routes, e);
  int sync_error = (e->net->n.flags & KRF_SYNC_ERROR);
  void (*get_route_info)(struct rte *, byte *buf, struct ea_list *attrs);
  struct nexthop *nh;
@@ -63,8 +64,10 @@ rt_show_rte(struct cli *c, byte *ia, rte *e, struct rt_show_data *d, ea_list *tm
  if (d->last_table != d->tab)
    rt_show_table(c, d);

  cli_printf(c, -1007, "%-20s %s [%s %s%s]%s%s", ia, rta_dest_name(a->dest),
	     a->src->proto->name, tm, from, primary ? (sync_error ? " !" : " *") : "", info);
  cli_printf(c, -1007, "%-20s %s [%s %s%s]%s%s",
	     ia, rta_dest_name(a->dest), a->src->proto->name, tm, from,
	     primary ? (sync_error ? " !" : " *") : (mergable ? " +" : ""),
	     info);

  if (a->dest == RTD_UNICAST)
    for (nh = &(a->nh); nh; nh = nh->next)
+1 −1
Original line number Diff line number Diff line
@@ -453,7 +453,7 @@ rte_better(rte *new, rte *old)
  return 0;
}

static int
int
rte_mergable(rte *pri, rte *sec)
{
  int (*mergable)(rte *, rte *);