diff --git a/nest/proto.c b/nest/proto.c index fadce6c7..ab92d90f 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -1696,8 +1696,8 @@ channel_show_stats(struct channel *c) cli_msg(-1006, " Routes: %u imported, %u filtered, %u exported", s->imp_routes, s->filt_routes, s->exp_routes); else - cli_msg(-1006, " Routes: %u imported, %u exported", - s->imp_routes, s->exp_routes); + cli_msg(-1006, " Routes: %u imported, %u exported, %u preferred", + s->imp_routes, s->exp_routes, s->pref_routes); cli_msg(-1006, " Route change stats: received rejected filtered ignored accepted"); cli_msg(-1006, " Import updates: %10u %10u %10u %10u %10u", diff --git a/nest/protocol.h b/nest/protocol.h index 7f539aef..6c04071b 100644 --- a/nest/protocol.h +++ b/nest/protocol.h @@ -134,6 +134,7 @@ struct proto_stats { /* Import - from protocol to core */ u32 imp_routes; /* Number of routes successfully imported to the (adjacent) routing table */ u32 filt_routes; /* Number of routes rejected in import filter but kept in the routing table */ + u32 pref_routes; /* Number of routes selected as best in the (adjacent) routing table */ u32 imp_updates_received; /* Number of route updates received */ u32 imp_updates_invalid; /* Number of route updates rejected as invalid */ u32 imp_updates_filtered; /* Number of route updates rejected by filters */ diff --git a/nest/rt-table.c b/nest/rt-table.c index 9952d91a..0224d434 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -901,8 +901,16 @@ rte_announce(rtable *tab, unsigned type, net *net, rte *new, rte *old, if (!old && !new) return; - if ((type == RA_OPTIMAL) && tab->hostcache) - rt_notify_hostcache(tab, net); + if (type == RA_OPTIMAL) + { + if (new) + new->sender->stats.pref_routes++; + if (old) + old->sender->stats.pref_routes--; + + if (tab->hostcache) + rt_notify_hostcache(tab, net); + } struct channel *c; node *n; WALK_LIST2(c, n, tab->channels, table_node)