]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Don't double include Source 262/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 8 Mar 2017 12:50:55 +0000 (07:50 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 8 Mar 2017 13:38:11 +0000 (08:38 -0500)
When we are adding to a J/P Agg list, don't
double add the source.

Ticket: CM-15189
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_jp_agg.c

index 3ffdbe2017b99bc6d6a7b3d16dc2690723662240..67ddf05d0666c2ad371fce709eaa6a015f343d83 100644 (file)
@@ -170,7 +170,7 @@ pim_jp_agg_add_group (struct list *group, struct pim_upstream *up, bool is_join)
 {
   struct listnode *node, *nnode;
   struct pim_jp_agg_group *jag = NULL;
-  struct pim_jp_sources *js;
+  struct pim_jp_sources *js = NULL;
 
   for (ALL_LIST_ELEMENTS(group, node, nnode, jag))
     {
@@ -188,11 +188,20 @@ pim_jp_agg_add_group (struct list *group, struct pim_upstream *up, bool is_join)
       listnode_add (group, jag);
     }
 
-  js = XCALLOC(MTYPE_PIM_JP_AGG_SOURCE, sizeof (struct pim_jp_sources));
-  js->up = up;
-  js->is_join = is_join;
+  for (ALL_LIST_ELEMENTS(jag->sources, node, nnode, js))
+    {
+      if (js->up->sg.src.s_addr == up->sg.src.s_addr)
+        break;
+    }
 
-  listnode_add (jag->sources, js);
+  if (!js)
+    {
+      js = XCALLOC(MTYPE_PIM_JP_AGG_SOURCE, sizeof (struct pim_jp_sources));
+      js->up = up;
+      listnode_add (jag->sources, js);
+    }
+
+  js->is_join = is_join;
 }
 
 void