]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Comparing cluster list length should be later in bgp_rte_better().
authorOndrej Zajicek <santiago@crfreenet.org>
Fri, 26 Feb 2010 13:09:24 +0000 (14:09 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Fri, 26 Feb 2010 13:09:24 +0000 (14:09 +0100)
proto/bgp/attrs.c

index 6d0c0450a6b0cb687ea610e6c4ec2ae3ed4138c2..9bcd4f884c0130666adaa22bfa97f26112519c25 100644 (file)
@@ -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);
 }