summaryrefslogtreecommitdiff
path: root/proto
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2012-10-29 20:39:03 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2012-10-29 20:39:03 +0100
commit8249ad9b304ea88b29e3aea76ebe49bb50348aaa (patch)
tree0defb70982a42eae7016de6d9cacf5dd95d0b720 /proto
parente4404cef0be10e639566986a2f8c1906c9f37de1 (diff)
Fixes sorting in OSPF show state.
Diffstat (limited to 'proto')
-rw-r--r--proto/ospf/ospf.c52
1 files changed, 34 insertions, 18 deletions
diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c
index aa62da14..5792453d 100644
--- a/proto/ospf/ospf.c
+++ b/proto/ospf/ospf.c
@@ -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;
}