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);
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;
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;
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)