summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nest/proto.c4
-rw-r--r--nest/protocol.h1
-rw-r--r--nest/rt-table.c12
3 files changed, 13 insertions, 4 deletions
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)