]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes sorting in OSPF show state.
authorOndrej Zajicek <santiago@crfreenet.org>
Mon, 29 Oct 2012 19:39:03 +0000 (20:39 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Mon, 29 Oct 2012 19:39:03 +0000 (20:39 +0100)
proto/ospf/ospf.c

index aa62da145ebe6d559c795a9e0d0c685e11eb0570..5792453d92a7fd077036f878638bf5a108cd90ad 100644 (file)
@@ -953,8 +953,10 @@ lsa_compare_for_state(const void *p1, const void *p2)
   struct ospf_lsa_header *lsa1 = &(he1->lsa);
   struct ospf_lsa_header *lsa2 = &(he2->lsa);
 
-  if (he1->domain != he2->domain)
-    return he1->domain - he2->domain;
+  if (he1->domain < he2->domain)
+    return -1;
+  if (he1->domain > he2->domain)
+    return 1;
 
 #ifdef OSPFv3
   struct ospf_lsa_header lsatmp1, lsatmp2;
@@ -979,14 +981,18 @@ lsa_compare_for_state(const void *p1, const void *p2)
   {
 #ifdef OSPFv3
     /* In OSPFv3, neworks are named base on ID of DR */
-    if (lsa1->rt != lsa2->rt)
-      return lsa1->rt - lsa2->rt;
+    if (lsa1->rt < lsa2->rt)
+      return -1;
+    if (lsa1->rt > lsa2->rt)
+      return 1;
 #endif
 
     /* For OSPFv2, this is IP of the network,
        for OSPFv3, this is interface ID */
-    if (lsa1->id != lsa2->id)
-      return lsa1->id - lsa2->id;
+    if (lsa1->id < lsa2->id)
+      return -1;
+    if (lsa1->id > lsa2->id)
+      return 1;
 
 #ifdef OSPFv3
     if (px1 != px2)
@@ -997,14 +1003,20 @@ lsa_compare_for_state(const void *p1, const void *p2)
   }
   else 
   {
-    if (lsa1->rt != lsa2->rt)
-      return lsa1->rt - lsa2->rt;
+    if (lsa1->rt < lsa2->rt)
+      return -1;
+    if (lsa1->rt > lsa2->rt)
+      return 1;
 
-    if (lsa1->type != lsa2->type)
-      return lsa1->type - lsa2->type;
-  
-    if (lsa1->id != lsa2->id)
-      return lsa1->id - lsa2->id;
+    if (lsa1->type < lsa2->type)
+      return -1;
+    if (lsa1->type > lsa2->type)
+      return 1;
+
+    if (lsa1->id < lsa2->id)
+      return -1;
+    if (lsa1->id > lsa2->id)
+      return 1;
 
 #ifdef OSPFv3
     if (px1 != px2)
@@ -1023,12 +1035,16 @@ ext_compare_for_state(const void *p1, const void *p2)
   struct ospf_lsa_header *lsa1 = &(he1->lsa);
   struct ospf_lsa_header *lsa2 = &(he2->lsa);
 
-  if (lsa1->rt != lsa2->rt)
-    return lsa1->rt - lsa2->rt;
+  if (lsa1->rt < lsa2->rt)
+    return -1;
+  if (lsa1->rt > lsa2->rt)
+    return 1;
+
+  if (lsa1->id < lsa2->id)
+    return -1;
+  if (lsa1->id > lsa2->id)
+    return 1;
 
-  if (lsa1->id != lsa2->id)
-    return lsa1->id - lsa2->id;
   return lsa1->sn - lsa2->sn;
 }