summaryrefslogtreecommitdiff
path: root/proto/bgp/attrs.c
diff options
context:
space:
mode:
Diffstat (limited to 'proto/bgp/attrs.c')
-rw-r--r--proto/bgp/attrs.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c
index 039828f5..3e7c94a6 100644
--- a/proto/bgp/attrs.c
+++ b/proto/bgp/attrs.c
@@ -1023,6 +1023,15 @@ bgp_rte_better(rte *new, rte *old)
eattr *x, *y;
u32 n, o;
+ /* RFC 4271 9.1.2.1. Route resolvability test */
+ /* non-NULL iface means it is either RTD_ROUTER or RTD_DEVICE route */
+ n = new->attrs->iface != NULL;
+ o = old->attrs->iface != NULL;
+ if (n > o)
+ return 1;
+ if (n < o)
+ return 0;
+
/* Start with local preferences */
x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));
y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));