]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Prevent igmp packet loopback.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 29 Jun 2016 12:31:19 +0000 (08:31 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 29 Jun 2016 12:53:18 +0000 (08:53 -0400)
pim is joining the 224.0.0.13 and 224.0.0.22 groups
This is causing the creation of (*, 224.0.0.13) and
(*, 224.0.0.22) multicast routes which are immediately
sent to the pim network.

If we are the originator of the igmp report than
there is no need to accept the packet for
processing.

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

index 176470e201249c573021995ac8ee1499800c74d8..2d1dea69ab7c54f25aa08e3d54711447d351bda8 100644 (file)
@@ -717,6 +717,19 @@ int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len)
               from_str, to_str, igmp->interface->name, len, ip_hlen, ip_hdr->ip_p);
   }
 
+  /*
+   * When pim starts up we are joining the 224.0.0.13 and 224.0.0.22 multicast
+   * groups.  This is causing the kernel to create a igmp packet that pim
+   * turns around and receives.  Therefor if we are the originator
+   * of the igmp packet then we can probably just ignore it.
+   */
+  if (ip_hdr->ip_src.s_addr == igmp->ifaddr.s_addr)
+    {
+      if (PIM_DEBUG_IGMP_PACKETS)
+       zlog_debug ("Received IGMP packet from myself, ignoring");
+      return -1;
+    }
+
   if (ip_hdr->ip_p != PIM_IP_PROTO_IGMP) {
     zlog_warn("IP packet protocol=%d is not IGMP=%d",
              ip_hdr->ip_p, PIM_IP_PROTO_IGMP);