summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_igmp.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c
index 176470e20..2d1dea69a 100644
--- a/pimd/pim_igmp.c
+++ b/pimd/pim_igmp.c
@@ -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);