diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-02-26 14:09:24 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-02-26 14:09:24 +0100 |
commit | 3075824dbd4bb654e98614dfd9992ceec0428beb (patch) | |
tree | e2aecfc1ca3f83c2597f96c745cc86961c20e33c /proto/bgp | |
parent | 212ff335828fbe28311fcbae6154cf2495a44d0e (diff) | |
download | bird-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.c | 20 |
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); } |