summaryrefslogtreecommitdiffstats
path: root/proto/bgp
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2010-02-26 14:09:24 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2010-02-26 14:09:24 +0100
commit3075824dbd4bb654e98614dfd9992ceec0428beb (patch)
treee2aecfc1ca3f83c2597f96c745cc86961c20e33c /proto/bgp
parent212ff335828fbe28311fcbae6154cf2495a44d0e (diff)
downloadbird-3075824dbd4bb654e98614dfd9992ceec0428beb.tar
bird-3075824dbd4bb654e98614dfd9992ceec0428beb.zip
Comparing cluster list length should be later in bgp_rte_better().
Diffstat (limited to 'proto/bgp')
-rw-r--r--proto/bgp/attrs.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c
index 6d0c045..9bcd4f8 100644
--- a/proto/bgp/attrs.c
+++ b/proto/bgp/attrs.c
@@ -1070,16 +1070,6 @@ bgp_rte_better(rte *new, rte *old)
/* Skipping RFC 4271 9.1.2.2. e) */
/* We don't have interior distances */
- /* RFC 4456 9. b) Compare cluster list lengths */
- x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
- y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
- n = x ? int_set_get_size(x->u.ptr) : 0;
- o = y ? int_set_get_size(y->u.ptr) : 0;
- if (n < o)
- return 1;
- if (n > o)
- return 0;
-
/* RFC 4271 9.1.2.2. f) Compare BGP identifiers */
/* RFC 4456 9. a) Use ORIGINATOR_ID instead of local neighor ID */
x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID));
@@ -1099,6 +1089,16 @@ bgp_rte_better(rte *new, rte *old)
if (n > o)
return 0;
+ /* RFC 4456 9. b) Compare cluster list lengths */
+ x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
+ y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
+ n = x ? int_set_get_size(x->u.ptr) : 0;
+ o = y ? int_set_get_size(y->u.ptr) : 0;
+ if (n < o)
+ return 1;
+ if (n > o)
+ return 0;
+
/* RFC 4271 9.1.2.2. g) Compare peer IP adresses */
return (ipa_compare(new_bgp->cf->remote_ip, old_bgp->cf->remote_ip) < 0);
}