summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nest/rt-table.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index dcde0af..4c406cf 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -95,7 +95,14 @@ rte_better(rte *new, rte *old)
if (new->pref < old->pref)
return 0;
if (new->attrs->proto->proto != old->attrs->proto->proto)
- bug("Different protocols, but identical preferences => oops"); /* FIXME */
+ {
+ /*
+ * If the user has configured protocol preferences, so that two different protocols
+ * have the same preference, try to break the tie by comparing addresses. Not too
+ * useful, but keeps the ordering of routes unambiguous.
+ */
+ return new->attrs->proto->proto > old->attrs->proto->proto;
+ }
if (better = new->attrs->proto->rte_better)
return better(new, old);
return 0;