diff options
-rw-r--r-- | proto/bgp/attrs.c | 9 |
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)); |