]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: sort qpim_channel_oil_list and qpim_upstream_list
authorDaniel Walton <dwalton@cumulusnetworks.com>
Wed, 28 Sep 2016 00:14:22 +0000 (00:14 +0000)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:10 +0000 (20:26 -0500)
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This allows "show ip mroute" and "show ip pim upstream" to display the
groups in order.

pimd/pim_oil.c
pimd/pim_upstream.c
pimd/pimd.c

index e09dc3f089568bcd1f8883e95281bc17f9896fd4..9728d6304f9ae6316e1dd67c53658034e9042e1f 100644 (file)
@@ -77,7 +77,7 @@ pim_add_channel_oil (struct prefix_sg *sg,
   c_oil->oil_ref_count     = 1;
   c_oil->installed         = 0;
 
-  listnode_add(qpim_channel_oil_list, c_oil);
+  listnode_add_sort(qpim_channel_oil_list, c_oil);
 
   return c_oil;
 }
index 64fffa38591224f0e19ff3f5c2f6a7a7d8957814..eb69f6345996ecc035eaebb0cf9937224101fd35 100644 (file)
@@ -520,7 +520,7 @@ static struct pim_upstream *pim_upstream_new(struct prefix_sg *sg,
     return NULL;
   }
 
-  listnode_add(qpim_upstream_list, up);
+  listnode_add_sort(qpim_upstream_list, up);
 
   return up;
 }
index dff3f75aedd16fd158ce460fadbd7f4b009a10c8..3a010e81a1167a2f153ad31378ca47adcad44441 100644 (file)
@@ -98,6 +98,42 @@ static void pim_free()
   pim_route_map_terminate();
 }
 
+static int
+pim_channel_oil_compare (struct channel_oil *c1, struct channel_oil *c2)
+{
+   if (ntohl(c1->oil.mfcc_mcastgrp.s_addr) < ntohl(c2->oil.mfcc_mcastgrp.s_addr))
+     return -1;
+
+   if (ntohl(c1->oil.mfcc_mcastgrp.s_addr) > ntohl(c2->oil.mfcc_mcastgrp.s_addr))
+     return 1;
+
+   if (ntohl(c1->oil.mfcc_origin.s_addr) < ntohl(c2->oil.mfcc_origin.s_addr))
+     return -1;
+
+   if (ntohl(c1->oil.mfcc_origin.s_addr) > ntohl(c2->oil.mfcc_origin.s_addr))
+     return 1;
+
+   return 0;
+}
+
+static int
+pim_upstream_compare (struct pim_upstream *up1, struct pim_upstream *up2)
+{
+   if (ntohl(up1->sg.grp.s_addr) < ntohl(up2->sg.grp.s_addr))
+     return -1;
+
+   if (ntohl(up1->sg.grp.s_addr) > ntohl(up2->sg.grp.s_addr))
+     return 1;
+
+   if (ntohl(up1->sg.src.s_addr) < ntohl(up2->sg.src.s_addr))
+     return -1;
+
+   if (ntohl(up1->sg.src.s_addr) > ntohl(up2->sg.src.s_addr))
+     return 1;
+
+   return 0;
+}
+
 void pim_init()
 {
   srandom(time(NULL));
@@ -121,6 +157,7 @@ void pim_init()
     return;
   }
   qpim_channel_oil_list->del = (void (*)(void *)) pim_channel_oil_free;
+  qpim_channel_oil_list->cmp = (int (*)(void *, void *)) pim_channel_oil_compare;
 
   qpim_upstream_list = list_new();
   if (!qpim_upstream_list) {
@@ -130,6 +167,7 @@ void pim_init()
     return;
   }
   qpim_upstream_list->del = (void (*)(void *)) pim_upstream_free;
+  qpim_upstream_list->cmp = (int (*)(void *, void *)) pim_upstream_compare;
 
   qpim_static_route_list = list_new();
   if (!qpim_static_route_list) {